📜 ⬆️ ⬇️

Comparing Windows Azure Blob Storage and Amazon Simple Storage Service (S3) - Part II, Summary

The second and third parts of the comparison of the Windows Azure and Amazon storage services. The last part remains - a comparison of Windows Azure Blob Storage and Google Cloud Storage.

In the first part of this article, we began a comparison of Windows Azure Blob Storage and Amazon Simple Storage Service (S3), looked at the basic concepts, and compared pricing and functionality related to blob containers and baskets. Read the first part .
In this part of the article, we will compare the functionality related to blobs and objects, and close the comparison of the storage services of both systems, summarizing the resulting data into one common table.

The first part of the cycle - Comparing Windows Azure Table Storage and Amazon DynamoDB
The second part of the cycle - Comparing Windows Azure Blob Storage and Amazon Simple Storage Service (S3) - Part I

Abbreviations: Windows Azure Blob Storage - WABS and Amazon Simple Storage Service - AS3 .
')

Concepts



Before a detailed discussion of the functions, I find it important to clarify some of the concepts behind the blobs and objects.

Blobs and objects : WABS blobs and AS3 objects are files in your cloud file system, located in blob containers and baskets.

Comments:



The two most important functions are upload and download, so I propose to discuss them first, then compare the other functions.

Loading blobs and objects



Let's talk about loading blobs and objects into containers and baskets. There are two loading mechanisms - you can load a blob or an object entirely within a single request or divide them into pieces (blocks or WABS pages and parts in AS3).

Loading in one request


If the download data is small and you have a good connection speed, you can download this data completely in one request. In WABS, Put Blob is used for this. In AS3, Put Object .

Loading chunks


You can share large data that is not efficiently loaded in a single query completely. Both systems allow you to split data into chunks (blocks or pages in WABS and parts in AS3) and load gradually. In WABS, you need to use Put Block and Put Block List for block blobs and Put Page for page blobs. In AS3, the Initiate Multipart Upload , Upload Part and Complete Multipart Upload or Abort Multipart Upload functions are used for this.

There are many reasons why you can decide to load data in chunks:



Now for how to load the data in chunks on each system. For example, you want to download a 100 MB file with chunks. Let's see what needs to be done when using each of the platforms.

WABS


Suppose each piece has a size of 1 MB (despite the fact that there is no need to have pieces of the same size) and you need to complete the download of 100 pieces. We take a block blob, each of the blocks (pieces) of which has a unique identifier (BlockId). To load it, use the Put Block function. BlockId is a Base64 encrypted string, the maximum size of which is limited to 64 bytes. All BlockId (100 in our case) must be the same length. In this case, it does not matter in what order you will load the blocks - you can load them in parallel. After loading the block, WABS puts it somewhere in storage and stores it for 7 days. After loading all the blocks, we call Put Block List , commit (commit) these blocks. Until the call of this function, the blob cannot be accessed and, if you have not confirmed the blocks within 7 days, they will be deleted by the system. After calling the function based on the order of the BlockId list, WABS will recreate the blob and mark it as available. It makes no difference what values ​​BlockId will have (all of them can be GUIDs), but it is important in which order you send the BlockId when using the Put Block List.

Limitations:



AS3


Suppose the size of each piece is 5 MB. Each piece is assigned a unique identifier (Part Number), which identifies the piece and determines its position in the source object. This number can be any number from 1 to 10,000, but they must be sorted, that is, if we take our situation, then a 0-5MB piece should have the number 1, a 5-10MB piece - 2, and so on. But when you start uploading these parts, you first need to call the Initiate Multipart Upload function , which tells AS3 that the object transfer process has begun. The function will return Upload Id. Next, for each piece, you must call the Upload Part function and transfer the Upload Id and the number of the piece, and it does not matter in what order the pieces will be loaded (can be loaded in parallel). After downloading all the pieces, you need to call the Complete Multipart Upload function, thus confirming the pieces. To cancel the process, you can call Abort Multipart Upload .

Limitations:



Download blobs and objects



There are two mechanisms for downloading blobs and objects - either downloading a blob or an object entirely in one request or in chunks.

Each system has only one download function — Get Blob in WABS and Get Object in AS3.

Download in one request


If the data is small and you have a good connection speed, you can download the entire object using Get Blob in WABS and Get Object in AS3.

Download in chunks


If the object is large and you are not sure whether you can download it at one time, you can download the pieces using the same function with the addition of the Range header and defining the range of bytes needed for downloading.

