In this article, we’ll introduce some of the fundamental approaches to scaling a software system. The type of systems this series of articles is oriented towards are the Internet-facing systems we all utilize every day. I’ll let you name your favorite. These systems accept requests from users through Web and mobile interfaces, store and retrieve data based on user requests or events (e.g. a GPS-based system), and have some intelligent features such as providing recommendations or providing notifications based on previous user interactions.

We’ll start with a simple system design and show how it can be scaled. In the process…

Serverless technologies such as Google App Engine (GAE) and AWS Lambda are powerful platforms for cloud-based software systems. The ease of deployment and management that serverless platforms provide make them a compelling option for many organizations migrating their workloads to the cloud.

Serverless platforms have another attractive feature — their ability to automatically scale a service as the request load grows. Exactly how this autoscaling capability operates is cloud platform dependent. As is the bill you receive at the end of the month.

In the first article in this cloud scalability series, we showed how programming language choice for a…

Image for post
Image for post
Photo by Marvin Meyer on Unsplash

The transition of major organizational IT systems from on-premise to public cloud platforms deployments seems inexorable. Here are some numbers on cloud adoption from a recent survey:

  • 94% of enterprises already use a cloud service
  • 30% of all IT budgets are allocated to cloud computing
  • 66% of enterprises already have a central cloud team or a cloud center of excellence
  • 83% of enterprise workloads will be in the cloud by 2020

Individual market surveys and analyses should mostly (IMHO) be treated as fantasy, but when all indicators point in the same direction, some credence must be paid to their findings.

The last 20 years have seen unprecedented growth in the size, complexity, and capacity of software systems. This rate of growth is hardly likely to slow down in the next 20 years — what these future systems will look like is close to unimaginable right now. The one thing we can guarantee is that more and more software systems will need to be built with constant growth — more requests, more data, more analysis — as a primary design driver.

Scalable is the term used in software engineering to describe software systems that can accommodate growth. In this first part…

Image for post
Image for post

Imagine a civil engineer examining the detailed plans for a new office tower. They see a fancy, aesthetically pleasing structural design element that adds massive complexity and cost to the construction. Do they say “This architect was smoking something - that feature will add a year to the construction time! I think this design is a smelly”?

Maybe the first part? But no. They don’t.

What about an electrical engineer, testing a new prototype for a circuit board. They see a potential problem with the layout that may affect operational reliability. Do they tell their colleague “This circuit smells, dude!”?

We live in an age where massive scale, Internet-facing systems like Google, Amazon, Facebook and the like are engineering icons. They handle vast volumes of requests every second and manage data repositories of unprecedented size. Getting precise traffic numbers on these systems is not easy for commercial-in-confidence reasons. Still, the ability of these sites to rapidly scale as usage grows is the defining quality attribute behind their ongoing success.

We can luckily get some deep insights into the request and data volumes handled at Internet scale through the annual usage report from one tech company. You can browse their incredibly…

Ian Gorton

Software architect, author, professor, teacher. Fascinated by the principles and technologies for building scalable distributed systems.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store