BlobSeer Scalability: A Multi-version Managers Approach
Baya Chalabi
National Scholl of Computer Science, Oued-Smar -ESI- (Alger's)
Algeria
[email protected]
Yahya Slimani
ISAMM, Manouba University
Tunisia
[email protected]
ABSTRACT: With the emergence of Cloud Computing, the amount of data generated in different fields such as physics,
medical, social networks, etc. is growing exponentially. This increase in the volume of data and their large scale make the
problem of their processing more complex. Actually, the current datasets are very different in nature, ranging from small to
very large, from structured to unstructured, and from largely complete to noisy and incomplete. In addition, these datasets
evolve over time, often at very rapid rates. If we consider the characteristics of these datasets, traditional data management
systems are not adapted to support them. For example, Relational Database Management Systems (RDMS) manage only
databases where data conforms to a schema. However, current databases contain a mix of structured and less or no structured
data. Furthermore, relational systems lack support for version management that is very important in a data management
system. As data management system dedicated to large-scale datasets, we consider the BlobSeer system. It is a concurrencyoptimized data management system for data-intensive distributed applications. BlobSeer is adapted for target applications
that handle massive unstructured data in the context of large-scale distributed environments. It uses the concept of versioning
for concurrent manipulation of large binary objects in order to exploit efficiently access to data. To reach this objective,
BlobSeer uses a versioning manager to generate a new snapshot version of a BLOB every time it is written or appended by a
client. But if the number of BLOBs created or the primitives (writing, appending or reading) increase and are managed by a
single version manager, then we have a performance bottleneck and a version manager overload. To avoid the bottleneck of
the version manager, we propose a multi-version managers, such that each version manager maintains a subset of BLOBS.
Keywords: Cloud Computing, Data Management System, BlobSeer, BLOBs, Scalability, Multi-version Managers
Received: 28 November 2018, Revised 31 January 2019, Accepted 9 February 2019
DOI: 10.6025/jnt/2019/10/2/40-53
© 2019 DLINE. All Rights Reserved
40
Journal of Networking Technology Volume 10 Number 2 June 2019
1. Introduction
Cloud computing offers real potentialities for organizations to change their Information Technology Infrastructures (ITI). The
use of cloud computing has potential benefits to organizations, including increased flexibility and efficiency. Cloud computing
describes a computing concept where software services, and the resources they use, operate as a virtualized platform across
many different host machines, connected to the Internet or to a local network. However, the use of cloud computing presents
significant challenges to the users of clouds (both individuals and organizations). Traditional data management systems have
some limitations for data-intensive applications. Among distributed data management systems, BlobSeer targets applications
that handle massive unstructured data in the context of large-scale distributed environments. BlobSeer system was proposed to
comply with the following properties: massive unstructured data, data striping, distributed metadata management, high throughput
under high level of concurrency. An important feature of BlobSeer is versioning that allows to roll back data changes, but also
to execute the same request independently on different versions of a Binary Large OBject (BLOB). In traditional data management
systems (such as DBMS), the write operations on a given object are done on a single copy of this object. This approach
preserves the coherence property. In BlobSeer, the update operation on an object is very different. It is done by generating a new
object at each update. Thus, we have several successive versions of the same object that give the content evolution of this
object during a given period. To follow this evolution, BlobSeer uses Metadata (changes, location of different versions of the
same object, etc.) and thus old and new versions of an object are saved and can be both accessible. All these operations are
made by a single version manager. The use of a single version manager has some limitations and drawbacks: (i) overloading the
version manager, which can lead to failure or degradation of the manager performance; (ii) if the number of objects and update
primitives increase, this leads to a problem of data storage (physical locations and geographic distribution); (iii) preserving data
coherence of replicated objects. To avoid synchronism between update operations, the version manager must provide a
consistency protocol to ensure that different versions of the same object do not diverge (versions with contradictory values).
The version manager ensures the serialization of the concurrent update primitives and the assignment of version numbers for
each new update operation; so, this serialization step does not become a bottleneck when a large number of clients concurrently
update a specific BLOB. To avoid the limitations caused by a single version manager, we propose in this paper a new approach
based on multiple version managers. The rest of this paper is organized as follows: Section 2 reviews some related works on
distributed data management systems. In Section 3, we review the BlobSeer system and list some of its limitations. Section 4
describes our proposal model. Section 5 explains, in details, the different functionalities of our proposal. In Section 6, we
compare the traditional BlobSeer (with a single version manager) with our proposal (with multiple version managers). Finally,
Section 7 concludes and suggests some directions for further research.
2. Overview on Distributed File Systems
In the last years, increasing number of organizations are facing the problem of explosion of data and the size of has been growing
at exponential manner. Data is generated through many sources like transactional systems, web servers, social networks, mobile
devices, etc. From the structure view point, these data range from structured to unstructured form. New infrastructures have
also emerged to support the execution of large-scale applications, such as grid and cloud computing. As the amount of data
increases, the need to provide efficient and reliable storage solutions has become a challenge for researchers. Nowadays, the
principle storage solution used by cluster infrastructures is a Distributed File System (DFS). A DFS has three main properties:
transparency, fault-tolerance and scalability. In the following, we analyze and compare some DFS’s. PVFS [11] is an open source
parallel file system for clusters. A file is partitioning into stripe units and they are distributed to disks in a round-robin method.
PVFS is composed of one metadata server and several data servers. File System (GFS) [8] is a scalable distributed file system that
supports the heavy workload at the Google Website and runs on a cluster with inexpensive commodity hardware. A GFS cluster
consists of a single master and multiple chunkservers and is accessed by multiple clients; the master maintains all file system
metadata and data are splitted into chunks of 64MB and stored in chunkservers. It uses standard copy-on-write technique to
implement snapshots. The Hadoop Distributed File System HDFS [2, 4, 12] is a file system designed for large clusters and many
clients. Furthermore, it is file system component of Hadoop framework [1]. HDFS splits a file into one or more blocks and set of
blocks are stored in DataNodes. HDFS is a highly fault-tolerant system and it is designed to be deployed on low-cost hardware.
In HDFS, each block is replicated three times. HDFS kept the hole metadata in the memory of a single NameNode. So, by the
increasing number of metadata, the NameNode may become performance bottleneck. Bigtable [3] is a distributed storage system
for managing structured data that is designed to scale to a very large size. Bigtable is built on several other pieces of Google
infrastructure. It uses the distributed Google File System (GFS) [8] and Bigtable maintains data in lexicographic order by row key.
The row range for a table is dynamically partitioned. Each row range is called a tablet, which is the unit of distribution and load
balancing. Each cell in Bigtable can contain multiple versions of the same data, and these versions are indexed by timestamp.
Journal of Networking Technology Volume 10 Number 2 June 2019
41
Dynamo [17] is a highly available and scalable key-value store used for storing state of many core services of Amazon.com’s ecommerce platform. It cannot be publicly accessed, and it is used for storing only internal state information for Amazon’s
services. Dynamo partitions the keys with consistent hashing [7] to distribute the load across multiple storage hosts. Dynamo
implements eventual consistency, supporting low-latency concurrent data reads and updates through replication and versioning.
In [6] Varade et al. said that the architecture of HDFS which used a single NameNode where the metadata are stored and data
blocks are stored in DataNodes, can’t meet the exponentially increased storage demand in cloud computing, as the single master
server may become a performance bottleneck.
Most of existing Distributed File Systems verify the main properties of a DFS, namely transparency, fault-tolerance and scalability.
On the other hand, they share a same characteristic: they use one master server and multiple clients. This model with a single
master is simple and enables the master to make sophisticated chunk placement and replication decisions using global knowledge.
However, the master server can lead to a failure of the whole system.
3. BlobSeer
BlobSeer [9] is a data-sharing system that addresses the problem of efficiently storing massive data in large-scale distributed
environments. It deals with large, unstructured data blocks called BLOBs. In BlobSeer, a BLOB is splitted into equally-sized
chunks. The architecture of BlobSeer is based on five actors. Figure 1 illustrates it’s architecture which is a set of distributed
processes that communicate through Remote Procedure Call protocol (RPCs) [13, 15].
Figure 1. Architecture [9]
• Clients: Create, read, write and append data from/to BLOBs. A large number of concurrent clients can simultaneously access
the same BLOB.
• Data Providers: These actors provide scalable and efficient storage service. Multiple data providers are used to physically
store the chunks. Each data provider is simply a local key-value store, and the chunks are accessed from a chunk ID. Data
providers can be configured to use different persistent layers such as BerkeleyDB [18], an efficient embedded database, or just
keep chunks in main memory. New data providers may dynamically join and leave the system.
42
Journal of Networking Technology Volume 10 Number 2 June 2019
• Provider Manager: This actor keeps information about the available storage space on data providers. Periodically the data
providers send information about their states to the provider manager. To scheduling the placement of newly generated chunks,
it employs a configurable chunk distribution strategy to maximize the data distribution benefits with respect to the needs of the
application. The default strategy implemented assigns new chunks to available data providers in a round-robin method.
• Metadata Providers: The metadata providers physically store the metadata that allow identifying the chunks that make up a
snapshot version of a particular BLOB. BlobSeer uses a distributed metadata management organized as a Distributed Hash
Table (DHT) to enhance concurrent access to metadata.
• Version Manager: This actor is the responsible to assigning new snapshot version numbers to writers and appenders and to
reveal these new snapshots to readers. It is done so as to offer the illusion of instant snapshot generation, while guaranteeing
total ordering and atomicity. The version manager is the only serialization point in the system. BlobSeer exposes a client
interface to make available its data-management service to high-level applications. When linked to BlobSeer’s client library,
application can perform the following operations: CREATE a BLOB, READ, WRITE and APPEND contiguous ranges of bytes
on a specific BLOB.
To understand more precisely the role of each component and specifically the role of the version manager, we explain the
functionality of CREATE, WRITE/APPEND and READ primitives. The CREATE primitive exposed by the BlobSeer client library
only involves a request for the version manager. This primitive creates a new BLOB. This last will be identified by its ID, and the
version manager ensured to be globally unique. When a client wants to update the BLOB, he invokes the corresponding WRITE
or APPEND primitives implemented by the BlobSeer client. The WRITE is composed of two main steps [9]:
• Data-writing Step: This is the first operation executed when a user calls the WRITE primitive for a specific BLOB and a
contiguous range of chunks delimited by the offset (in case of write) of the first chunk to be written, or at the end of the BLOB
(in case of append), and the size of the entire sequence. To write such chunk ranges on data providers, the client library performs
the following operations:
1. Contact the provider manager and ask him for a number of data providers.
2. Upload the data chunks to the received data providers. In parallel, data-publication operation is executed to make the
uploaded data chunks available to the users as a new BLOB version.
3. The client contacts the version manager to notify it about its WRITE primitive. The version manager assigns a version number
to the client and adds the WRITE into a queue containing WRITE’s in progress.
• The client constructs a metadata tree associated with the new version. Only the leaves for the new chunks are built. After
creating the metadata nodes, the client sends them in parallel to the metadata providers. Finally, the version manager notified
about the readiness of the metadata associated with the new version.
When the client invokes READ primitive, it contacts the version manager, which stores the root information about all the BLOBS
in the system to retrieve the root of the metadata tree corresponding to the specific BLOB identifier and BLOB version requested
in the READ primitive. Next, the client scans the metadata tree by issuing metadata read primitives on the metadata providers.
It stopped when it find a portion of the tree that covers the needed chunk range. By reaching the leaves, the client can retrieve
the location of the data providers that physically store the data chunks. Finally, the client downloads the data chunks in parallel
from the data providers.
4. Proposed Model
In the previous section we have explained the BlobSeer architecture and the functionality of the CREATE, WRITE/APPEND and
READ primitives. In this architecture, a single version manager is used. As the version manager deals with the serialization of
concurrent WRITE primitives and with the assignment of version numbers for each new WRITE/APPEND primitive and to
reveal these new versions to readers. The version manager has to generate new snapshots in the case of concurrent WRITE
primitives to guarantee the following properties: (i) liveness; (ii) total ordering; and, (iii) atomicity [9]. When the READ and
WRITE/APPEND primitives increase, the version manager can become a bottleneck in the BlobSeer standard architecture. To
overcome this bad situation, we proposed a new architecture of BlobSeer. Our contribution lies in the use of several version
Journal of Networking Technology Volume 10 Number 2 June 2019
43
managers since the BLOBs are independent from one another. Each version manager will manage a number of BLOBs and each
version manager has a logical number that identifies him in the system. If a client wants to create a new BLOB, it chooses one of
the version managers randomly and contacts him. If memory space and CPU usage ratio of the chosen version manager does not
exceed a predefined threshold, then it creates the BLOB, otherwise it retransmits the request of creating new BLOB to the
underloaded version manager in the system. The version manager will create the BLOB assign him the following identifier (see
Figure 2): the first item (Field1) represents the logical number of the version manager, while the second one (Field2) is a number
that is incremented locally after each creating of a new BLOB.
Figure 2. Identifier structure of a new BLOB
Version managers communicate between them by exchanging their memory and CPU workload for load balancing purpose. For
example, if a version manager’s workload exceeds its predefined threshold, it retransmits the CREATE primitive to the less
(memory space and CPU usage ratio) version manager.
4.1 Election of Controller Version Manager
To allow our architecture to be scalable and respond to growing client requests CREATE, READ and WRITE primitives, we
Figure 3. Version managers communication
44
Journal of Networking Technology Volume 10 Number 2 June 2019
propose to elect a Controller Version Manager (CVM) using a ring election algorithm [5, 14]. The election starts when one of the
version managers wants to contact the current CVM, but the connection fails after two tries. Initially, the CVM is defined in the
configuration file of the system. The controller node allows to increase the scalability of our model by adding new version
manager, if it is necessary. To ensure this property, all version managers send information about their memory and CPU
workloads to the controller version manager. When more than half of the existing version managers exceeds their workload, the
controller version manager decides to add new version manager. Figure 3 illustrates this functionality of our model.
5. Illustrative Examples
To explain the behavior of our proposed model, we consider three examples related to three primitives: CREATE, READ and
WRITE.
5.1 CREATE Primitive
We suppose that we want to create 20 BLOBs and the system is composed of 4 version managers.
Figure 4. Example of CREATE primitive in modified BlobSeer
As mentioned in Figure 4, to create 20 BLOBs, clients contact the Version manager 1 (VM1) to create 4 BLOBs, the Version
Manager 2 (VM2) to create 3 BLOBs, the Version Manager 3 (VM3) to create 3 BLOBs, the Version Manager 4 (VM4) to create
5 BLOBs and Version manager 5 (VM5) to create 5 BLOBs. After each BLOB creation, the corresponding version manager
VMi (i = 1..5), sends the ID-BLOBs of created BLOBs to the client.
Firstly, the READ primitive is a function with 5 parameters: READ (ID, v, buffer, offset, size). A READ primitive accesses a
contiguous segment (specified by an offset and a size) from a BLOB (specified by its ID) and copies it into a given buffer. The
desired version of the BLOB from which the segment must be taken can be provided in v. In case when parameter v is missing,
BlobSeer assumes by default that the latest version of the BLOB is accessed [10, 16].
Journal of Networking Technology Volume 10 Number 2 June 2019
45
Following the identifier structure of a BLOB (see Figure 2), it extract the ID of the version manager where the BLOB is created
(first field). In the subsequent example, we consider the following assumptions for the first field of version manager ID: (i)
number of version manager 1 (blue number); (ii) number of version manager 2 (pink number); (iii) number of version manager 5
(RedViolet number). For the second field, we use a black number.
To read data from BLOB 1.2, we execute the following steps:
1. The client contacts the version manager 1 after extracting the version manager number from the ID (1.2) of the BLOB (the first
field). The Version manager 1 sends the latest version of the BLOB 1.2 to the client. The client compares the version requested
with the latest version; if it is higher than the current version, the READ primitive fails.
2. The client queries metadata providers for metadata indicating which providers store chunks corresponding to the requested
subsequence in the BLOB delimited by offset and size.
3. The client fetches the chunks in parallel from the data providers.
To read data from BLOB 2.40 and from BLOB 5.200 BLOB, steps 2 and 3 are the same as in reading the BLOB 1.2. The only
difference is in step 1 which version manager have to be contacted for reading the BLOB 2.40:
1. The client contacts the Version manager 2 after extraction version manager’s number from the ID (2.40) of the BLOB (the first
field), that is equals to 2. To see if the version of the BLOB are asked to read or not, the Version manager 2 will send the latest
version of the BLOB 2.40 to the client. This later compares the version requested with the latest version; if it is higher than the
current version, the READ primitive fails.
Figure 5. Example of READ primitive in modified BlobSeer
46
Journal of Networking Technology Volume 10 Number 2 June 2019
When we want to read data from BLOB 5.200, we execute the following steps :
1. The client contacts the Version manager 5 after extraction of the version manager number from the ID (5.200) of the BLOB (the
first field); in this case, the version manager number is equals to 5. To see if the versions of the BLOB are asked to read or not,
the version manager 5 will send the latest version of the BLOB 5.200 to the client. This latter compares the requested version with
the latest version; if it is higher than the current version, the READ primitive fails.
5.2 WRITE primitive
WRITE (ID, buffer, offset, size) and APPEND (ID, buffer, size) are two primitives that modify a BLOB identified by the parameter
ID, by writing content of a buffer of length size at a specified offset or at the end of the specified BLOB. These primitives
generate a new version of the BLOB with a new version number generated by the version manager. Remember that WRITE and
APPEND primitives only allow updating a contiguous range within a BLOB.
1. To write data in BLOB 1.2, the client first splits the data to be written in chunks.
2. Then, it contacts the provider manager and informs it about the chunks to be written. Using this information, the provider
manager selects a data provider for each chunk then builds a list that is returned to the client. Having received this list, the client
contacts all providers in parallel and sends the corresponding chunk to each of them.
3. As soon as a data provider receives a chunk, it reports success to the client and caches the chunk which is then asynchronously
written to the disk in the background.
Figure 6. Example of Write in modified BlobSeer
Journal of Networking Technology Volume 10 Number 2 June 2019
47
4. The client contacts the version manager 1 (the ID of the version manager is extracted from the ID of the BLOB) and registers
its update. The version manager 1 assigns to this update a new snapshot version v and communicates it to the client.
5. Then, new metadata is generated for the BLOB that is weaved together with the old metadata such that the new snapshot v
appears as a standalone entity.
6. Then, it informs the manager version 1 of success, and returns successfully to the users. At this point, the version manager
takes responsibility for finally reveal version v of the BLOB to readers.
To write data to BLOB 2.40, the same steps are done with only one difference in steps 4 and 6 instead of contacting the version
manager 1, it will contact the version manager 2. Similarly to write data in BLOB 5.200 it will contact the version manager 5.
5.3 Creating BLOBs in standard BlobSeer
In the standard BlobSeer architecture, all CREATE commands are sent to a single version manager. After the creation of a BLOB,
the version manager will send the ID of the created BLOB to the client. If we consider the same example presented in the previous
section, i.e. the demand for creating 20 BLOBs (see the following figure), 20 BLOBs creation requests are sent to a single Version
manager. This latter will send the ID’s of the created BLOBs to the client.
Figure 7. Example of Create BLOBs in standard BlobSeer
5.4 READ Primitive
The following steps are executed to read data from BLOB2, BLOB40, BLOB200 or any BLOB
1. The client sends a message to the single and the only version manager in the architecture, to know if the version of the
required BLOBs are asked to read or not. If it is, the version manager will send the latest version of the required BLOBs to the
client. At this stage, the client compares the requested version with the latest version. If this latter is higher than the current
version, the READ primitive fails. If not, we execute the subsequent steps:
48
Journal of Networking Technology Volume 10 Number 2 June 2019
2. The client queries metadata providers for metadata indicating which providers store chunks corresponding to the requested
sequence of BLOBs delimited by offset and size parameters.
3. Once the connection to these data providers has been established, the client gets the chunks in parallel from data providers.
Figure 8. Example of Read primitive in BlobSeer standard
5.5 WRITE primitive
The behavior of Write primitive is defined as follows:
1. To write data to BLOB2, BLOB40, BLOB200 or any BLOB, creation’s steps are the same than read primitive. Firstly, the client
splits the data to be written in chunks.
2. Then, it contacts the provider managers and informs it about the chunks to be written. Using these information, the provider
manager selects a data provider for each chunk and it builds a list of providers that is returned to the client. Upon receiving this
list, the client contacts all providers in the list in parallel and sends the corresponding chunk to each of them.
3. As soon as a data provider receives a chunk, it reports success to the client and caches the chunk which is then asynchronously
written to the disk in the background.
4. The client contacts the main Version manager, records and registers its update. Then, it assigns to this update a new snapshot
version v and communicates it to the client.
5. The client generates new metadata for BLOBs (2, 40 or 200) that is weaved together with the old metadata such that the new
snapshot v appears as a standalone entity.
6. Finally, it informs the main version manager of success, and returns successfully to the users. At this point, the version
Journal of Networking Technology Volume 10 Number 2 June 2019
49
manager takes responsibility for finally reveal version V of the BLOB to readers.
Figure 9. Example of Write in standard BlobSeer
5.6 HDFS
HDFS (Hadoop Distributed File System) is a distributed file system with a main characteristic: it has been designed to be
deployed on low-cost hardware. It has many similarities with existing distributed file systems but it is highly fault tolerant. In
addition, HDFS provides high throughput access to applications with large data sets. As architecture, HDFS uses a master/
slave model. An HDFS cluster consists of a single NameNode (the master), that manages the file system namespace and orders
access to files by clients. In addition to the master server, there are a number of DataNodes, usually one per node. The role of
these nodes is to manage storage attached to the nodes that they run on. These nodes are considered as worker nodes in the
master/slave model.
In the subsequent sections, we discuss the purpose of three operations on HDFS system: Create, Read and Write.
5.6.1 CREATE File
To create any file, the client makes a Remote Procedure Call (RPC) [13, 15] to the namenode to create a new file in the file system’s
namespace, without blocks. If the operation is successfully completed, the namenode sends positive acknowledge.
Figure 10. Examples of Create operation in HDFS
50
Journal of Networking Technology Volume 10 Number 2 June 2019
5.6.2 READ file
For reading data from a file, the Client communicates with the namenode to obtain metadata information about the locations of
data blocks, using RPC protocol [13, 15]. For each block, the namenode returns the addresses of all the datanodes that have a
copy of that block. Finally, client will interact with respective datanodes to read the file.
Figure 11. Example of Read in HDFS
5.6.3 WRITE file
Figure 12. Example of Write in HDFS
Journal of Networking Technology Volume 10 Number 2 June 2019
51
For writing data in file1, file2 or file3 (see Figure 12), the client splits a file into packets, then it solicits the namenode to allocate
new blocks by picking a list of suitable datanodes to store the replicas of the packets. The list of datanodes forms a pipeline. In
our example, there are three nodes in the pipeline. The client streams the packets to the first datanode in the pipeline, which
stores the packet and forwards it to the second datanode and then to the third datanode. When the client has finished writing
data (blocks)in the three replicas, the client sends a signal to the namenode indicating that the file is complete. The namenode
already knows the blocks that make up the file.
6. Discussion
If we compare the standard BlobSeer with modified BlobSeer proposed in this paper, we find that the use of multiple version
managers instead of a single one allows some flexibility when CREATE/WRITE set operations is large. In addition, our proposal
increases the scalability of the data management system because the number of version managers is not fixed in advance and it
is not static. We create dynamically new version managers when we rich a given threshold of overload.
BlobSeer supports an efficient fine-grain access to the BLOBs, for a large number of concurrent processes, that is not provided
in HDFS. In fact, HDFS provides write-once-read-many access model for files.
By contrast, the combination of a distributed metadata management and multi version managers provides high scalability and
increases fault tolerance compared with HDFS where all metadata are stored in one server (NameNode).
7. Conclusion
BlobSeer is a well-known concurrency-optimized data management system for data-intensive distributed applications. It is
adapted for applications that handle massive unstructured data in large-scale distributed environments. Its main component is
the version manager that create and manage different versions of BLOB objects. The architecture of BlobSeer ensures highperformance and avoids synchronization to achieve better throughput. But its main problem is the existence of a single version
manager for the whole system. In fact, when the number of WRITE/APPEND primitives increase, the version manager can
become overloaded, and in turn lead to a failure of the system. To overcome this bad situation, we proposed to use multi-version
managers instead one single. In fact, the use of a single version manager is a point of congestion that cause a bootleneck, that
has a significant impact on the system. In standard BlobSeer, version manager has been built to support only a finite limited
number of WRITE/APPEND primitives. In our proposal model, we overcome this limitation by introduction more than one single
version-manager.
As future works, we plan to achieve more experimentations our proposal to compare its performance with similar distributed data
management systems for large-scale applications.
References
[1] Hadoop. http://hadoop.apache.org.
[2] Hdfs. the hadoop distributed file system. http://hadoop.apache.org/common/docs/r0.20.1/hdfs-design.html.
[3] Chang, F., Dean, J., Ghemawat, S., Wilson, C., Hsieh, D. A., Wallach, Burrows., M., Chandra, T., Fikes, A., Gruber, R. E. (2006).
Bigtable: A distributed storage system for structured data. In: Proceedings of the 7th USENIX Symposium on Operating
Systems Design and Implementation, 7. USENIX Association, 2006.
[4] Shvachko, K. (2010). The hadoop distributed file system. In: Mass Storage Systems and Technologies (MSST), IEEE 26th
Symposium on IEEE, 2010.
[5] Garcia-Molina, H. (1982). Elections in a distributed computing system. IEEE Transactions on Computers, C-310:48–59, 1982.
[6] Varade, M., Jethani, V. (2013). Distributed metadata management scheme in hdfs. International Journal of Scientific and
Research Publications, 3(5).
[7] Karger, D., Lehman, E., Leighton, T., Tom, Panigrahy, R., Levine, M., Lewin, D. (1997). Consistent hashing and random trees:
distributed caching protocols for relieving hot spots on the world wide web. In: Proceedings of the Twenty-Ninth Annual ACM
Symposium on Theory of Computing (El Paso, Texas, United States,), p. 654–663, Press, New York, NY, May 04 - 06 1997.
52
Journal of Networking Technology Volume 10 Number 2 June 2019
[8] Ghemawat, S., Gobioff, H., Leung, S. (2003). The google file system. In: ACM Symposium on Operating Systems Principles,
29–43, Lake George, October 2003. NY.
[9] Nicolae, B., Antoniu, G., Bougé, L., Moise, D., Carpen-Amarie, A. (2011). Blobseer: Next-generation data management for large
scale infrastructures. Journal of Parallel and Distributed Computing, 71.169–184, (February).
[10] Nicolae, B. (2010). BlobSeer: Towards efficient data storage management for large-scale, distributed system. PhD thesis,
Université de Rennes 1, Rennes, France.
[11] Ross, R. B., Carns, P. H., Ligon III, W. B., Thakur, R. (2000). Pvfs: A parallel file system for linux clusters. In: 4th Annual Linux
Showcase and Conference, 317–327.
[12] Shvachko, K., Huang, H., Radia, S., Chansler, R. The hadoop distributed file system. In: Proceedings of the 2010 IEEE 26th
Symposium on Mass Storage Systems and Technologies (MSST), MSST ’10, 1–10, Washington, DC, USA, 2010. IEEE Computer
Society.
[13] Gomes Soares, P. (1992). On remote procedure call. In: IBM Press, editor, Proceedings of the 1992 conference of the Centre
for Advanced Studies on Collaborative research, CASCON ’92, 215–267, 1992.
[14] Andrew, S., Tanenbaum, Van Steen, M. (2006). Distributed Systems: Principles and Paradigms (2Nd Edition). Prentice-Hall,
Inc., Upper Saddle River, NJ, USA.
[15] Tay, B. H., Ananda, A. L. (1992). A survey of asynchronous remote procedure calls. SIGOPS Oper. Syst. Rev., 26 (2) 92–109,
(April).
[16] Tran, V-T. (2013). Scalable data-management systems for Big Data. PhD thesis, École Normale Supérieure de Cachan - ENS
Cachan, 2013.
[17] DeCandia, G., Hastorun, D., Jampani, M., Kakulapati, G., Lakshman, A., Pilchin, A., Sivasubramanian, S., Vosshall, P., Vogels,
W. (2007). Dynamo: Amazon’s highly available key-value store. In: Proceedings of twenty-first ACM SIGOPS symposium on
Operating systems principles, 205–220, New York, NY, USA, 2007. ACM.
[18] Yadava, H. (2014). The Berkeley DB Book. Apress, Berkely, CA, USA, 1st edition, 2014.
Journal of Networking Technology Volume 10 Number 2 June 2019
53