![]() |
Stable Storage |
![]() |
||||||||
Stable Storage based on Mirroring or ReplicationAuthor: Xavier CaronThe concept of Stable Storage has its origins in the realm of transactions and databases. A stable storage unit can be seen as an ideal storage medium that, given a set of failure assumptions, protects user data from corruption or loss. Such a storage unit offers two operations to the user, Write and Read, which can be used to store and retrieve user data to and from stable storage.
[3] constructs a framework for providing persistence for Ada objects based on streams. It classifies storage devices in a class hierarchy according to essential properties, like volatility, stability, etc. An abstract root class "Storage" defines the common interface for all storage classes, including Read and Write operations. The storage hierarchy is then split into volatile and non-volatile storage. Data stored in non-volatile storage remain intact even when the program terminates. Among the different types of non-volatile storage, there is then the distinction between stable and non-stable storage. Finally, the mirrored storage and the replicated storage are subclasses of the stable storage class. Here is an UML diagram of that hierarchy:
MirroringIn specialized literature, the "mirroring" technique, sometimes called "shadowing", often refers to duplication of data. For example, the Ralston Encyclopedia of Computer Science says: "Another recent trend is to duplicate data to enhance reliability. This technique, called mirroring or shadowing, allows systems to con-tinue operation in spite of media, controller, or channel failure. Sophisticated systems also take advantage of the extra I/O path to enhance throughput. On-line reconstruction ("remirroring") of a new second copy when one of the original two is lost is also common." The main idea is to write data in two locations instead of one, in a sequential order. If one write operation fails, we assume that the other copy is in a consistent state. It may be the state that was valid before the write operation, or it may already be the new one. Of course, there must be a mechanism to determine which one of the two copies contains the valid data. For this purpose, a third storage unit called the log is used. It allows us to distinguish between the three possible situations depending on the moment of the crash:
Mirroring can be used for instance in a transactional system in order to keep uncorrupted a log table mapped on sequential files. [1] is a complete paper on the subject. Its purpose is to describe the mirroring algorithm, and to present a state automaton (cf. next figure) covering all possible situations that can occur in the case of crash failures. Finally, an implementation in Ada 95 is presented.
ReplicationTraditionally, the main idea of replication is to store copies of a same object on different sites. Here is what we can read about the subject in McDermid Software Engineer's Reference Book: "Replicated files or other objects are usually provided to ensure resilience to node failures. Replicated data should always appear consistent to the user, even though all the copies may not be identical. Generally, it should be possible to execute any operation on the data at any of the sites holding a copy." In our thesis [2], the "sites" are storage units located on processing nodes. The challenge is to manage dynamically the evolution of the group of replicas since some of them can be suddenly unreachable or others can join the group. Next figure shows the overall design of the replicated storage. For a complete description of the system, the interested reader may refer to chapter 4 of [2].
Other Related Work
References
|
| EPFL | IC | LGL | Research |
URL: http://lgl.epfl.ch/research/ongoing/stable_storage.html
|
|||
![]() |
||||
| Last modified |
![]() |
|||