Download process:

  1. Determine the size of the object. For example, it "weighs" 100 MB.
  2. Determine the size of the pieces. For example, you are comfortable to download pieces of 1 MB.
  3. Call Get Blob or Get Object and pass them the appropriate values ​​in the Range header. If you download consistently, your first request will have the value of this header “0 - ​​1048575” (0 - 1 Mb), the second request - “1048576 - 2097151” (1 - 2 Mb) and so on.
  4. After downloading put a piece somewhere.
  5. After downloading all the pieces, create an empty file of 100 MB in size and fill this file with the downloaded pieces.


Functions



The functions provided by both systems are tabulated below.
WABS
AS3
Put Blob / PUT Object
Yes
Yes
POST Object
Not
Yes
Get Blob / GET Object
Yes
Yes
GET Object torrent
Not
Yes
GET Object ACL
Not
Yes
PUT Object ACL
Not
Yes
Get Blob Properties / HEAD Object
Yes
Yes
Set Blob Properties
Yes
Not
Get Blob Metadata / Head Object
Yes
Yes
Set blob metadata
Yes
Not
Delete Blob / DELETE Object
Yes
Yes
Delete Multiple Objects
Not
Yes
Copy Blob / Put Object - Copy
Yes
Yes
Snapshot blob
Yes
Not
Lease blob
Yes
Not
Initiate Multipart Upload
Not
Yes
Put Block / Upload Part
Yes
Yes
Put Block List / Complete Multipart Upload
Yes
Yes
Get Block List / List Parts
Yes
Yes
Abort Multipart Upload
Not
Yes
Upload Part - Copy
Not
Yes
Put page
Yes
Not
Get page ranges
Yes
Not



Let's discuss these functions in more detail.
WABS
AS3
Put Blob / PUT Object
Yes
Yes

The function adds a blob to the blob container and an object to the basket.

Comments:


WABS
AS3
POST Object
Not
Yes

The function adds an object to the specified basket using an HTML form. POST is an alternative to PUT and allows you to implement the download object with a browser. Parameters transmitted by PUT using HTTP headers are transmitted in the case of POST as the body of an encrypted multipart / form-data message.
WABS
AS3
Get Blob / GET Object
Yes
Yes

The function allows you to download blob from a container or basket.

Comments:


WABS
AS3
GET Object torrent
Not
Yes

AS3 allows you to use objects using BitTorrent, which can also reduce the amount of traffic transferred. Read more about using BitTorrent and AS3 - here .

The function can only be called on objects that are less than 5 GB in size.
WABS
AS3
GET Object ACL
Not
Yes

In AS3, you can specify ACLs at the level of an individual object (in WABS, ACLs can be specified only at the level of the blob container). This function is used to obtain information about the ACL specified for the object.

An interesting point is that if you use a different version of an object, each version will have a separate ACL. To obtain an ACL for a specific version of an object, you must pass Version Id version functions.
WABS
AS3
PUT Object ACL
Not
Yes

The function allows you to specify the ACL for the object. As stated above, each version of an object has its own ACL. To specify an ACL for a specific version of a function object, you must transfer the Version Id of this version.
WABS
AS3
Get Blob Properties / HEAD Object
Yes
Yes

The function is used to get the blob properties and object metadata, but does not return the contents of the blob.

Comments:


WABS
AS3
Set Blob Properties
Yes
Not

The function determines the blob's system properties in WABS. Not available in AS3. When creating an object, you can specify only system properties.

Properties available for definition include: Cache Control, Content Type, Content MD5, Content Encoding, Content Language. Please note that you do not have the right to redefine these properties for snapshot blob.

WABS allows you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ).
WABS
AS3
Get Blob Metadata / Head Object
Yes
Yes

The function returns user-defined metadata. This function can be used to get the properties of a particular version of a blob or object. To obtain this information, you must specify the date / time of the blob snapshot in WABS and Version Id of the required version in AS3. If these parameters are omitted, the current version information is returned.
WABS
AS3
Set blob metadata
Yes
Not

The function is used to specify a metadata dictionary in the form of a collection of key-value entries for blobs in WABS.

Comments:


WABS
AS3
Delete Blob / DELETE Object
Yes
Yes

The function removes a blob or object from the repository.

Comments:



· WABS allows you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ).


WABS
AS3
Delete Multiple Objects
Not
Yes

This function allows you to delete several objects from the basket in one HTTP request — to do this you need to know the keys of the objects to be deleted. You can also delete specific versions of one or more objects. Up to 1000 objects can be deleted in one request.
WABS
AS3
Copy Blob / Put Object - Copy
Yes
Yes

The function copies the blob to somewhere from the original location.

Comments:

· Both systems allow you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ). These conditions can be defined both on the source and on the final copy in WABS and on the source in AS3.

