From the earliest days of mainframe computing through the rise of client-server models, service-oriented and microservices architectures, and now today’s AI-driven systems, software architecture has continually evolved to meet the ever-growing demands of technological advancement. However, supporting these advancements has led to increasingly complex and distributed systems, requiring the continuous expansion of the underlying infrastructure. More energy is required not only to operate the infrastructure, but also to support the rising computational workloads it must handle. This post explores how the evolution of software architecture is contributing to increasing energy consumption.
Evolution
1960s–1970s: Monolithic Architecture
In the early days of computing, software systems were typically built as monolithic applications—single unified codebases with minimal modularity. These systems operated on mainframes or early minicomputers, where processing power, memory, and storage were severely limited. A notable example is the IBM 7094, introduced in the early 1960s, which supported major space missions like Gemini and Apollo with only 150 KB of memory. Combined with the use of highly optimized assembly language code, the centralized execution model of early monolithic architectures minimized network overhead and reduced resource duplication. This led to more efficient use of the limited processing and memory resources available on mainframes and minicomputers. As a result, early computing environments achieved lower overall energy consumption per operation compared to the distributed, network-intensive architectures common today. An IBM post states that consolidating workloads onto five IBM z16 mainframe systems, released in 2022, instead of running them on x86 servers under similar conditions, can reduce energy consumption by up to 75%.
1980s: Client-Server & Layered Architecture
The layered architecture introduced in the 1980s split the single codebase into presentation, business logic, and data access layers. In parallel, the rise of personal computing and the expansion of computer networks during the same timeframe led to the emergence of the client-server architecture. Applications were further divided into two distinct components: client-side interfaces handling user interactions, and server-side systems managing business logic, data processing, and storage.