Buddy System
From HomoExcelsior
1. When a critical member of a system is supported by another which can take over it's function in failure or high-load. 2. Generic term for many types of systems where components or subsystems are paired up (or redundant). 3. System where adjacent members can replicate functionality.
In memory allocation systems, such as Unix-like kernels, a buddy system is employed which merges adjacent (continugous) memory blocks (pages) into one block to avoid fragmentation. An exponential buddy system might look for all free and adjacent 4Kb blocks which can be merged into 8Kb, all 8Kb blocks which can be merged into 16Kb blocks, etc. The same system would break a 16Kb block into two 8Kb blocks for allocations of 8Kb or less. A fibonacci buddy system would work in the same manner, but look for blocks of size X, where X is a fibonacci number (1, 2, 3, 5, 8, 13, 21, etc.) Eg. a pool of 21Mb, would be split into sub-blocks of 13Mb and 8Mb if a request arrived for less than 13Mb of memory. (See also: Slab Allocator, Unix Operating System)
In network services, a pool of web servers might be placed behind a web-multiplexer (such as Cisco Systems' Local Director, or Hydraweb's Hydraweb product). These web servers might monitor 1 or more other servers and take over their role in the event that they fail.
In database systems, a pool of database servers might each be primarily responsible for their own data, but also replicate the data of one or more other servers. When a server fails or becomes disconnected one of it's buddies takes over.
See also: distributed computing, high-availability, voting algorithms, distributed file system