· WABS allows you to copy objects from a container to a container only within one storage account. There is no such limitation in AS3. If the baskets between which the exchange takes place belong to the same account, the object will be copied. However, if you created an object using the API for loading in chunks, you cannot copy the object from region to region.

· Both systems allow you to copy existing metadata or specify metadata for the final copy.

· AS3 implements this function as a combination of GET Object and PUT Object .



Useful tips:


WABS
AS3
Snapshot blob
Yes
Not

The function creates a read-only copy of the blob - this is how WABS versioning is implemented. As I mentioned in previous articles, AS3 implements versioning itself. In WABS, versioning is implemented at the level of a particular blob, and the versioning of this blob goes into the responsibility of the developer.

Comments:



· WABS allows you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ).


WABS
AS3
Lease blob
Yes
Not

The function allows you to put a one-minute lock on the blob so that it cannot be modified. The function is very convenient in a situation with many workers trying to perform the same operation, but you want only one of them to make the change. Learn more: http://blog.smarx.com/posts/managing-concurrency-in-windows-azure-with-leases .


WABS
AS3
Initiate Multipart Upload
Not
Yes

The function is used to initiate data loading in chunks.
WABS
AS3
Put Block / Upload Part
Yes
Yes

The function is used to load pieces (blocks in WABS and parts in AS3) data.
WABS
AS3
Put Block List / Complete Multipart Upload
Yes
Yes

The function is used to confirm blobs or objects in the corresponding storage. The function can be called after loading all blocks or parts.
WABS
AS3
Get Block List / List Parts
Yes
Yes

The function returns the list of loaded blocks or parts.

Comments:



· WABS allows you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ).

WABS
AS3
Abort Multipart Upload
Not
Yes

The function is used to cancel the ongoing boot process.

In the form in which this functionality is implemented in WABS, you do not need it. In WABS, you cannot interrupt the boot process. If you started downloading blobs in chunks and did not call up the Put Block List within 7 days, the loaded blocks will be deleted.
WABS
AS3
Upload Part - Copy
Not
Yes

If the object you are trying to copy is larger than 5 GB, you will not be able to use the Put Object - Copy function. You will have to copy this object using the download pieces, and this function is intended just for this. The difference between this function and the Upload Part is that instead of sending the data in the request body, you specify the source object in the format source_ bucket / source_ object and the range of bytes to be copied. Thus, you need to deal with all parts of the copied object. Before calling this function, you need to initiate the download in chunks and get the Upload Id, which you need to transfer to the function. To complete copying you need to call “Complete Multipart Upload” or “Abort Multipart Upload”.

WABS
AS3
Put page
Yes
Not

When you create a page blob using Put Blob, you only initiate its creation, i.e. create an empty page blob with no content. Using this function, you can insert / update data into a page blob, and you do not need to confirm the data - after calling this function, they will be automatically confirmed.

Comments:



· WABS allows you to define preconditions that must be met in order to successfully complete this function ( If- Modified- Since , If- Unmodified- Since , If- Match , If- None- Match ).

WABS
AS3
Get page ranges
Yes
Not

An important difference between block and page blob is pricing - you pay for a block blob in full, but in the case of a page blob, only for busy (non-zero) pages. For example, if you created a block blob of 2 GB and a page blob of 2 GB and both of them are empty (contain 0 bytes), you will pay for 2 GB of the block blob, but the page blob will not be charged. Then you write 1024 bytes into a page blob using Put Page and start paying for those 1024 bytes.

This function returns a sorted list of non-zero pages.

This function has another advantage - if you call this function when downloading a page blob, you will be guaranteed to know where your data is stored in the blob, after which you can download not the entire blob, but only the occupied pages using the Range header in the function Get Blob.

Summary



Both systems provide a similar set of functions. Each system has its own set of functions, which is absent in another system, but in general the differences in functionality are not the same as in the case of containers of blobs and baskets.

Comparison of Windows Azure Blob Storage and Amazon Simple Storage Service (S3) - Summary



