2.2.1. Giới thiệu bộ lƣu trữ Windows Azure
B ộ lưu trữ Windows Azure cho phép các lập trình viên lưu dữ u c a h trên liệ ủ ọ
đám mây. Ứng d ng có th truy xu t d u t bụ ể ấ ữ liệ ừ ất kì nơi đâu, tạ ấi b t kì thời điểm
nào, lưu trữ lượng d li u tùy ý trong kho ng th i gian bữ ệ ả ờ ất kì và nó đảm b o r ng ả ằ
d ữliệu được lưu trữ ề b n v ng và không b ữ ị thất lạc. Bộ lưu trữ Windows Azure cung
c p mấ ột bộtrừu tượng hóa d u phong phú: ữliệ
- Windows Azure Blob - cung cấp lưu trữ cho các m u d u l n. ẫ ữliệ ớ
- Windows Azure Table - cung c p b ấ ộ lưu trữ có cấu trúc để lưu trữ tình trạng s d ng. ử ụ
2.2.2. Windows Azure Blob
2.2.2.1. Giới thiệu
Blob là đối tượng d li u nh phân lữ ệ ị ớn được dùng để ch a video, audio, email, ứ
Blob cho phép ng dứ ụng lưu trữ, truy xu t d ấ ữ liệu có kích thước lớn, lên đến
200GB. Để ử ụ s d ng blob, m t l p trình viên ph i t o m t ho c nhi u container ộ ậ ả ạ ộ ặ ề
trong tài khoản lưu trữ. Mỗi container có thể ch a mứ ột hoặc nhi u blob. ề
Hình 2.10: Mô hình ví d d u Blob tài khoụ ữliệ ản lưu trữ [8]
T t c truy xuấ ả ất đến b ộ lưu trữ Windows Azure đều được th c hi n thông qua ự ệ
tài khoản lưu trữ. M t tài kho n có th có nhi u container. ộ ả ể ề
Blob Container - M t container ch a nhi u blob. ộ ứ ề
M t container có th có metadata k t h p v i chúng. Metadata d ng cộ ể ế ợ ớ ở ạ ặp <tên, giá trị> và chúng có kích thướ ối đa 8KB vớc t i m i container. Container ch ỗ ỉ
chứa các blob và không th ể chứa các thùng ch a khác bên trong. vì th nó không ứ ế
thể ạ t o ra h ệ thống phân c p các blob. Tuy nhiên, tên blob có th ch a kí t "/", vì ấ ể ứ ự
thế ộ m t lập trình viên có th gi l p h ph n c p cho blob khi có nhu c u. ể ả ậ ệ ầ ấ ầ
Blob: Blob được lưu trữ trong container. Kích thước m i blob có th ỗ ể lên đến 200GB. M t blob có m t tên duy nh t trong m t container. Blob có th có metadata ộ ộ ấ ộ ể
k t h p v i chúng, c p <tên, giá trế ợ ớ ặ ị>, và chúng có kích thướ ối đa 8KB vớc t i mỗi blob.
Đường d n URI cho mẫ ột blob được cấu trúc như sau:
http://<account>.blob.core.windows.net/<container>/<blobname> Blob có hai d ng: ạ
Block blob: m i blob lo i này có th ỗ ạ ể chứa đến 200GB d ữ liệu. Để thực hi n ệ
chuyển đổi hi u qu , mệ ả ột block blob được chia nh vào các block. N u m t th t bỏ ế ộ ấ ại
x y ra, vi c truy n l i ti p t c v i kh i g n nhả ệ ề ạ ế ụ ớ ố ầ ất hơn là gử ại l i toàn b blob. M t khi ộ ộ
t t c các block c a mấ ả ủ ột blob đã được t i lên, toàn b blob có th ả ộ ể được commit
đồng th i. ờ
Page blob: Một page blob được chia vào các page có kích thước 512-byte, và
ứng d ng t ụ ự do đọc và ghi các page riêng l m t cách ng u nhiên trong blob. ẻ ộ ẫ
M t khía c nh quan tr ng c a blob là vai trò c a nó trong vi c h XDrive. ộ ạ ọ ủ ủ ệ ỗtrợ
Để ểu đượ hi c vai trò quan trọng đó là gì, chúng ta thấy rõ r ng các th hi n Web ằ ể ệ
role và Worker role đượ ực t do truy xu t h th ng t p tin c c b c a máy o. Theo ấ ệ ố ậ ụ ộ ủ ả
mặc định, lưu trữ này không liên t c: Khi th hi n b t t, máy ụ ể ệ ị ắ ảo và lưu trữ ụ c c b ộ
c a nó s bi n m t. G n m t XDrive vào th hi n. Khi ghi d u vào XDrive thì ủ ẽ ế ấ ắ ộ ể ệ ữ liệ
d ữliệu được ghi ngay vào blob bên dưới. Khi th hi n không hoể ệ ạt động, d u này ữliệ
đã được lưu trữ liên t c trên page blob, sụ ẵn sàng để ắ g n tr l i. ở ạ
2.2.2.2. Giao tiếp REST với Blob
T t c các giao tiấ ả ếp đến Windows Azure Blob được th c hi n thông qua giao ự ệ
tiếp HTTP REST PUT/GET/DELETE.
Các lệnh HTTP/REST được hỗ trợ đểthực thi các thao tác blob bao gồm : - PUT Blob - Thêm m t blob m i hoộ ớ ặc ghi đè blob đã tồ ạn t i.
- DELETE Blob - Xóa một blob đã tồn t ại.
- Copy Blob - Sao chép m t blob t blob nguộ ừ ồn đến blob đích trong
cùng tài khoản lưu trữ. Nó s sao chép toàn b blob, bao g m metadata, property ẽ ộ ồ
và blocklist. có th s d ng Copy Blob cùng v i Delete Ta ể ử ụ ớ Blob để đổ i tên một blob hoặc để di chuyển m t blob gi a các container, ho c t o b n sao d phòng ộ ữ ặ ạ ả ự
cho blob hiện có.
- Get Block List - Lấy danh sách các block đã được tải lên. Có hai lo i danh sách block: ạ
Danh sách block đã commit Đây là danh sách block đã đượ- c commit thành
công qua PutBlockList vào một blob.
Danh sách block chưa commit Đây là danh sách các block đã đượ ả- c t i lên cho m t blob nhộ ững chưa được commit vào blob.
Ta có th t i mể ả ột blob có kích thước lên đến 64MB c h s d ng m t request ỉ ử ụ ộ
PUT blob. Để ải lên các blob có kích thước đế t n 200GB, cta n ph i ghép các block ầ ả
lại với nhau.
2.2.2.3. Với Blob là một danh sách các block
M t trong nh ng chiộ ữ ến lược chính c a Windows Azure Blob là cho phép tủ ải
lên các blob có kích thước lên đến nhiều GB. Điều này được th c hi n b i ự ệ ở
Windows Azure Blob qua những bước sau:
C t blob c n t i thành nhi u block liên ti p nhau. Vd: m t phim 10GB có th ắ ầ ả ề ế ộ ể
c t thành 2500 kh i, m i khắ ố ỗ ối có kích thước 4MB, khối đầu tiên đại di n cho byte ệ
thứ 1 đến 4194304, khối thứ 2 đại diện cho byte 4194305 đến 8388608.
Đặt m i block m t tên/ID duy nh t. ID duy nhỗ ộ ấ ất này được gi i h n b i tên ớ ạ ở
blob đượ ảc t i lên. Ví dụ, block đầu tiên được g i là "Block 0001", block th hai ọ ứ
Đặt mỗi block vào đám mây vớ ệnh PUT. Điều này đượi l c th c hi n v i m t ự ệ ớ ộ
l nh PUT ch nh URL trên v i truy v n xáệ ỉ đị ở ớ ấ c định rằng đây là lệnh PUT block cùng với ID c a block. ủ
Sau khi t t c ấ ả các block đã được lưu trữ trong b ộ lưu trữ Windows Azure,
chúng ta commit danh sách các block đã tải lên vào blob mà chúng thu c vộ ề. Điều
này được th c hi n v i mự ệ ớ ộ ệt l nh PUT ch nh URL trên v i truy vỉ đị ở ớ ấn xác định
rằng đây là lệnh blocklist. Sau đó, header HTTP chứa danh sách các block được
commit cho blob này. Khi thao tác này th c hi n thành công, danh sách các block, ự ệ
theo th t ứ ự mà chúng được li t kê, bây gi i di n cho phiên b n có th c cệ ờ đạ ệ ả ể đọ ủa
blob. Blob sau đó có thể được đọc b ng cách s d ng l nh GET blob. ằ ử ụ ệ
Hình 2.11: Khái niệm lưu trữBlob Block [8]
Như mô tảtrước đó, blob có thể được truy xu t qua PUT và GET b ng cách s ấ ằ ử
d ng URL sau:. ụ
http://<account>.blob.core.windows.net/<container>/<blobname>. Khi s d ng m t lử ụ ộ ệnh PUT đơn, block có kích thước lên đến 64MB có th ể
PUT t t c ấ ả các block, và sau đó PUT blocklist để ợ h p thành phiên b n có th ả ể đọc
được c a blob này. ủ
Mỗi block được xác định bởi Block ID và nó được giới h n b i tên blob. Vì ạ ở
thế, nh ng blob khác nhau có th có các block v i cùng ID. M i block có kích ữ ể ớ ỗ
thước lên đến 4MB, và các block trong cùng blob có th ể có kích thước khác nhau.
Windows Azure Blob cung c p các thao tác cấ ấp block như sau:
PUT block - t i m t block vào m t blob. Chú ý mả ộ ộ ột block đượ ảc t i lên thành công v i thao tác PUT block không tr thành m t ph n c a blob ch khi nào nó ớ ở ộ ầ ủ ỉ được commit v i thao tác PUT blocklist. ớ
PUT blocklist - commit m t blob bộ ằng cách xác định danh sách các ID block
tạo nên blob. Các block được xác định trong hoạt động này phải đượ ảc t i lên thành
công b ng cách s d ng l i g i PUT block. Th t các block trong thao tác PUT ằ ử ụ ờ ọ ứ ự
blocklist s h p thành phiẽ ợ ên bản có th ể đọc của blob.
GET blocklist - lấy danh sách block đã được commit trước đó cho blob bằng
thao tác PUT blocklist. Danh sách block được tr ả ra định rõ ID và kích thước c a ủ
m i block. Chỗ ức năng này có thể được s dử ụng để ấ l y các danh sách block chưa được commit.
2.2.2.4. Windows Azure Table
2.2.2.4.1. Giới thiệu
Windows Azure Table là b ộ lưu trữ có cấu trúc được cung c p b i Windows ấ ở
Azure Platform. Nó h các Table có kh ỗ trợ ả năng mở ộ r ng c c lự ớn trên đám mây.
Nó có th ểchứa hàng t entity và terabyte d u. H ỉ ữliệ ệthống s t ng m r ng mẽ ự độ ở ộ ột cách hi u qu n hàng ngàn máy ch . M t s ệ ả đế ủ ộ ố điểm n i b t c a Windows Azure ổ ậ ủ
Table:trợ LINQ, ADO.NET Data Service và REST. T p h p các ki u d li u phong ậ ợ ể ữ ệ
H ỗtrợ lượng table và entity không gi i h n và không gi i h n v ớ ạ ớ ạ ề kích thước table.
Hình 2.12: Windows Azure Table [8]
Storage Account (Tài khoản lƣu trữ) - Ứng d ng ph i s d ng mụ ả ử ụ ột tài kho n h p l truy xuả ợ ệ để ất bộ lưu trữ Windows Azure.
Table (B ng) ả - chứa m t b các entity. Mộ ộ ột ứng d ng có th t o ra nhi u table ụ ể ạ ề
chỉ ớ v i m t tài khoộ ản lưu trữ.
Entity (Th c thự ể) - Entity (một entity tương tự như một dòng) là m u d u ẫ ữliệ
cơ bản được lưu trữ trong m t table. M t entity ch a m t t p các property. Mộ ộ ứ ộ ậ ỗi
table có 2 property tên là "PartitionKey" và "RowKey" t o ra khóa duy nh t cho ạ ấ
m i entity. ỗ
Property (Thuộc tính) - Đại di n cho m t giá tr duy nh t trong entity. Tên ệ ộ ị ấ
property phân biệt hoa, thường. Một tập h p phong phú các ki u d ợ ể ữliệu được hỗ trợ
cho giá trị property.
PartitionKey - Đây là property khóa đầu tiên c a m i table. H ủ ỗ ệthống s d ng ử ụ
RowKey - là property khóa th hai cứ ủa table. Đây là ID duy nhấ ủt c a entity trong phân vùng mà nó thu c v . PartitionKey k t h p vộ ề ế ợ ới RowKey xác định duy nh t m t entity trong mấ ộ ột table.
Timestamp - là property có giá tr ị Datetime, được lưu giữ ở b i h ệ thống để
ghi lại thời điểm thay đổi entity l n cu ầ ối.
Partition - M t t p h p các entity trong m t table v i cùng giá tr khóa ộ ậ ợ ộ ớ ị
PartitionKey.
Sort Order (Th t s p x p) ứ ự ắ ế - Các entity trong table được s p x p theo ắ ế
PartitionKey vào sau đó là theo RowKey. Điều này có nghĩa là các truy vấn xác
định theo các khóa này s hi u qu ẽ ệ ả hơn và tấ ảt c các k t qu ế ả được tr v ả ề được s p ắ
x p theo ế PartitionKey và sau đó theo RowKey.
Sau đây là mộ ốt s thông tin chi ti t b sung cho Table, Entity và Property ế ổ
Table:
Tên table chỉ ch a các kí t và s . ứ ự ố
Tên table không bắt đầu v i m t kí t s . ớ ộ ự ố
Tên table phân biệt hoa - thường.
Tên table phải có độ dài t ừ 3 đến 63 kí t . ự
Property: tên property chỉ được chứa các kí t ựch cái và dữ ấu „_‟. Entity: m t entity có tộ ối đa 255 property bao gồm các property b t bu ắ ộc. PartitionKey, RowKey và Timestamp. T t c các property khác trong entity có ấ ả
tên được định nghĩa theo nhu c u ng d ng. ầ ứ ụ
PartitionKey và RowKey có ki u chu i và mể ỗ ỗi khóa kích thướ ối đa 1 KB. c t - Không có giản đồ ố đị c nh - Không có giản đồ được lưu trữ ở b i Windows
Azure Table, vì th t t c ế ấ ả các property được lưu trữ theo c p <tên, ki u d ặ ể ữ
liệu>. Điề này có nghĩa rằu ng 2 entity trong cùng m t table có th có property khác ộ ể
nhau. M t table có th có hai entity v i tên property giộ ể ớ ống nhau, nhưng có kiểu d ữ
liệu khác nhau cho giá tr property. Tuy nhiên, tên property ph i là duy nh t vị ả ấ ới mỗi entity.Kết hợ kích thướp c c a t t c các d u trong m t entity không th ủ ấ ả ữliệ ộ ể vượt quá
1MB. Kích thước này bao gồm kích thước của tên property cũng như kích thước
c a giá tr property ho c ki u c a chúng, bao g m c hai property khóa b t buủ ị ặ ể ủ ồ ả ắ ộc (PartitionKey và RowKey).
B ng 2.1: ả Các ki u d u Windows Azure Table h . ể ữliệ ỗtrợ
2.2.2.4.2. Phân vùng Table
Windows Azure Table cho phép các table m rở ộng đến hàng ngàn nút lưu trữ
b ng cách phân ph i các entity trong table. Khi phân phằ ố ối các entity, nó mong muốn
Các giá tr c a Patition Key. 13:
Hình 2. ị ủ
Hình mình h a mô t m t table ch a nhi u phiên b n c a nhi u tài li u khác ọ ả ộ ứ ề ả ủ ề ệ
nhau. Mỗi entity trong table tương ứng v i m t phiên b n c a m t tài li u c ớ ộ ả ủ ộ ệ ụ thể. Trong ví d này, PartitionKey c a table là tên tài li u và RowKey là tên phiên ụ ủ ệ
b n.Tên tài li u cùng v i tên phiên bả ệ ớ ản xác định duy nh t m t entity trong table. ấ ộ
Trong ví d này, t t c các phiên b n c a cùng m t tài li u t ụ ấ ả ả ủ ộ ệ ổ chức vào m t phân ộ
vùng riêng l . ẻ
2.2.2.4.3. Tác động c a vi c phân vùng ủ ệ
Bây gi chúng ta mô t mờ ả ục đích của các phân vùng và làm th ế nào để chọn một PartitionKey cho t t.ố
Việc phân vùng table ảnh hưởng đến kh ả năng mở ộ r ng c a table. H th ng ủ ệ ố
lưu trữ đạt được kh ả năng mở ộ r ng khá l n b ng cách phân b các phân vùng qua ớ ằ ố
nhiều nút lưu trữ. H ệthống quan sát mô th c s d ng các phân vùng và t ng cân ứ ử ụ ự độ
b ng các phân vùng này qua t t c ằ ấ ả các nút lưu trữ. Điều này cho phép h ệ thống và
ứng d ng c a ta m rụ ủ ở ộng để đáp ứng nhu cầu lưu thông của các table.
H ỗ trợ giao d ch nhóm cho table. Ngoài ra, vi c các entity trong phân vùng ị ệ
được lưu trữ cùng nhau giúp cho vi c truy xu t hi u qu ệ ấ ệ ả hơn.
2.2.2.4.4. Ch n m t PartitionKey ọ ộ
Việ ực l a ch n mọ ột PartitionKey đóng vai trò quan trọng để ộ m t ứng d ng có ụ
entity, ở đó tađạt được nh ng truy v n hiữ ấ ệu quả qua các entity trong cùng m t phân ộ
vùng và kh ả năng mở ộ r ng c a các table, càng nhi u phân vùng trong table thì càng ủ ề
d dàng cho Windows Azure Table lan truy n tễ ở ề ải qua nhiều máy ch . ủ
2.2.2.4.5. L p trình Table ậ
2.2.2.5. Windows Azure Queue
2.2.2.5.1. Giới thiệu
Windows Azure Queue cung c p mấ ột cơ chế phân phối message đáng tin cậy. Nó cung cấp cơ chế điều phối không đồng bộ, được s dử ụng để ế ố k t n i các thành ph n khác nhau cầ ủa ứng dụng đám mây. Windows Azure Queue có tính s n sàng ẵ
cao, b n và hi u qu ề ệ ả thực thi cao. L p trình ng ậ ữ nghĩa của nó đảm b o r ng mả ằ ột message có th ể được xửlí ít nhất một lần.
Windows Azure Queue cho phép tách các thành ph n khác nhau cầ ủa ứng d ng ụ
đám mây, cho phép ứng dụng đám mây được xây d ng m t cách d dàng v i nhi u ự ộ ễ ớ ề