Component-based software development technologies have been advocated for years [31]. Recent developments in the software industry are posing to make it as easy to develop a distributable software component as it is to code a traditional software module [21, 23]. An abundance of standard-binding inexpensive software components is about to emerge. It will soon be possible to use redundant software components to enhance application reliability or to improve system performance without doubling or tripling component costs. Component integration cost, however, remains high. Before average software developers can take advantage of the coming abundance of low-cost software components, component integration techniques must be improved so that the benefits of adopting redundant components outweigh component integration cost.
Redundant Arrays of Independent Components (RAIC) is a technology that uses groups of similar or identical distributed software components to provide reliable services to software applications. The RAIC architectural style is a special architectural style designed to take advantage of redundant independent components in a systematic way. The types and relations of components in a RAIC is the basis of how they should be integrated. After component types and various component relations are determined, an appropriate RAIC level and an invocation model can be adopted. The RAIC level and the invocation model dictate how a RAIC controller functions.
RAIC controllers use the just-in-time component testing technique to check component status and detect component failures. RAIC feelers provide other status information to assist decisions in component selection. RAIC allows components in a redundant array to be added or removed dynamically at run-time. Component state recovery techniques are used to bring replacement components or newly added components up-to-date.
Together, these systematic strategies and supporting technologies enable software developers to integrate redundant software components in an array with no or little coding. They can then use the array as a single component. Thus, by following the guidance of the RAIC architectural style, component integration cost can be lowered.
This technical report describes of RAIC and the RAIC architectural style. It presents categorizations and definitions of component types, component relations, RAIC levels, and invocation models. It also discusses the just-in-time testing and component state recovery techniques used in RAIC. A number of examples and scenarios are given to illustrate different types of RAIC. Future research directions in RAIC are also outlined.