A look at some important elements to consider during the planning, design, and implementation phases.
We have all seen numerous articles that describe why cloud computing is relevant today and detailing the benefits of cloud. The emphasis of most of them is on why cloud is relevant and how it works, but it’s also important to consider where to really get started and how to approach your cloud computing journey. This article is from the perspective of the implementation of a cloud-based solution — the aspects to consider during the planning, design, and implementation phases.
There are different types of cloud offerings, and there are multiple vendors in the market offering various competitive solutions. You should consider all the options to choose the right fit, which could even involve engaging multiple cloud offerings.
Deciding on a suitable cloud offering
The first step toward cloud implementation, obviously, is deciding whether cloud implementation is suitable for your solution. If the answer is yes, then then you’ll need to determine an appropriate cloud offering.
For many of the applications, the primary driving force for cloud implementation would be to reduce the infrastructure cost, but that should not be the only factor that you consider — cloud provides many benefits that should be leveraged. You should also try to avoid a “big-bang approach,” instead endeavouring to achieve the implementation in stages.
There are various tools available in the market to assess the cloud readiness of your application (for example, this is a tool from IBM). Based on the application workloads, non-functional-requirements (NFR), the technologies currently being used, and the existing hardware/software stack, these tools can help in evaluating your application for the target deployment environment, the cloud readiness, and the cloud benefits that can be achieved. It is worthwhile exercise to use one of these tools at the very beginning of the cloud journey.
Ask yourself the following questions to help decide on a suitable option:
- Is this for migrating an existing application or for born-on-the-cloud? For cloud native applications (born on the cloud), PaaS is a suitable option because the MVP (minimum viable product) can be quickly achieved in PaaS. Functionality can be implemented incrementally. If doing as-is migration of an existing application, then there are limitations on the middleware compatibility (like a specific version of the OS/software), so IaaS could be the right solution.
- Is all the required middleware supported by the cloud offering? There is a limitation on the middleware options offered by cloud providers and the support provided. For migrating legacy applications, verify if the required/compatible middleware support is available. If it is not compatible, then you might have to make major changes to the application. This is not a recommended approach, as it will eat up a majority of the time and effort of the migration activity.
- Are there any data security/compliance considerations? If the application is dealing with secure data (like personal information/sensitive personal information), then check the data compliance of the cloud options. Regulatory requirements might mandate that sensitive data should not be stored on a public cloud instance, or there could be geographical restrictions. In such a case, you could consider a hybrid cloud solution, with data on-premises and application services deploying on public cloud. Another aspect is to consider cloud offering based on a single-tenant/multi-tenant offering.
- Is the application internet-facing or intranet? This would determine if the application can be hosted on public or private cloud, depending on the network/firewall configurations. Internet-facing applications can still be hosted behind the firewall (on a private cloud), where the internet traffic should be handled by an instance of public cloud and then rerouted from there.
- Does the application require integration with existing Enterprise applications behind the firewall? For such requirements, a public cloud may not be suitable depending on the corporate firewall policies.
- Does the application use any specific third-party/open source components? If your application is using any specific tool or licensed software, then there is a possibility that that it may not be supported on PaaS, but the PaaS offerings have a rich set of tool sets that you can chose from, as an alternative. That will require a refactoring of the application.
- Does the application work with native filesystem on the hosted server? If the answer is ‘yes,’ then it is not a reliable solution when hosted on cloud. Filesystem integration could be migrated to any of the appropriate Cloud solutions.
Designing the cloud solution
Once the appropriate target cloud environment has been identified, the next step is to design the cloud solution. The following are the critical aspects to be consider during design:
- Security: This is one of the primary deterrents for organizations to adopting cloud solutions. The following points should be taken care of to provide appropriate security:
- Cloud security controls: Deterrent controls, preventative controls, detective controls, corrective controls
- Security and privacy: Identity management, physical security, personnel security, privacy
- Data security: Confidentiality, access controllability, integrity
- Encryption: Data in transit, data at rest
- Compliance: Business continuity and data recovery, log and audit trail
- Legal and contractual issues
- High availability (HA) and disaster recovery (DR): The nature of cloud means you have limited control on the scheduled and un-scheduled outages. If there is an NFR for this, then the component design should be robust enough for providing HA and DR functionality. The infrastructure itself does not provide any related features, but this can be achieved using the services provided by the PaaS provider in harmony with the application design. A few options are to host the application on multiple data centres of cloud, monitor the application and scale as and when required, use containers for dynamic provisioning of services, etc.
- Data backup and restore: Cloud providers offer various backup service options (like Evault backup services). Application teams should consider these services for the ability to restore the system in case of any data loss.
- DevOps pipeline: Automation and using tools for executing repeated activities is the key for achieving quicker deployments and providing more business value to the client. Cloud offerings, especially PaaS solutions, offer a wide variety of DevOps features for achieving continuous integration, continuous delivery, continuous deployment, and continuous operations.
- Use of containers: Processes and memory can be self-provisioned on cloud, and this dynamic nature of cloud enables the efficient implementation of container technologies like microservices and Docker. Automatic and dynamic scaling up/scaling down can be achieved instantly to support additional instances of services, depending on the application load.
- Load balancing: Load balancing is critical for couple of reasons. Firstly, it can act as a proxy for shielding the backend application servers. Secondly, for balancing the load across multiple servers. Cloud providers offer different load balancing algorithms, like round-robin, min-min, min-max, etc. It is important to understand the options and chose the appropriate one.
- Latency: Network latency is an important aspect to be considered, especially in a hybrid cloud environment, where there are multiple network hops (possibly across different cloud vendors) for a single client request. Cloud service providers can assist in intelligently routing end-users to the closest cloud data centre region within their network.
- Clustered environment: In a clustered environment, it is suggested to provision different servers on separate pods. Any scheduled maintenance is usually done on one pod at a time. So, within the cluster, this distribution will ensure that at least one server is up at any given time, to handle client requests.
- Scaling (vertical/horizontal): This is the ability for an IT resource to handle growing or decreasing demands in a capable manner and is one of the most beneficial and popular features of cloud. Horizontal scaling is often considered a long-term advantage, whereas vertical scaling is usually considered a short-term advantage. Vertical scaling may have a cost benefit, but it could end up being the weakest link or a single point of failure.
- Middleware and software: Choosing the appropriate middleware and software for the solution depends on multiple factors, such as usage in existing applications, skills available, licensing limitations, options provided by the cloud provider, etc. The cloud vendors provide a pre-defined set of options. So, a compatibility check must be done before migrating any existing application. Part/whole application rewrite may be required to make use of the various cloud features to full potential.
- Monitoring: Application performance monitoring and infrastructure (server) monitoring are critical for making sure the application is both secure and available. Cloud providers offer tools to analyze virtual machine workloads. They provide highly customizable dashboards and metric collection, which can provide consolidated solutions for consistent monitoring. Automated actions (like increasing hardware resources, managing the number of service instances running) can be configured to maintain the health of the system.
- Hybrid cloud solutions: They include application integrations spanning different cloud environments, across different vendors or on-premises. Firewalls will have to be configured to enable such integrations. These integrations could be asynchronous or synchronous in nature, based on the functional and/or technical requirements. Caching of data that does not frequently change can help reduce application processing times.
- Encryption: Encryption of data at rest is important in a cloud environment, for security and compliance reasons, especially in multi-tenant environments. Encryption of backed-up data is also equally important.
Implementing a cloud solution does not just mean hosting an existing legacy application onto new shared infrastructure. This may be a good first step to help reduce infrastructure costs, but cloud offers various services for achieving flexibility and efficiency, in a cost-effective way. The full potential of the cloud lies in using appropriate services.