A Guide for Scaling Cloud Native Web Applications
Today’s cloud native solutions require a more complex software architecture, utilize multiple servers, multiple data stores, and are required to scale to 1000 requests per second (and beyond). This is what we call a Realscale architecture. Realscale architecture meets the need of applications that go beyond a single-server application but are not yet reaching today’s massive “web scale” needs.
Modern web applications can take on many forms. Often, they begin as simple solutions that utilize one codebase, a database, and are deployed to a single server or public PaaS. The rare ones are those that are truly “web scale” – the Facebook, Twitter, and Netflix solutions that require huge numbers of servers and services to make it all work. But what about the applications that fall in the middle? What about the solutions that go beyond what a single server can handle?
Today’s cloud native solutions require a more complex software architecture, utilize multiple servers, multiple data stores, and are required to scale to 1000 requests per second (and beyond). This is what we call a RealScale architecture. However, little is written about how to craft your software and cloud infrastructure to achieve these goals.
This site provides an overview of a Realscale architecture, the various components required to support them, and some guidance on how to build out your own RealScale solution.
Characteristics of a Realscale Architecture
Software and infrastructure can take on a variety of goals and may be comprised of a wide variety of implementation details. This means that we need to define what a Realscale architecture is (and what it isn’t). Let’s look at the key characteristics for a Realscale architecture:
1 Cloud Native Architecture
While some solutions can be developed using a single or few fixed servers, either in a data center or provisioned from a cloud provider, Realscale architectures depend heavily on the elastic nature of cloud infrastructure. This elasticity allows for adding servers dynamically to handle an increase in traffic, to decreasing servers during off-peak times. Services can be provisioned from cloud providers to grow with the needs of the solution. It also means that RealScale architectures build support for resiliency in the case of distributed service failures and server failover into the software design from the start.
2 Server Complexity
Traditional software architectures often make the assumption that the server count and configurations are fixed. Realscale architecture may have server counts that range from 10 to 200 servers. Often, the total number of servers may vary over a specific period of time. Some servers may run 24/7, while others spin-up for additional capacity or for a specific use and then shutdown.
3 Data Complexity
Realscale architectures manage data sets from 1 GB to 100 GB. This data may be housed in a set of highly available database servers from a single vendor. However, most application complexity requires multiple data storage solutions that can handle transactional, document-based, and search-based data structures.
4 Service Complexity
Applications that utilize a Realscale architecture go beyond simple static content and server code. Optimized content delivery using content distribution networks, API layers, 3rd party APIs, and other services are all required to create the solution. This often requires message queues, complex disaster recovery plans, and a heavy reliance on automation at all layers of the system.
5 High Request Capacity
Realscale applications must be able to sustain 500-1000 requests per second, with the ability to burst for larger capacity. This enables sites to support up to 1 million visits per day, spread across your static and dynamic web assets. If this seems like a small number, your solution may border on “web scale”.
Who should use this site?
Developers and ops engineers building applications that target the cloud natively and need to scale an existing application.