Abstract:
A data storage system with quorum-based commits sometimes experiences replica failure, due to unavailability of a replica-hosting node, for example. In embodiments described herein, such failed replicas can be quarantined rather than deleted, and subsequently such quarantines can be recovered. The teachings hereof provide data storage with improved fault-tolerance, resiliency, and data availability.

Description:
CROSS REFERENCE TO RELATED APPLICATIONS 
       [0001]    This application is based on and claims the benefit of priority of U.S. Application No. 61/972,955, filed Mar. 31, 2014, the teachings of which are hereby incorporated by reference in their entirety. 
     
    
     BACKGROUND 
       [0002]    1. Technical Field 
         [0003]    This application relates generally to data storage and more particularly to persistent, fault-tolerant data storage systems. 
         [0004]    2. Brief Description of the Related Art 
         [0005]    In a quorum-based data storage architecture, a data store is divided into multiple shards (also referred to as partitions) for parallel access. Replicas of each shard are stored in different nodes for improved persistency and fault tolerance, in the event of a node failure. The number of replicas per shard is typically configurable. 
         [0006]    For read and write operations to a shard, a quorum of replicas is required. The quorum is the minimum number of replicas to successfully read or write data in order for a read or write operation to the shard to be considered successful. For example, assume that number of replicas per shard has been configured to be 5, and a quorum of 3 replicas is required for a successful operation. When a write operation returns a successful response, at least 3 of 5 replicas have the updated data. The other 2 replicas may have the data, but also may still be holding stale data or not have the data at all. Similarly, when a read operation returns a successful response, it means that at least 3 of 5 replicas had the same data, but the other 2 may not. If the other 2 replicas are alive, then eventually the data from the 3 replicas in the quorum that have the current data can be propagated over to other 2, enabling the replica set to achieve coherence. 
         [0007]    When a shard is missing a quorum of replicas, for example due to a node failure or communication failure or other problem, then the entire shard is inaccessible because the quorum criteria cannot be met. Moreover, the most recently committed updates may be lost because those updates may be stored only in the write-successful replicas, which may be some or all of those that are missing. 
         [0008]    To address this issue, missing replicas must be repaired. However, repairing missing replicas is challenging. For a high-performance data store, it is preferable that a repair occurs quickly, while maintaining data availability and persistency. 
         [0009]    The teachings hereof address these technical challenges, among others, and provide a variety of benefits and improvements that will become apparent in view of this disclosure. The teachings hereof thus can provide improvements and benefits to the operation of distributed data storage technologies themselves, and in particular to replicated, quorum-based data storage, including distributed databases. The teachings hereof can be used to improve the operation of such systems, including in particular the data persistence and availability in such data storage systems. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0010]    The teachings hereof will be more fully understood from the following detailed description taken in conjunction with the accompanying drawings, in which: 
           [0011]      FIG. 1A  is a flow diagram illustrating an embodiment of a computer data storage technique providing repair task; 
           [0012]      FIG. 1B  is a flow diagram illustrating an embodiment of computer data storage technique a repair task; 
           [0013]      FIG. 2  is a flow diagram illustrating an embodiment of a computer data storage technique to resolve quarantine task; and, 
           [0014]      FIG. 3  is a block diagram illustrating hardware in a computer system that may be used to implement the teachings hereof. 
       
    
    
     DETAILED DESCRIPTION 
       [0015]    The following description sets forth embodiments of the invention to provide an overall understanding of the principles of the structure, function, manufacture, and use of the methods and apparatus disclosed herein. The systems, methods and apparatus described herein and illustrated in the accompanying drawings are non-limiting examples; the claims alone define the scope of protection that is sought. The features described or illustrated in connection with one exemplary embodiment may be combined with the features of other embodiments. Such modifications and variations are intended to be included within the scope of the present invention. All patents, publications and references cited herein are expressly incorporated herein by reference in their entirety. Throughout this document, the term “e.g.” is used as an abbreviation for the non-limiting phrase “for example.” 
         [0016]    Introduction 
         [0017]    By way of non-limiting example, consider a data storage system in the form of a distributed database that has multiple nodes and that provides sharding and replication, with quorum-based access. Assume the database is broken into shards, and each shard is replicated with a set of N replicas, where N&gt;1 and there is one replica in each of N nodes, as is typical. Note that the term ‘node’ is used to refer to a physical computer machine (implemented in hardware with or without software), or a virtual machine instance executing on such a physical computing machine, or equivalent. One or more nodes run management processes, including monitoring, task recognition/assignment and similar processes, to manage the operation of the system. 
         [0018]    Preferably, one or more processes run (e.g., in a management node) to monitor the health of the nodes in the database cluster, detecting when a node fails or is unreachable for some period of time. When a node is down or unreachable for some period of time ‘t’, the replicas in that node are considered to be missing. The unavailable replicas must be repaired so that a complete set of replicas is available for quorum-based operation. Repair typically involves replicating shard data from a surviving replica to nodes chosen to replace the unavailable replicas. 
         [0019]    A repair can be initiated by inserting a repair task into a task table maintained on one or more of the nodes. A worker on of the nodes can sign up for this task (or, alternatively, a leader process can assign the repair task to a worker). Any worker in the system may take responsibility to perform the task. Note that the term worker is used to include a process, thread, managed sequence of instructions, or equivalent, that executes on a node. Depending on machine, processor and operating system configuration, a node may host one worker or multiple workers. 
         [0020]    Repair Task and Quarantining 
         [0021]    In general, a repair task can proceed as follows. The responsible worker chooses available node(s) that will replace the failed node(s) and will store new replicas. The worker removes the unavailable replicas from the shard map and disconnects the unavailable node/replica(s) to prevent them from coming back and disrupting the database service. These outgoing replicas are marked “in trash-bin.” The worker replicates shard data from a surviving replica in the shard to the chosen new node(s) so as to create the new replicas. When replications are completed, the new replica(s) are added to the shard map to enable synchronization among shard replicas and proper database operations for the shard. If and when the down nodes/replicas eventually become available (“alive”), the replicas contained in them are marked “in trash-bin”, so that data can be erased and storage space reclaimed on those formerly down nodes, which are no longer being used for the shard. This “trash-bin” operation is designed to prevent the outdated data from interfering with proper database operation. 
         [0022]    If a repair task is performed when a quorum of replicas are still available, data availability is continuous and committed updates to the data (e.g., from before or during the repair task) are not lost. 
         [0023]    However, if a quorum of replicas is not available at the time of the repair task—that is, more than the quorum of replicas is unavailable—then the shard cannot be accessed until a successful repair is made. Moreover, committed updates may be lost, if unavailable replicas are marked as “in trash-bin” in a repair task, e.g., because those replicas may hold updates that are not in the surviving replicas. 
         [0024]    To address this issue, the unavailable replicas of a shard that is missing a quorum of replicas are preferably marked “quarantined”—rather than “in trash-bin” as explained previously. The quarantined replicas may contain potentially unique data not present in the surviving replicas, and so the unavailable replicas should not be erased or trashed until this data is retrieved. 
         [0025]    Thus, in an embodiment, a worker performing a repair task determines whether a shard is missing a quorum of replicas or more. If not, then the repair can proceed as explained previously. But if so, then the worker marks the unavailable replicas as “quarantined” in the shard map. For availability, the worker can then continue with the repair operation as explained previously, except of course that “quarantined” replicas are not marked “in trash-bin”.  FIG. 1A  illustrates an embodiment of the logic. 
         [0026]    With reference to  FIG. 1A , at step  100 , the system detects that one or more replicas are unavailable, e.g., as a result of a communication failure, error, or health monitoring. A repair task is started ( 102 ), and the missing replicas are removed from the shard map ( 104 ). At  106 , if a quorum of replicas are available, then the missing replicas can be marked as “trash-bin” ( 116 ), new nodes are chosen to host new replicas ( 118 ), the new replicas can be synced with the surviving quorum of replicas ( 120 ), and the repair task ends ( 122 ). At  106 , if less than a quorum of replicas are available, then the procedure differs in that the missing replicas are marked “quarantined” rather than “trash-bin” ( 108 ). 
         [0027]    In an alternate embodiment, shown in  FIG. 1B , the determination of whether to mark missing replica(s) as “quarantined” or “trash-bin” is deferred until the step of copying data from surviving replica(s) to replacement replica(s) is successfully completed. Thus, similar to  FIG. 1A , a repair task is started ( 130 ), missing replicas are removed from the shard map ( 134 ), new nodes are chosen to host new replicas ( 136 ), and the new replicas are synced with the surviving replicas ( 138 ). At  140 , the system determines whether a quorum of replicas were available at the time of step  138 . If so, then the missing replicas can be marked as “trash-bin” ( 146 ); if not, they are marked as “quarantined” ( 142 ). The repair task ends at  144  or  148 , as applicable. 
         [0028]    Waiting to make the determination of whether a quorum is available ( 140 ) ensures that the correct determination is made—e.g., in the event that a replica becomes unavailable between the time the repair task is started and the time that the data is copied over—because if an additional replica(s) does down during this interim time, it may change the answer to be that a quorum of replicas actually was not available, so that the missing replicas should be marked “quarantined”. 
         [0029]    As a concrete teaching example, which will continue to be used below for illustration, consider a shard 1 that has five replicas {A, B, C, D, E} and three replicas required for a quorum. Assume that it is missing four replicas, B, C, D, E with one surviving replica A. At the end of a repair operation, shard 1 will have new replicas F, G, H, and I, whose contents are replicated from A. Replicas B, C, D and E are marked quarantined. 
         [0030]    Resolving Quarantines 
         [0031]    The presence of quarantined replicas means some data in the shard may not be available. Thus, quarantines should be resolved quickly. In one embodiment, whenever a node containing one or more quarantined replicas becomes alive again (e.g., as indicated by a heartbeat message, communication success, system monitoring, or the like), a “resolve quarantine” task is started. In this task, the worker will replicate data from a quarantined (but now alive) replica to a current replica. Continuing the previous example, assume quarantined replica B is resurrected. Its contents are replicated to one of {A, F, G, H, I}. Once its contents are in one of those replicas, the database&#39;s synchronization mechanism will replicate to the other replicas. For example, the contents of B might be replicated to A, and then A is synchronized with F, G, H, and I. 
         [0032]    Typically the shard (and each replica) is versioned, and has a version history as changes are made. If some content in B is outdated, the replication to A will be superseded by the newer contents in A due to the newer revision numbers in A. However, a problem can arise if content has been purged from A (e.g., purging to removing deleted files and associated revision history in A) and this content is in B. In this case, the replication from B to A will bring back obsolete data (that is, the versions in B that were purged from A). This problem can be prevented by not purging a shard that has quarantined replicas, and instead queuing such purge requests. Once the quarantine is resolved, the purge can be performed. 
         [0033]    Continuing the teaching example, after B&#39;s contents are replicated to A, the worker marks B as “in trash-bin” instead of “quarantined”. This allows B&#39;s storage space to be reclaimed. Note that we still have a quorum of replicas in shard 1 that are quarantined (A and B are alive; C, D, E are still quarantined). That means there may still be some unique updates that reside only in one (or all) of C, D and E. Thus they remain under quarantine. 
         [0034]    Now if another node that contains one of C, D, or E becomes alive and that quarantined replica is also resolved, e.g., in the same manner that replica B was resolved, then there will be less than a quorum of replicas left in quarantine, as only two replicas will remain in quarantine. These remaining quarantined replicas do not contain any unique data anymore. Therefore, these less-than-quorum quarantined replicas can be automatically marked “in trash-bin” and the quarantines in this shard is now totally resolved. 
         [0035]      FIG. 2  illustrates an embodiment of the above-described “resolve quarantine” task. At  200 , the system detects that a particular quarantined replica “Q” is now available. The resolve quarantine task is started at  202 , in which data in Q is replicated to at least one of the current replicas in the shard ( 204 ); ultimately that data is copied across to the other replicas in the shard ( 206 ). Replica Q is marked as “trash-bin” ( 208 ). At  210 , a test is performed to determine whether less than a quorum of replicas remain quarantined; if less than quorum remains, the remaining quarantined replicas can be marked “trash-bin” ( 212 ), and the shard is resolved. If a quorum or more of replicas remain quarantined, the system must wait for more replicas to become alive ( 214 ). 
         [0036]    Identifying the Quarantine Generation 
         [0037]    It is possible that before an existing set of quarantined replicas are totally resolved, one of the current replicas in the shard may become missing. Assume, for example, that after B&#39;s quarantine status is removed, replicas F, G, H become unavailable, so that the shard has: A and B alive, F, G, H, unavailable, and C, D, E still quarantined. A second repair task will be started. The worker for the second repair task will mark replicas F, G, and H quarantined. However, we need to distinguish the quarantine set of {C, D, E} from the quarantine set of {F, G, H} because, they contain a different set of unique updates. If and when quarantined replica C is resolved, then D and E can be automatically taken out of quarantine and deleted—because D and E are less than the quorum for the replica set of {A, B, C, D, E} from which they came—but the same is not true for any of F, G and H. The reverse situation is treated likewise: if quarantined replica F is resolved, then G and H can be automatically taken out of quarantine and deleted—because G and H are less than the quorum for replica set {A, B, F, G, H} from which they came—but the same is not true for any of C, D, E, which must remain in quarantine. 
         [0038]    Quarantine sets can be distinguished from another by a generation number or other identifier. In one embodiment, the timestamp of the repair task that put replicas in the quarantined state is used as the quarantine generation number. When marking a replica quarantined, it can be marked “quarantined @ts” where ‘ts’ is the aforementioned timestamp. (Notwithstanding the foregoing example, those skilled in the art will recognize that any unique numbering system can be used as the quarantine generation number.) When the number of members of a given quarantine set is less than a quorum, the remaining members can be automatically taken out of quarantine. 
       ALTERNATIVE EMBODIMENT 
       [0039]    During a repair task, it is possible to mark only a (m−(quorum−1)) number of unavailable replicas as quarantined, where m is the number of unavailable replicas and ‘quorum’ is the number required for a quorum. This is an alternative to marking all unavailable replicas as quarantined. This approach works because unique updates will reside in (m—(quorum−1)) of the ‘m’ unavailable replicas. 
         [0040]    Reconsidering the teaching example given above in which replica set {A, B, C, D, E} has replica A surviving and B, C, D, E become unavailable, we only need to mark (4−(3−1))=2 of the 4 unavailable replicas quarantined. For example, we only need to mark B and C (or any other pair) quarantined because B, C (or any other pair) and the surviving replica A will form a quorum and so one of them must have every unique update. 
         [0041]    In contrast to the prior embodiment, with the alternative embodiment a replica is taken out of quarantine only after its data are replicated to a current shard replica and it is resolved. Quarantined replicas are not automatically taken out of quarantine because there is less than a quorum of quarantined replicas remaining, as in the prior embodiment. By way of illustration with respect to  FIG. 2 , in the alternative embodiment, the evaluation at step  210  would be eliminated (and  212  too); instead, step  208  would proceed to  214 . 
         [0042]    The prior embodiment is preferred over the alternative embodiment (though either can be used). The preference comes because in the preferred embodiment, when any (m−(quorum−1)) quarantined replicas comes back alive, the whole set is totally resolved. In the alternative embodiment, the specific, pre-selected (m−(quorum−1)) replicas must all come back alive before the quarantine set is totally resolved. The preferred embodiment therefore has a higher probability of resolving earlier than the alternative, which improves data availability. The alternative may nevertheless offer some simplification in that it reduces the number of quarantined replicas that must be monitored and/or managed. 
         [0043]    Use in Distributed Data for Cloud Storage 
         [0044]    The teachings hereof can be applied in, among other things, distributed storage systems and services to provide a cloud storage solution. For example a content delivery network (CDN) may utilize distributed storage to provide a network storage subsystem, which may be located in a network datacenter accessible to CDN proxy cache servers and which may act as a source/origin of content for content to be delivered through such CDN servers to requesting end user client devices, such as is described in U.S. Pat. No. 7,472,178, the disclosure of which is incorporated herein by reference. In this regard, a network storage system may be indexed by distributed databases that map input keys to data that points to storage locations in the manner of a file lookup service; the distributed database can leverage the teachings hereof. In this way, the teachings hereof can be applied to provide replicated, quorum-based storage of Internet content, such as images, HTML, streaming media files, software, and other digital objects, and to provide a managed network storage service with replicated storage sites as part of a CDN infrastructure. 
         [0045]    Computer Based Implementation 
         [0046]    The subject matter described herein is generally implemented with computer systems, as modified by the teachings hereof, with the processes and functional characteristics described herein realized in special-purpose hardware, general-purpose hardware configured by software stored therein for special purposes, or a combination thereof. 
         [0047]    Software may include one or several discrete programs. A given function may comprise part of any given module, process, execution thread, or other such programming construct. Generalizing, each function described above may be implemented as computer code, namely, as a set of computer instructions, executable in one or more microprocessors to provide a special purpose machine. The code may be executed using conventional apparatus—such as a microprocessor in a computer, digital data processing device, or other computing apparatus—as modified by the teachings hereof. In one embodiment, such software may be implemented in a programming language that runs in conjunction with a proxy on a standard Intel hardware platform running an operating system such as Linux. The functionality may be built into the proxy code, or it may be executed as an adjunct to that code. 
         [0048]    While in some cases above a particular order of operations performed by certain embodiments is set forth, it should be understood that such order is exemplary and that they may be performed in a different order, combined, or the like. Moreover, some of the functions may be combined or shared in given instructions, program sequences, code portions, and the like. References in the specification to a given embodiment indicate that the embodiment described may include a particular feature, structure, or characteristic, but every embodiment may not necessarily include the particular feature, structure, or characteristic. 
         [0049]      FIG. 3  is a block diagram that illustrates hardware in a computer system  300  on which embodiments of the invention may be implemented. The computer system  300  may be embodied in a client device, server, personal computer, workstation, tablet computer, wireless device, mobile device, network device, router, hub, gateway, or other device. 
         [0050]    Computer system  300  includes a microprocessor  304  coupled to bus  301 . In some systems, multiple microprocessor and/or microprocessor cores may be employed. Computer system  300  further includes a main memory  310 , such as a random access memory (RAM) or other storage device, coupled to the bus  301  for storing information and instructions to be executed by microprocessor  304 . A read only memory (ROM)  308  is coupled to the bus  301  for storing information and instructions for microprocessor  304 . As another form of memory, a non-volatile storage device  306 , such as a magnetic disk, solid state memory (e.g., flash memory), or optical disk, is provided and coupled to bus  301  for storing information and instructions. Other application-specific integrated circuits (ASICs), field programmable gate arrays (FPGAs) or circuitry may be included in the computer system  300  to perform functions described herein. 
         [0051]    Although the computer system  300  is often managed remotely via a communication interface  316 , for local administration purposes the system  300  may have a peripheral interface  312  communicatively couples computer system  300  to a user display  314  that displays the output of software executing on the computer system, and an input device  315  (e.g., a keyboard, mouse, trackpad, touchscreen) that communicates user input and instructions to the computer system  300 . The peripheral interface  312  may include interface circuitry and logic for local buses such as Universal Serial Bus (USB) or other communication links. 
         [0052]    Computer system  300  is coupled to a communication interface  316  that provides a link between the system bus  301  and an external communication link. The communication interface  316  provides a network link  318 . The communication interface  316  may represent an Ethernet or other network interface card (NIC), a wireless interface, modem, an optical interface, or other kind of input/output interface. 
         [0053]    Network link  318  provides data communication through one or more networks to other devices. Such devices include other computer systems that are part of a local area network (LAN)  326 . Furthermore, the network link  318  provides a link, via an internet service provider (ISP)  320 , to the Internet  322 . In turn, the Internet  322  may provide a link to other computing systems such as a remote server  330  and/or a remote client  331 . Network link  318  and such networks may transmit data using packet-switched, circuit-switched, or other data-transmission approaches. 
         [0054]    In operation, the computer system  300  may implement the functionality described herein as a result of the microprocessor executing program code. Such code may be read from or stored on a non-transitory computer-readable medium, such as memory  310 , ROM  308 , or storage device  306 . Other forms of non-transitory computer-readable media include disks, risk arrays, RAID arrays, solid-state memory and arrays thereof, tapes, magnetic media, CD-ROMs, optical media, RAM, PROM, EPROM, and EEPROM. Any other non-transitory computer-readable medium may be employed. Executing code may also be read from network link  318  (e.g., following storage in an interface buffer, local memory, or other circuitry). 
         [0055]    A client device may be a conventional desktop, laptop or other Internet-accessible machine running a web browser or other rendering engine, but as mentioned above a client may also be a mobile device. Any wireless client device may be utilized, e.g., a cellphone, pager, a personal digital assistant (PDA, e.g., with GPRS NIC), a mobile computer with a smartphone client, tablet or the like. Other mobile devices in which the technique may be practiced include any access protocol-enabled device (e.g., iOS™-based device, an Android™-based device, other mobile-OS based device, or the like) that is capable of sending and receiving data in a wireless manner using a wireless protocol. 
         [0056]    It should be understood that the foregoing has presented certain embodiments of the invention that should not be construed as limiting. For example, certain language, syntax, and instructions have been presented above for illustrative purposes, and they should not be construed as limiting. It is contemplated that those skilled in the art will recognize other possible implementations in view of this disclosure and in accordance with its scope and spirit. The appended claims define the subject matter for which protection is sought. 
         [0057]    It is noted that trademarks appearing herein are the property of their respective owners and used for identification and descriptive purposes only, given the nature of the subject matter at issue, and not to imply endorsement or affiliation in any way. 
         [0058]    Those skilled in the art will understand that the teachings above provide improvements to the functioning of computer systems themselves and in particular to the data persistence, reliability, and performance of a distributed data storage system.