< Day Day Up > |
Chapter 9: Concluding Remarks
"The sum of human wisdom is not contained in any one language, and no single language is capable of expressing all forms and degrees of human comprehension."Ezra Pound
Many of the patterns presented in this book generalize existing patterns to some extent. For example, Pooling (97) has many specific instantiations, such as Thread Pooling and Connection Pooling. One of our goals in writing this book was to find the similarities and differences between such patterns, to ultimately reveal the pattern behind the patterns. The patterns are therefore based not only on our experience, but instead on the experience of many researchers and developers.
As we have tried to show, the patterns presented in this book are not specific to any domain. Managing resources effectively and efficiently is a challenge that spans domains and systems, as well as layers within a system. In identifying patterns in resource management, we have tried to take advantage of our experience in building systems of different sizes in many different domains. Our experience has taken us through building real-time embedded, autonomous, Web-based and large-scale enterprise systems. While the domains and the types of system we built varied greatly, the fundamental problems in resource management were very similar. This provided the stimulus for us to describe the solutions in pattern form that we felt best addressed the problems.
An increasing number of languages and run-time environments support the concept of garbage collection, which allows the run-time system to detect and release memory that is no longer being used automatically. Garbage collection is a specialized instance of the Evictor (168) pattern that embeds logic to support automatic identification of unused resources. By identifying unused resources and releasing them, garbage collection gives much more control and predictability of resource availability to runtime environments. In addition to Java and C# offering implementations of garbage collection in their run-time environments, one can find garbage collection implementation for C++ [Boeh04] as well. A growing demand for the support of automated efficient resource release mechanisms in today's infrastructure environments can be observed, as intermediate code with relaxed rules for explicit release of resources becomes a commodity.
Middleware technologies such as J2EE [Sun04b] and .NET [Rich02], with their JVMs (Java virtual machines) and CLR (common language run-time) respectively, automate much of the previously tedious resource management work that confronts a developer. These technologies employ many of the patterns presented in this book in their infrastructure. Pooling (97) and Caching (83) are used to make EJB containers and JSP and ASP.NET engines efficient. The .NET Data Set makes use of Caching to allow efficient use of database content. Using this pattern, the .NET Data Set avoids expensive accesses to the database by providing the database client with a local copy of relevant data. .NET also makes use of Leasing (149). For example, in .NET Remoting [Ramm02] client-activated remote objects are managed based on leases.
One of the most prominent emerging next-generation technologies is ‘grid’ computing [Grid03]. Grid computing is about sharing and aggregation of distributed resources, such as processing time, storage and information. A grid consists of multiple computers linked to form a single system. Lookup (21) and Resource Lifecycle Manager (128) fit in well in addressing some of the requirements of grid computing. Both patterns play an important role in linking and managing multiple resources. A grid can be regarded as a large resource management system, in which it is important to manage processor time, memory, network bandwidth, storage, and other types of resource effectively. The overall aim is to schedule the applications that need to use the available resources in the grid environment efficiently and effectively. Some grids, such as Condor [Cond04], use Coordinator (21) to synchronize task submission and task completion. The architectures of available grid computing projects [BBL02] and toolkits vary, but the underlying concepts are the same in most of them. To a large extent, the architecture of a grid computing environment is very similar to that of ad hoc networks and peer-to-peer (P2P) networks. See Chapter 6, Case Study: Ad Hoc Networking for more details.
In addition to grid computing, the area of autonomic computing has been gaining popularity recently, with much research being conducted in that area. Modeled on the human body's autonomic nervous system, the goal of an autonomic system is to control the functioning of software without requiring input from the user. An autonomic system manages itself and must therefore also be able to manage its resources in an automated manner. This can pose a new set of requirements and challenges, such as automatic resource reservation, resource allocation and reallocation, and resource movement. An autonomic system needs to anticipate the resources needed while keeping its complexity hidden. In addition, an autonomic system is often regarded as self-healing, with the ability to recover from failures automatically. Again, such behavior and functionality requires effective resource management.
To address the challenges posed by grid computing and autonomic systems, it is likely that our resource management pattern language would need to be extended. While the patterns presented in this book can address a large number of the requirements and forces of these emerging technologies, additional patterns may also be discovered. With this in mind, our contribution here should be regarded only as a start in the search for a much larger resource management pattern language.
We hope that this book is the start of a pattern language for resource management that will grow as knowledge of it spreads and hidden aspects of resource management become visible. We intentionally left out several resource management-related areas, such as the management of resources in fault-tolerance systems [Sari02] [ACGH+96], the influences of load balancing, and the whole area of reference accounting [Henn01].
We are excited how the above-mentioned technologies and resource management-related areas will shape and evolve the pattern language, as awareness of resource management grows in the future.
< Day Day Up > |
No comments:
Post a Comment