Detailed articles comparing Windows Azure Blob Storage and Amazon Simple Storage Service (S3 can be read here and here . In this article I will summarize.

Abbreviations: Windows Azure Blob Storage - WABS and Amazon Simple Storage Service - AS3 .

The table summarizes the comparison of the functions of WABS and AS3.
WABS
AS3
The current version of the service
2011-08-18
2006-03-01
Storage Restriction
Up to 100TB
Not limited
Cloud file system
Yes
Yes
Ability to transfer discs to transfer huge amounts of data
Not
Yes
Supported Protocols
HTTP / HTTPS
HTTP / HTTPS / BitTorrent
The ability to bill customers for the data they consume
Not
Yes
Server side encryption support
Not
Yes
Limited redundancy support
Not
Yes
Supported hierarchy level
2
2
Blob containers and baskets
Create blob containers and baskets
Yes
Yes
The number of containers blobov and baskets
Not limited
Not limited
Minimum / maximum length of the name of the basket or blob container
3/63
3/63
Case Sensitivity in Blob and Basket Container Names
lower case
lower case
Characters allowed in blob and basket containers
Alphanumeric, hyphen (-)
Alphanumeric, hyphen (-), dot (.)
Virtual hosting support
Not
Yes
Path-style hosting support
Yes
Yes
The ability to determine the ACL at the time of creation
Yes
Yes
Default ACL
Private
Private
Specifying your own metadata
Yes
Not
Getting a list of blob containers and baskets
Yes
Yes
The maximum number returned by a single function call of blob containers or baskets
5000
Not specified
Returning a part of the list of blob and basket containers using prefix filtering
Yes
Yes
Removing Blob Containers and Baskets
Yes
Yes
Container blobov or basket must be empty before removal
Not
Yes
Getting a list of blobs or objects
Yes
Yes
The maximum number of blobs or objects returned by a single function call
5000
1000
The ability to specify the upper limit on the number of returned blobs or objects in a single function call
Yes
Yes
Separator support for creating an illusion of folder hierarchy
Yes
Yes
Filtering a return list of blobs or objects by prefix
Yes
Yes
Get a list of versioned blobs or objects
Yes
Yes
Getting a list of unapproved blobs or objects
Yes
Yes
Logging requests to blobs or objects
Yes
Yes
Logging requests to specific blobs or objects
Not
Yes
Getting a logging configuration for requests to blobs or objects
Yes
Yes
Determining ACL on blob container or cart
Yes
Yes
Possible ACL Values
Container, Blob, Private
READ, WRITE, READ_ACP, WRITE_ACP, FULL_CONTROL
Defining different ACLs for different users
Not
Yes
Defining custom metadata for a blob or bucket container
Yes
Not
Getting user-defined metadata for container blobs or buckets
Yes
Not
Object versioning
Yes
Yes
Versioning is controlled by the system.
Not
Yes
Setting up versioning for blob or basket containers
Not
Yes
Getting configuration of blob container or basket versioning
Not
Yes
Automatic removal of the contents of the blob container or basket after a certain period of time
Not
Yes
Set up automatic deletion of the contents of the blob container or basket after a certain period of time
Not
Yes
Get settings for automatic removal of the contents of the blob container or the basket after a certain period of time
Not
Yes
Delete settings for automatically deleting the contents of a blob container or basket after a certain period of time
Not
Yes
Defining access policies on a blob container or basket to prevent unauthorized access
Not
Yes
Getting access policies on a blob container or basket to prevent unauthorized access
Not
Yes

Not
Yes

Not
Yes

Not
Yes

Not
Yes

Not
Yes
,
Not
Yes
,
Not
Yes

Not
Yes

Not
Yes

Not
Yes

Not
Yes


200 / 1
5

,
-

Yes
Yes
,
64


Yes
Yes

50000
10,000

Not
5

Yes
Yes
ACL
N / A
Yes
, ,
N / A
Yes

Yes
Not
HTML- POST
Not
Yes

Yes
Yes

Yes
Yes

Not
Yes
Torrent
Not
Yes
ACL
Not
Yes
ACL
Not
Yes

Yes
Yes

Yes
Not

Yes
Yes

Yes
Not

Yes
Yes
Multi Factor Authentication (MFA) delete
Not
Yes

Yes
Not

Not
Yes

Yes
Yes

Yes
Yes
read-only
Yes
Not
Getting an exclusive lock on a blob or object
Yes
Not


Note from the translator
Despite the youth (in relation to the competitor) of the Windows Azure platform, Microsoft did their best - the relative equality in functionality between the two platforms remains, and this is good news. I am very interested to observe the development of both platforms, and I think that it will be even more interesting further. By the way, on June 7, Microsoft will roll out global updates - do not miss, it will be very cool, as I say, familiar with innovations! It seems to me that the competition of cloud platforms is gaining a new round, and then everything will depend on how true Amazon and Microsoft will be chosen. Wait and see.The following translation will be devoted to the comparison of Windows Azure Blob Services and the Google Cloud Service.

UPD: missed the appearance of Trust Services for Windows Azure: now there is the possibility of encryption on the server side - more .

Source: https://habr.com/ru/post/145122/


All Articles