When it comes to Cloud, Amazon Web Services and Microsoft Azure are the first two that comes in mind. There are other providers too, such as Google, VMWare, RackSpace, IBM, and many more that will popup in the search engine. Even Apple has its own version of iCloud offering.
Source Gartner May 2015
Irrespective of providers, the basic concept while designing for the cloud remains the same. Comparing the infrastructures, Cloud is designed for scale-out, where as on-premise infrastructure is designed for scale-up.
Below illustrations explains the different types of service such as on-premise, IaaS, PaaS and SaaS
Concerns while designing for the cloud infrastructure
- Integration – How to migrate current running instances from on-premise datacenter to the cloud? How to integrate the services without affecting the customers?
- Cost and Savings – This is a major concern for everyone. It should be done in the most effective manner such that it does not exceed the cost during the high peek load times. Poorly designed cloud architecture may lead to increased expense.
- Features and model of the offerings from the service providers – Every provider operate in a unique way. Not all service providers have an offering that will help in the success of the business. Hence identifying the right mix is very important. Sometimes the cost per hour is not the deciding factor, rather the features needed for making the project or business successful helps make the right decision.
- Security – It has been a topic of debate for a long time about the security of the public cloud. In my opinion, public cloud is probably more secure than on-premise datacenters because a large number of businesses and their data is at stake. In addition, public cloud has strong failover and backup policy in place. Their process, equipment, talent, etc. are more streamlined than what is available for on-premise data centers. Most of the times, security breach happens due to users negligence for not having proper policies in place.
- Licensing Models – Some licensing models are complex. It is important to know what are the licensing implications, like operating system license, applications running on the systems, etc.
Consideration while designing for the cloud infrastructure
- If you are not already building a new application, cloud migration will happen in bits and pieces, not in one go. Consider an approach of getting the easiest and fastest-to-the-market piece to be moved into the cloud first. An example would be, if hosting exchange server on-premise, moving it to Office 365, a SaaS offering from Microsoft might be a good idea.
- When designing for cloud assume unreliable infrastructure. Public cloud infrastructure is build to cater all type of load so it should be designed with failure in mind. What happens if, the region where your application is hosted stops working? Should it go to another cloud region or should it failover to on-premise?
- Understand the cost structure – Look for discount bands, design implications. Can the server be powered off if not in use? Remember, if the servers are powered on, but not in use, it will still incur cost. Do you need all the servers or can there be an automated script to scale in and out based on the load or other factors? Fixed cost can be considered too, i.e. longer you commit cheaper it gets, but most service providers has been reducing their offering cost as they add more features and paying customers, so commitment for a long time might cost more in this case. Consider choosing the right plan based on the business needs.
- Geo-targeting your resource group – Identify where your servers should reside. This could be based on the users or the consuming applications or the latency between the servers. Most of the time, keeping the servers in the same geographic region will help reduce cost on data transfer between the datacenters. At the same time it can have implication for the customer experience. If you do not have customers outside of United States do you really need to use server resource group outside of the country? Keeping an option open to move to a higher availability zones within the region will help in certain cases.
- Consider using hosted database instead of hosting the database on a virtual server unless you need integrated authentication or special service that needs to be run on the server.
- Understand the ingress and egress traffic – Sometimes putting the data into the cloud infrastructure is free or cheaper but getting them out might cost a lot of money.
- Understand the SLA – Most service providers publish SLA upto 99.99%, but what happens if it is down for .01% time. The service providers might reimburse you for the downtime, but not for the revenue lost. So having a failover mechanism during such situation is very important.
- Build alert for the operations to provide proper support, monitoring and uptime.
- Understand security – Proper security should be implemented. Cloud infrastructure may be secure, but there could be leak from the user side. Week password is often the cause of compromised security. Having multi-factor authentication help in creating much secure environment. Ask about the SOX, PCI Compliance if accepting credit cards.
- Hybrid cloud availability – If you still have an on premise environment, it is important to know if the providers has ways to securely connect to your data centers so that application can interact as expected.
These are just a few high level considerations, but most of the time it depends on many other factors that affect the business success matrix.
I would to hear your thoughts in the comment section below about how will you design your application for the cloud. You may also ask me any design questions, if I can be of any help to you.