Skip to Main Content
Distributed systems aren't only more widespread than they used to be, but they've become more critical than ever, having moved from client-server systems to multitier heterogeneous systems. Many of these applications - such as telephone exchange systems - must be operational 24 hours a day, so shutting them down isn't a viable option for administrators who must make systemwide changes. As a system becomes larger and more complex, the likelihood of defects increases, which means a greater number of required fixes. Studies have found that nearly half the software development effort in complex distributed systems is devoted to maintenance. Furthermore, the industry currently favors iterative and incremental development approaches over the traditional waterfall approach in software engineering to flexibly handle requirements and reduce project risks by deploying smaller changes. These changes are regular and predictable. So, how can we build distributed systems to handle these kinds of changes? The answer, we argue, is dynamic evolution. From a business perspective, dynamic evolution permits frequent upgrades, which reduces the time between releases. Dynamic evolution also enhances flexibility in implementing changes to unforeseen and fluctuating business requirements. Many specialized distributed systems will benefit from factoring dynamic evolution into their designs. We can easily achieve dynamic evolution in a component-based distributed system. The abstraction of components and their connectors facilitates system structures to accommodate changes.