Well Architect Framework — Performance Efficiency on the Cloud
By: Pankaj Jainani
Tags: Architecture, Azure, AWS, Google Cloud Platform, Cloud Computing

Scaling Up or Scaling Out

The architecture’s deployment should consider the right tools and technology which can support to handle the unpredictable load on the application. It encompasses either Scale-up or Scale-out of the cloud resources.

Scale-up or Scale-down is upgrading or degrading the tier for existing cloud resources. For E.g. we can increase a virtual machine from 1 vCPU and 2 GB of RAM to 2 vCPUs and 7 GB of RAM.

is upgrading or degrading the tier for existing cloud resources. For E.g. we can increase a virtual machine from 1 vCPU and 2 GB of RAM to 2 vCPUs and 7 GB of RAM. Scale-out or Scale-in is adding or reducing the resource instances to support the load of your application. For e.g. adding more front-end VMs to the application to level or the amount of load increase.

This unpredictable scaling based on workload is very much possible with having resources in the Cloud. To scale these types of capabilities in an on-premises environment, you typically have to wait for procurement and installation of the necessary hardware before you can start using the new level of scale.

Autoscale

Autoscale is a feature that allows you to scale either on a metric-based event-trigger or at a particular schedule. An example to add the instance of a VM when CPU thresholds breached 80% or before the start of the business at 08:00 AM.

Storage Performance

Another aspect of improving application performance is to reduce the bottleneck at improving the performance of the storage layer. This can be accomplished by considering various aspects by choosing the right storage technology or by architectural considerations. Let’s touch upon a few concepts —

Choice of Disk

The persistent data is stored ultimately in a disk, the way you consider the choice of VM depending on your application workload, similarly the choice of disk plays a vital role. Consider from the choice —

HDD: Spindle disk storage, used where the application is not bound to the consistent throughput, latency. Mainly used for dev/test workloads.

SSD: SSD-backed storage has a low latency of an SSD but with lower levels of throughput. A non-production web server is a good use case for this disk type.

Premium SSD: Suitable for production workloads where it demands for consistent high-throughput, low-latency, and highest reliability.

Caching

Caching is the most common approach to improve application performance. It is achieved by adding a cache-layer between the application and the storage. The most frequently accessed data is stored in-memory with cache components, you have control over the type of data stored, how often it refreshes, and when it expires.

Polyglot Persistence

Polyglot persistence is the use of different data storage technologies to handle your storage requirements. Suppose that you store application assets in a blob store, product reviews and recommendations in a NoSQL store, and user profile or account data in a SQL database. In this particular approach, each business use-case is supported by just-right storage technology and architecture adoption.

Network Performance

The network plays an important aspect in improvising application performance, the ultimate goal is to minimize the overall network latency by incorporating best practices within the architecture.

The concept of network latency plays a vital role in the Cloud than that of traditional data-center because in the former the resources are distributed across racks, data-center, and regions. Thus the latency is directly proportional to the distance between application users and the data-center.

There are various considerations while deciding the network in the overall application’s solution architcture.

Host correlated application resources close to each other. For example — application frontend, backend services, and database persistence should reside in the same Cloud region close to the end-users.

Consider load-balanced front-ends, globally distributed backend services, and database read-replicas for supporting users from multiple geographies.

Consider using the caching layer, application cache, or content CDN, to minimize high-latency calls to remote databases for frequently accessed data.

The dedicated connection between your network and the public Cloud. It gives you guaranteed performance and ensures that your users have the best path to all of your Azure resources. Example — Azure Express Route, AWS Direct Connect, or GCP Interconnect.

Considering the impact of network latency on your architecture is important to ensure the best possible performance for your users

How to identify the performance bottlenecks?

The answer is hidden in identifying optimal tools and processes that can help you to make sure that the application performs well. Let’s help you to understand the performance requirement. One can debate that even if the Cloud gives you an opportunity to keep improving performance and scalability endlessly but this approach eventually can become too expensive to the business.

Therefore, the performance measurement criteria should be influenced by the Non-Functional Requirements (NFRs)desired by the business from the application, by that way the performance goals can be achieved seamlessly with appropriate justification to the business.

Once NFRs are identified you need to plan your monitoring and operations rules. Every public cloud provides tools and processes to track the performance of the applications and other resources.

Azure — Azure Monitor, Log Analytics, Application Insights.

AWS — Cloud Watch, Cloud Trail.

GCP — Stack Driver

Conclusion

In this post, we discussed some of the key principles of the performance efficiency pillar of the Cloud Well-Architected Framework. I tried to highlight the importance of various options for scaling your application, how to use autoscaling to handle scaling automatically. I also touched upon the proper storage tier has a direct impact on performance, and using caching service, and polyglot database choices. Lastly, ways to identify performance bottlenecks in your application by using the right choice of tools to monitor the applications and other cloud resources.