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.
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…
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:
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…
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.
Software architect, author, professor, teacher. Fascinated by the principles and technologies for building scalable distributed systems.