One of the great things about cloud computing is that there are many different architecture patterns and implementation styles to choose from depending on your specific needs and the problems you’re trying to solve. However, this blessing can also be a curse in that, unless you have a lot of previous experience, it can be hard to know which cloud architecture pattern is right for your applications. Let’s take a look at some of the most effective and widely used cloud architecture patterns and discuss their advantages, disadvantages, and best practices.
Each of the following cloud architecture patterns is designed to solve a specific set of problems in the development, management, and deployment of cloud-based applications and infrastructure:
Scalability is one of the biggest advantages of moving to the cloud. Horizontal scaling is the practice of adding additional provisioned servers to your resource pool, allowing you to split workloads between servers and limit the load on any one individual server. This is in contrast to vertical scaling, which adds more resources to an existing server or replaces the entire server with an upgraded model.
Horizontal scaling is a popular cloud architecture model because it’s relatively inexpensive to execute, plus it solves the problem of scalability without requiring any downtime. On the other hand, horizontal scaling requires a lot of cross-server communication, which can get quite complicated depending on your environment.
Auto-scaling is another cloud architecture pattern used to address the problem of scalability. It allows your storage, compute, and database resources to scale automatically based on predefined rules. You can choose specific triggers, such as memory usage hitting a high or low threshold, and then specify how resources are allocated in response to those triggers. This allows you to ensure optimal provisioning and performance without paying for more resources than you’re actually using.
Auto-scaling can be used to achieve horizontal scaling, as well. The downside of auto-scaling is that it is complicated to configure and manage, because your cloud infrastructure could, theoretically, be constantly and automatically changing.
In cloud computing, a queue acts as a buffer between a service and the task that invokes it. Cloud services may be subjected to heavy loads, for instance, because the same service is being used by a large number of concurrent tasks. Queues decouple tasks and services by allowing for asynchronous communication between them—essentially, a task can leave a message in the queue for the service to retrieve when it’s able to handle the load of that request.
A queue-centric cloud architecture pattern is useful for web apps that are frequently updated by users (e.g., a social media app) because it can process updates that are resource-intensive or time-consuming in an orderly fashion without services timing out. However, because queue-centric patterns rely on one-way, asynchronous communication between tasks and services, it’s less ideal for applications that require services and tasks to remain coupled.
Database sharding is the practice of dividing a data store into a set of horizontal partitions or shards for improved cloud scalability. This solves a number of cloud data problems by allowing you to scale up the computing resources and network bandwidth available to your data store. If you want to use the database sharding cloud architecture pattern, you’ll need to use a cloud database service that supports it. Your application’s data model must also support sharding, which may not be the case unless it was designed that way from the beginning.
Pets vs. cattle is a common analogy in the industry that describes the two different ways organizations think of their infrastructure. Servers that are given unique names, are manually maintained and cared for, and are upgraded over time to address issues or meet resource demands are considered “pets.” Servers that are provisioned and maintained automatically, replaced as needed, and given utilitarian names are considered “cattle.” Often, cloud servers start out as pets, but organizations tend to move to the cattle cloud architecture pattern to increase automation and allow for greater scalability.
The valet key pattern allows you to manage temporary access for reading and writing tasks in storage containers. Using this pattern, you can specify that a user is allowed to access very specific data, with specific permissions, for a limited amount of time. Applications using the valet key pattern can avoid using a web service as a security proxy, reducing latency and improving performance. However, this pattern doesn’t work well for all applications—for instance, if you need to maintain audit trails or control the number of times a data transfer operation is executed.
This list is far from exhaustive, but it does address some of the most common problems that people seek to solve with cloud architecture patterns. If you need help identifying your biggest cloud computing pain points, or if you’re just starting to build out your cloud environment and don’t know which problems you should anticipate, you may want to bring in outside experts to analyze your systems and requirements.