Software is a strategic differentiator that can catalyze digital transformation. Organizations are investing in technology, such as modern cloud services, to drive efficiencies and increase the customer experience. To make this a reality, it’s essential that business leaders have a basic understanding of business software and applications work and the opportunities they bring.
A key enabler of digital transformation are distributed computing systems or applications. This article explores the characteristics of these technologies, what they are designed to achieve, how they scale, and how they support cloud native technology.
Distributed systems were made possible by two advancements in technology during the 1980s. The first were powerful microprocessors that were eventually succeeded by even more powerful multi-core central processing units (CPUs) which can run multiple processes concurrently (single-core processors on run one process at a time). As CPUs became more powerful, equally more powerful applications could be developed.
The second development was high-speed computer networks. Local area networks (LAN) could connect thousands of machines and enable them to communicate with each other. Wide area networks (WAN) scaled that capability to hundreds of millions of machines.
Distributed systems are characterized by a collection of autonomous computing elements that, to users, appear as a single system. The elements are known as “nodes” and can be devices such as a PC or smartphone or a software process. The internet is the perfect example of a distributed system. Composed of large numbers of hardware and software elements it appears as a single system. Data is stored transparently to users, servers are hidden from the eye, and information is served to a user’s browser or inbox in a seamless manner.
This is known as abstraction. It’s a common term in IT. For example, a browser abstracts the complexity of the distributed systems behind the internet. Applications such as Gmail, Hubspot, and Salesforce also abstract away the complexity of what powers them.
Getting back to nodes. Nodes collaborate by exchanging messages between, for example, your browser (node A) and a domain server (node B) which serves up content in response to a request from the browser on your device. This communication is a key characteristic of distributed systems.
Middleware is a distinct software layer that sits on top of the distributed system or node’s operating system. It’s what allows applications that aren’t compatible to communicate. Middleware also provides additional application services including security and recovery from failure.
Middleware is a lot less prevalent today and has been superseded by Application Programming Interfaces or APIs. An API functions as a gateway that allows applications to securely communicate that might not otherwise be able to because they have incompatible interfaces. It’s another form of abstraction that “abstracts” away the application interface.
Open APIs have become commonplace as developers open their application APIs to other developers outside the organization so that they can leverage their data. Yelp, for example, relies on the Google Maps API to populate its map feature.
Despite the popularity of APIs, middleware hasn’t become extinct – it still provides important security, management, and application coordination functions – it’s simply that APIs have replaced the communication capability.
The design goals of distributed systems
Let’s take a look at the main goals of today’s distributed systems:
Let’s take a deeper dive into scalability. Scaling up a system allows you to add more memory, upgrade CPUs, etc. without increasing the amount of machines. Scaling out means extending the distributed system by adding more machines. The two terms are often used interchangeably. If IT refers to scaling applications up, it’s likely they mean scaling out (which cloud environments have made very easy and affordable to do).
Scaling out is critical for apps that experience rapid spikes and require additional resources, but only for a limited time, as in the Netflix example. But other tools can also require scaling out, such as data analytics platforms that need more capacity when algorithms are run.
To build this level of full compute capability into applications is costly. But with the ability to scale-out, powered by a distributed computing system, applications can add resources and then return them to the resource pool when they’re no longer needed (scale-in). This increases efficiency and reduces cost.
But scalability is not without its challenges. Let’s take a look and explain some strategies for overcoming them:
Caching and replication can impact scalability due to a lack of consistency. How those inconsistencies can be tolerated depends on the app.
Distributed computing systems fall into three categories:
Cloud computing is such a prevalent distributed computing system that it’s worth taking a quick look at how it’s organized.
The cloud consists of four different layers: hardware, infrastructure, platform, and application.