The present invention pertains to systems, methods and techniques for data mirroring and is applicable, e.g., to off-site mirroring of data for disaster-recovery purposes.
Data mirroring is a technique for tolerating failures. By keeping two or more copies of important information, access can continue if one of them is lost or becomes unreachable. Data mirroring can be used inside disk arrays, (commonly referred to as a redundant array of independent disks, or RAID); between disks or disk arrays; and/or across multiple sites (commonly referred to as remote mirroring).
Unfortunately, the design choices for remote mirroring are complicated by competing goals, e.g., keeping the copies as closely synchronized as possible, delaying local (foreground) writes as little as possible, maintaining accessibility in the event of a failure (across as many different failure types as possible), and using as little inter-site network bandwidth (which typically is fairly expensive) as possible.
The most common trade-off is between good performance at low cost against the amount of potential data loss, especially for recently-written data. Simple solutions, such as synchronously updating all copies, can provide good resilience to data loss, but have poor local write performance and incur high network costs in remote-mirroring systems. Accordingly, synchronous mirroring typically is reserved for short-distance mirroring, while asynchronous mirroring is used for long-distance off-site mirroring, especially where the off-site facility is a significant distance away from the operational site. Asynchronous mirroring is particularly preferred where the two facilities are many miles apart, which is often desirable to protect data from the possibility of a large-scale disaster or problem.
In this regard, primary site 12 performs its operations by executing one or more application programs across multiple host computers, such as host computers 13 and 14 shown in
Assuming that it is impractical to use synchronous mirroring, the copy of the data that the secondary site 20 necessarily will exhibit some amount of time lag with respect to the copy at the primary site 12. That is, the current copy of the data located at secondary site 20 always will reflect the copy of the data at primary site 12 that existed at some previous point in time. Some of the trade-offs mentioned above are reflected in the amount of such time lag that will be tolerated.
Another significant additional consideration is data consistency. That is, the secondary site 20 always should be able to reproduce a state that corresponds to a state that existed at the primary site 12 (albeit with some time lag). If, for example, some of the data-write operations that were performed at the primary site 12 subsequently are applied at the secondary site 20 in a different order, it is possible that the entire dataset at secondary site 20 will be corrupt and unusable (i.e., not just the data that were applied out of sequence, but potentially all of the data at secondary site 20).
An objective of certain embodiments of the present invention is to provide remote-data-mirroring techniques that make it possible to achieve a consistent state at the remote site 20 after something has gone wrong. For example, it might be problems with one or more of the local host(s) 13 and 14, the local data-storage devices (such as either or both of disk arrays 16 and 17) or a link between sites. Another objective is to accomplish the foregoing benefits with increased efficiency, and without materially slowing down the normal operation of the primary operational system.
One potential obstacle to accomplishing these objectives is the complexity of the configuration at primary site 12. Although
Moreover, as shown in
The overall approach of the preferred embodiments of the present invention is now described with reference to
In step 71, the local data-writing operations (e.g., for data writes into disk arrays 16 and 17) are divided into batches, each batch corresponding to a different time segment. In the preferred embodiments, the maximum duration of the time segment (which can be a hard or soft maximum) is specified based on how current the copy at the remote site 20 ideally should be. This system parameter generally is determined in advance by trading off the value of a more current copy at the remote site 20 against the additional cost associated with increased data currency. Typically, batches are scheduled for anywhere from every 30 seconds to every couple of hours or even every day, again depending upon how critical the data are. It is noted that in addition to such incremental data updates, there often will be periodic full data updates in which a complete set of all of the data in the relevant databases within disk arrays 16 and 17 at the primary site 12 are transferred over to the secondary site 20; however, only the incremental updates are addressed herein.
In most of the preferred embodiments, this step 71 is performed by specifying batch boundaries in real-time, with each batch boundary (or barrier) defining the end of one batch and the beginning of the next. Accordingly, the focus of this step 71 in the preferred embodiments of the invention is to identify a point at which to declare the current batch boundary. More detail regarding different approaches to determining where to place a batch boundary according to the various embodiments of the invention is described below. However, the general goal of this step 71 is to place the batch boundary at a point in time that is least likely to interfere with the efficiency of the ordinary operations of primary site 12, while at the same time ensuring that a consistent copy will be provided at the secondary site 20. To achieve this goal, the present invention generally attempts to obtain agreement among all relevant entities, again as described in more detail below.
Optional step 72 is directed toward increasing efficiency in the transmission of the batch data by eliminating unnecessary data-write operations that occurred during the time segment corresponding to the current batch. As noted above, the current batch corresponds to the time period ending with the batch boundary that was just declared in step 71 and beginning with the immediately preceding batch boundary.
In order to fully understand the processing performed in this step 72, some background information is helpful. Each batch of data-write operations that have been performed at the primary site 12 is intended to be applied atomically at the secondary site 20, i.e., applied in its entirety at the secondary site 20, or not at all. Application of only a portion of a batch generally is not guaranteed to result in any state that is consistent with any identifiable previous state of the primary site 12. The application of each new batch at the secondary site 20 advances the state of the secondary site 20 to the next subsequent point in time at which its state can be known to match the corresponding (although somewhat earlier, due to the inherent time lag) state of the primary site 12 (assuming no data errors during transmission of the batch).
Because batches are intended to be applied atomically, only the net effect of all data-write operations that occurred at the primary site 12 during the time segment corresponding to the current batch matters. Accordingly, individual data-write operations that do not affect the final state can be eliminated, and preferably are eliminated if there are expected to be net savings in terms of the reduction in the amount of data to be transmitted as compared to the processing costs. For example, if data are written into a data block at one point during the current batch and then are overwritten or marked for deletion later during the same batch, the earlier data-write operation can be eliminated from the batch. It is noted that, in addition to eliminating individual data-write operations, performing this step 72 can eliminate the need to timestamp or otherwise order each individual data-write operation that is transmitted to secondary site 20 as part of the same batch, thereby potentially further reducing the data-transmission requirements. In addition, or instead, in certain embodiments of the invention, compression is performed after the batch level; generally speaking, better compression can be achieved using larger segments.
In step 73, the remaining data-write operations for the current batch are transmitted to the remote data-storage site 20. In the preferred embodiments, each batch is sent separately (the earlier one must be completed before the next one is started). In addition, it generally is preferable to include a timestamp for the batch as a whole. In alternate embodiments, it is possible to transmit different batches at the same time. However, in either event an indication of boundaries between the batches (whether explicit or implicit) preferably is transmitted in order to permit the secondary site 20 to apply the batches atomically.
Upon completion of step 73, processing returns to step 71 in order to define the next batch boundary. In this way, a continuous string of batches, representing successive time intervals, are defined by the primary site 12 and transmitted to the secondary site 20 for application there. The result is a sequence of points at which the secondary site 20 has a mirror copy of the data in the primary site 12 (although delayed somewhat in time due to the inherent time lag of the process).
Between each pair of adjacent batches (e.g., batches 91-93) is a gap (e.g., gap 94). Within that gap is the defined batch boundary, typically at the center of the gap. As discussed in more detail below, the reason for the gap is that the various entities that are coordinating the definition of the batch boundaries typically will have different clocks. The gaps provide a margin to accommodate the maximum expected clock skew. In order to ensure consistency, no data-write operations are permitted to occur during any portion of the gaps.
Upon completion of each batch at the primary site 12, i.e., the designation of each new batch boundary, the corresponding batch is transmitted to the secondary site 20. Thus, batches 95-97 are transmitted for time intervals 91-93, respectively. The size of each of the batches 95-97 depends upon both the quantity of data-write operations that occurred during the corresponding one of the time intervals 91-93 and the quantity of such data-write operations, if any, that have been discarded in step 72.
Some of the efficiencies of transmitting data-write operations in batches, in terms of reducing the amount of data that need to be transmitted to the secondary site 20, have been described above. However, the difficulty of coordinating the various relevant entities in order to properly define batches also has been discussed. Many of the conventional techniques for asynchronous data mirroring involve a single disk array or a single host computer and therefore do not address the more complicated configuration discussed above. The conventional techniques that do address such complicated configurations generally use a structure in which a single entity has absolute control in real time over where batch boundaries are declared (sometimes referred to herein as a command-and-control structure), e.g., in which all local data-write operations simply are suspended when it is desired to declare a batch boundary. Unfortunately, such approaches usually result in a drastic reduction in throughput and efficiency at the primary site 12.
The preferred techniques of the present invention avoid any such real-time absolute control over the applicable entities. Instead, to the extent coordination is required, the present invention generally relies upon mutual agreement of autonomous (e.g., primarily operating according to an independent instruction set) or partially autonomous (e.g., operating independently at least with respect to some data-writing operations) agents involved.
In the various different embodiments of the invention, to the extent that agreement is desired among the relevant group of more or less autonomous agents, that agreement can be obtained from all of the host computers 131-133 (typically, the operating system for each host computer), all of the disk arrays 136-138 (typically, the controller for each disk array) or all of the link sequencers 142-144.
In the preferred embodiments, the system 130 is designed to minimize the number of entities from which consent is to be obtained. Therefore, if there are fewer disk arrays than host computers, then all other considerations being equal, the system preferably is designed to obtain consent from the disk arrays.
In other words, a batch boundary generator need only contact sufficient entities in order to get agreement that a boundary will be inserted in the request stream across all transmission points to the secondary site 20. That is, if there are, for example, two links (each with a link sequencer that determines what gets sent across the link, in what order), three disk arrays, and five hosts, then the necessary quorum for a barrier is just those entities that can enforce ordering across the transmission links. In practice, the number of link sequencers is likely to be equal to the number of disk arrays (assuming links are connected to arrays), and a host may reach consensus by talking just to the three disk arrays.
For the purpose of determining the set of relevant entities from which consent is obtained, the preferred embodiments of the invention divide a set of peer entities into consistency groups, i.e., groups of entities (such as LUs) that operate or are used completely independently from their peers. Then, consent preferably is obtained only from those entities within the same consistency group. Any of the conventional techniques can be used for identifying the consistency groups.
Preferably, all local data-write requests at primary site 130 are timestamped, either as they leave the hosts 131-133, or as they arrive at the disk arrays 136-138. That timestamp then is used for ordering the data-write operations, for the purpose of removing unnecessary data-write operations in step 72 (as discussed above) and/or for application to the storage devices (e.g., disk arrays 26 and 27) at the remote site 20. In order for the timestamps to have value, in the event they were generated by different hosts or different storage devices, they preferably are made “consistent” with each other. To do this, the timestamp generators preferably maintain synchronized (e.g., relatively loosely synchronized) clocks. Such synchronization generally is possible to within a fraction of a millisecond on a local area network (LAN), and to within a few milliseconds on a wide area network (WAN).
Another way to visualize the primary site 130 is shown in
The present invention provides a variety of different but related techniques for avoiding the use of a real-time command-and-control structure and for achieving the objectives outlined above. In the various embodiments of the invention, individual ones or various combinations of these techniques are used, e.g., as described in some of the examples below.
The first technique, illustrated in
However, if multiple entities are responsible for declaring batch boundaries, then an agreement preferably is reached among all such entities before an actual batch boundary is declared. This situation might arise, e.g., where multiple link sequencers 142-144 are monitoring data-write operations for different disk arrays 136-138, respectively. In such a case, agreement generally would not simply involve coordination among the link sequencers 142-144, but generally also would involve ensuring that there were no data-write operations, as monitored by each of the link sequencers 142-144, during the relevant time period 187. Because the link sequencers 142-144 themselves do not control local data-write operations, they generally are limited to monitoring and agreeing on an appropriate batch boundary based on historical data-write operations, i.e., local data-write operations that have already been performed by the data-writing entities.
In order to achieve agreement among multiple autonomous or semi-autonomous agents, a distributed-agreement approach preferably is used. An example is now described with reference to
In step 221, one of the entities responsible for declaring batch boundaries (whether a host, storage device, application, application component or link sequencer) sends (e.g., using broadcast or multi-cast) a message to its peers requesting a batch boundary at a particular point in time.
Alternatively, or in addition, a separate entity (e.g., a dedicated application or special-purpose processor) is used for monitoring and then requesting batch boundaries. These alternate embodiments essentially offload most or all of the administrative work involved in monitoring and/or suggesting batch boundaries to such a separate entity. As a result, e.g., the entities whose consent is required merely respond to requests for batch boundaries and, where applicable, propose more acceptable boundaries. In certain sub-embodiments, the separate entity monitors historical data-writing operations and attempts to declare a batch boundary within a gap of appropriate duration; however, after a specified period of time has elapsed since the last batch boundary was declared, it preferably requests a batch boundary, potentially with an indication as to how soon a batch boundary should be declared based on the maximum specified time lag between the copy of the data at the secondary site 20 and the copy of the data at the primary site 12. In addition, or instead, in certain embodiments of the invention the secondary site 20 has the ability to propose a batch boundary, e.g., in the same manner described above with respect to a separate entity at the primary site 12.
Each of the entities responsible for consenting to batch boundaries responds, and in step 222 a determination is made as to whether all of the peers agree. If so, then the batch boundary is declared in step 224 and processing halts until another request is issued in the next invocation of step 221. If not, then processing proceeds to step 225.
In step 225, a determination is made as to whether one of the entities responsible for declaring batch boundaries has sent a request for a different proposed boundary. For example, such a request might be sent if one of the peers which is a data-writing entity anticipates that its current data-write operation will not be completed by then or because it is in the process of, or has in its queue, one or more high-priority data-write operations. If such a request has been sent, then processing returns to step 222 to determine if all of the peers agree. If not, then processing returns to step 221 to await the next request for a batch boundary.
It is noted that any of a variety of different distributed-agreement algorithms may be used in order to obtain agreement among the various relevant peers as to where a batch boundary should be placed. Examples of distributed-agreement algorithms are discussed in Nancy A Lynch, “Distributed Algorithms” Morgan Kaufmann, 1996, ISBN 1558603484; and James Aspnes, “Randomized protocols for asynchronous consensus”, Distributed Computing vol. 16, pp. 165-175, September 2003.
Specific examples in which agreement is obtained are now discussed with reference to
A number of different but related techniques have been described above. These techniques can be used individually in a given embodiment, or embodiments can combine various ones of these techniques, as desired. For example, the hindsight approach discussed above generally is the least intrusive technique, as well as the one least likely to affect local efficiency, because it does not interfere at all with local data-writing operations. Accordingly, in one embodiment of the invention, the hindsight technique is attempted first, but if no quiet period of sufficient duration is identified and a sufficient amount of time has passed since the last batch boundary (e.g., relative to the specified maximum tolerable delay), then a request may be sent to a relevant group of data-writing entities. At this second stage, the likelihood of agreement is increased, particularly if the individual data-writing entities are willing to hold off their data-writing activities (or at least the non-critical ones) within the required margin around the proposed batch boundary. Moreover, by proposing the batch boundary sufficiently far into the future, the data-writing entities sometimes will be able to schedule their data-writing activities so as to minimize the impact on overall efficiency (e.g., based on estimates of completion time for jobs in their queue and by executing only shorter jobs immediately prior to the required silent period 252).
As noted above, the data-writing entities can agree in advance that batch boundaries will occur at pre-specified times (e.g., at fixed time intervals). Such an agreement provides a long lead time and the associated benefits described above. In addition, in certain embodiments the individual data-writing entities have the ability to send a request that a particular pre-scheduled batch boundary be modified, e.g., if the interests of efficiency indicate that such a modification would be desirable as the pre-scheduled batch boundary approaches.
The present invention also encompasses techniques using multiple different time periods for requesting batch boundaries. For example, an entity might initially send a request for a batch boundary to occur “now” or in a very short period of time. Then, if it cannot obtain agreement, it might send a request for a batch boundary to occur further out into the future, thereby increasing the likelihood that the relevant entities will agree.
In the embodiments described above, it generally is assumed that the initial batch-boundary proposal is provided by an entity within the primary site (e.g., primary site 12 or 130). However, in certain embodiments the proposal is provided by the secondary site 20. In such “pull-based” techniques, the secondary site 20 might request a current or past point in time, in which case the hindsight approach (discussed above) preferably is used to find a quiet period around the requested point in time. Alternatively, the secondary site 20 might request a future point in time, in which case any of the other agreement-based techniques discussed above preferably is used.
The agreement mechanisms and/or hindsight approaches of the present invention, as described above, thus take into account the individual circumstances of various autonomous agents within the overall system. As a result, the present invention often is able to achieve greater efficiency than is possible with conventional approaches.
In the discussion above, it generally is assumed that there is a single primary site (e.g., primary site 12 or 130) and a single secondary site (e.g., secondary site 20). As used herein, the primary site refers to a single logical site, which might in fact comprise multiple geographically distinct sites. If multiple logical primary sites exist, then the techniques described above can be applied independently to each. In the event that there are multiple secondary sites, the sites can be functioning as a single logical site, collectively storing a single copy of the data at the primary site, or else can be functioning as multiple logical sites, each storing its own copy of the data at the primary site.
The present invention primarily focuses on the processing performed at the primary site 12 or 130. As noted above, the secondary site 20 applies the received batches atomically. This can be done, e.g., in either of the following two ways:
1. Pessimistic: the writes for a batch are accumulated at the secondary site 20 until the entire batch has arrived. Once all secondary sites have agreed that they have a complete copy of the current batch, the batch is applied to the secondary copies.
2. Optimistic: writes are applied, but the data that are being overwritten are copied first. This can be done by making explicit copies, or by using a copy-on-write snapshot, or sequence of snapshots. In either case, one refinement is that multiple writes to the same destination need only save a single copy of the overwritten data for each batch. If the write subsequently is to be undone, the previously copied data are simply re-applied.
System Environment.
Generally speaking, except where clearly indicated otherwise, all of the systems, methods and techniques described herein can be practiced with the use of one or more programmable general-purpose computing devices. Such devices typically will include, for example, at least some of the following components interconnected with each other, e.g., via a common bus: one or more central processing units (CPUs); read-only memory (ROM); random access memory (RAM); input/output software and circuitry for interfacing with other devices (e.g., using a hardwired connection, such as a serial or parallel port, SCSI (small computer system interface), parallel-attached SCSI, FibreChannel, Ethernet, serial ATA, USB or firewire connection, or using a wireless protocol, such as Bluetooth or a 802.11 protocol); software and circuitry for connecting to one or more networks (e.g., using a hardwired connection such as an Ethernet card or a wireless protocol, such as code division multiple access (CDMA), global system for mobile communications (GSM), Bluetooth, a 802.11 protocol, or any other cellular-based or non-cellular-based system), which networks, in turn, in many embodiments of the invention, connect to the Internet or to any other networks); a display (such as a cathode ray tube display, a liquid crystal display, an organic light-emitting display, a polymeric light-emitting display or any other thin-film display); other output devices (such as one or more speakers, a headphone set and a printer); one or more input devices (such as a mouse, touchpad, tablet, touch-sensitive display or other pointing device, a keyboard, a keypad, a microphone and a scanner); a mass storage unit (such as a hard disk drive); a real-time clock; a removable storage read/write device (such as for reading from and writing to RAM, a magnetic disk, a magnetic tape, an opto-magnetic disk, an optical disk, or the like); and a modem (e.g., for sending faxes or for connecting to the Internet or to any other computer network via a dial-up connection). In operation, the process steps to implement the above methods and functionality, to the extent performed by such a general-purpose computer, typically initially are stored in mass storage (e.g., the hard disk), are downloaded into RAM and then are executed by the CPU out of RAM. However, in some cases the process steps initially are stored in RAM or ROM.
Suitable devices for use in implementing the present invention may be obtained from various vendors. In the various embodiments, different types of devices are used depending upon the size and complexity of the tasks. Suitable devices include mainframe computers, multiprocessor computers, workstations, personal computers, and even smaller computers such as PDAs, wireless telephones or any other appliance or device, whether stand-alone, hard-wired into a network or wirelessly connected to a network.
In addition, although general-purpose programmable devices have been described above, in alternate embodiments one or more special-purpose processors or computers instead (or in addition) are used. In general, it should be noted that, except as expressly noted otherwise, any of the functionality described above can be implemented in software, hardware, firmware or any combination of these, with the particular implementation being selected based on known engineering tradeoffs. More specifically, where the functionality described above is implemented in a fixed, predetermined or logical manner, it can be accomplished through programming (e.g., software or firmware), an appropriate arrangement of logic components (hardware) or any combination of the two, as will be readily appreciated by those skilled in the art.
It should be understood that the present invention also relates to machine-readable media on which are stored program instructions for performing the methods and functionality of this invention. Such media include, by way of example, magnetic disks, magnetic tape, optically readable media such as CD ROMs and DVD ROMs, or semiconductor memory such as PCMCIA cards, various types of memory cards, USB memory devices, etc. In each case, the medium may take the form of a portable item such as a miniature disk drive or a small disk, diskette, cassette, cartridge, card, stick etc., or it may take the form of a relatively larger or immobile item such as a hard disk drive, ROM or RAM provided in a computer or other device.
The foregoing description primarily emphasizes electronic computers and devices. However, it should be understood that any other computing or other type of device instead may be used, such as a device utilizing any combination of electronic, optical, biological and chemical processing.
Additional Considerations.
Several different embodiments of the present invention are described above, with each such embodiment described as including certain features. However, it is intended that the features described in connection with the discussion of any single embodiment are not limited to that embodiment but may be included and/or arranged in various combinations in any of the other embodiments as well, as will be understood by those skilled in the art.
Similarly, in the discussion above, functionality sometimes is ascribed to a particular module or component. However, functionality generally may be redistributed as desired among any different modules or components, in some cases completely obviating the need for a particular component or module and/or requiring the addition of new components or modules. The precise distribution of functionality preferably is made according to known engineering tradeoffs, with reference to the specific embodiment of the invention, as will be understood by those skilled in the art.
Thus, although the present invention has been described in detail with regard to the exemplary embodiments thereof and accompanying drawings, it should be apparent to those skilled in the art that various adaptations and modifications of the present invention may be accomplished without departing from the spirit and the scope of the invention. Accordingly, the invention is not limited to the precise embodiments shown in the drawings and described above. Rather, it is intended that all such variations not departing from the spirit of the invention be considered as within the scope thereof as limited solely by the claims appended hereto.
Number | Name | Date | Kind |
---|---|---|---|
5218695 | Noveck et al. | Jun 1993 | A |
5259006 | Price et al. | Nov 1993 | A |
5673382 | Cannon et al. | Sep 1997 | A |
5742792 | Yanai et al. | Apr 1998 | A |
5832522 | Blickenstaff et al. | Nov 1998 | A |
5889935 | Ofek et al. | Mar 1999 | A |
5901327 | Ofek | May 1999 | A |
6044444 | Ofek | Mar 2000 | A |
6052797 | Ofek et al. | Apr 2000 | A |
6148383 | Micka et al. | Nov 2000 | A |
6148412 | Cannon et al. | Nov 2000 | A |
7013379 | Testardi | Mar 2006 | B1 |
7165187 | Ji et al. | Jan 2007 | B2 |
7181582 | Cochran | Feb 2007 | B2 |
20040049634 | Cochran | Mar 2004 | A1 |
20050066239 | Keeton et al. | Mar 2005 | A1 |
20050160315 | Chandrasekaran et al. | Jul 2005 | A1 |
20060112219 | Chawla et al. | May 2006 | A1 |
20060123212 | Yagawa | Jun 2006 | A1 |
20060136685 | Griv et al. | Jun 2006 | A1 |
20060179061 | D'Souza et al. | Aug 2006 | A1 |
20060184587 | Federwisch et al. | Aug 2006 | A1 |
20060193252 | Naseh et al. | Aug 2006 | A1 |
20060262759 | Bahl et al. | Nov 2006 | A1 |
Entry |
---|
(“Timeout”, Hyperdictionary.com, Copywright 2000-2009, Dec. 1, 2009). |
Minwen Ji, Alistair Veitch, John Wilkes, “Seneca: remote mirroring done write”, Proceedings of USENIX Technical Conference (San Antonio, TX), pp. 253-268, Jun. 2003. USENIX, Berkeley, CA. |
Dü{umlaut over (,)}llmann, D. and Segal, B. 2001. Models for Replica Synchronisation and Consistency in a Data Grid. In Proceedings of the 10th IEEE international Symposium on High Performance Distributed Computing (Aug. 7-9, 2001). High Performance Distributed Computing. IEEE Computer Society, Washington, DC, 67. |
“Network Appliance™ SnapMirror® Software”, 2006 Network Appliance, Inc. |
“Using Asynchronous Replication for Business Continuity between Two or More Sites—A technical white paper”, EMC Corporation, Dec. 2004. |
Norm MacNeil and Patti Gardner, “Hitachi Thunder 9500™ V Series Remote Replication Methods—An Application Brief”, Hitachi Data Systems Corporation, Aug. 2005. |
Christophe Bertrand, Bill Martin, Roselinda Schulman, and Claus Mikkelsen, “Hitachi Universal Replicator Software Architecture Overview—A White Paper”, Hitachi Data Systems Corporation, Mar. 2007. |
Christophe Bertrand, Tom Attanese, Roselinda Schulman, and Claus Mikkelsen, “Hitachi Universal Replicator Advanced Technology—A White Paper”, Hitachi Data Systems Corporation, Sep. 2004. |
www.powells.com—Powell's Books, Synopses & Reviews, Distributed Algorithms (96 Edition) by Nancy Lynch, dated Sep. 8, 2009 (4 pages). |
Randomized Protocols for Asynchronous Consensus, James Aspnes, Sep. 5, 2002 (29 pages). |