e. Các thuộc tính của điện toán đám mây
2.3.5. Khối đối tượng lưu trữ (Swift)
Swift là dự án đầu tiên của Openstack (cùng với Nova), cung cấp một kiến trúc lưu trữ để quản lý dữ liệu. Ta có thể hiểu nôm na, Swift khá giống các dịch vụ lưu trữ khác như mediafire hay dropbox.
a. Đặc tính của Swift.
- Tất cả các đối tượng được lưu trữ trong Swift có một URL.
- Tất cả các đối tượng được lưu trữ được nhân rộng 3x trong các zone (coi như là duy nhất), có thể được định nghĩa là một nhóm các ổ đĩa, một rack, một nút.
- Tất cả các đối tượng có siêu dữ liệu của riêng mình.
- Các nhà phát triển tương tác với hệ thống lưu trữ đối tượng thông qua một HTTP RESTful API.
- Đối tượng lưu dữ liệu có thể được đặt bất cứ nơi nào trong cluster.
- Cluster mở rộng bằng cách thêm các nút bổ sung mà không hy sinh hiệu suất, cho phép nâng cấp hiệu quả chi phí lưu trữ mở rộng tuyến tính.
- Các nút mới có thể được thêm vào cluster mà không có thời gian chết. - Các nút và ổ đĩa bị hỏng có thể được hoán đổi với thời gian nghỉ dưỡng. - Dữ liệu không phải di chuyển đến một hệ thống lưu trữ hoàn toàn mới.
- Chạy trên phần cứng tiêu chuẩn công nghiệp, chẳng hạn như Dell, HP, Supermicro…
30
Hình 2.4 mô tả cách thức tương tác giữa dữ liệu và cơ sở dữ liệu, thông qua việc gọi các API thông qua các phương thức Get/Put/Delete.
Hình 2.4 Tương tác giữa dữ liệu và cơ sở dữ liệu.
b. Lợi ích khi sử dụng Swift.
Đối với các nhà phát triển ứng dụng:
- Dữ liệu được lưu trữ và phục vụ trực tiếp qua HTTP. - Truy cập để lưu trữ trong vài phút.
- Một hệ thống lưu trữ đa người dùng cho tất cả các ứng dụng. - Một hệ sinh thái phong phú của các công cụ và thư viện. Đối với các nhóm IT:
- Sử dụng chi phí thấp, máy chủ và ổ đĩa tiêu chuẩn công nghiệp. - Quản lý nhiều dữ liệu hơn và các case sử dụng một cách dễ dàng. - Kích hoạt các ứng dụng mới một cách nhanh chóng.
- Kiến trúc độ bền cao.
- Không có nhà cung cấp lock-in.
c. Kiến trúc Swift.
31
Proxy Server là giao diện chung của Swift và xử lý các yêu cầu đến tất cả các API, có trách nhiệm liên kết các phần còn lại của kiến trúc Swift. Với mỗi yêu cầu, nó sẽ tìm kiếm vị trí của account, container, hoặc object trong Ring và định tuyến theo yêu cầu cho phù hợp.Các API công cộng cũng được tiếp xúc thông qua Proxy Server. Khi một Proxy Server nhận được yêu cầu, nó sẽ xác định các nút lưu trữ dựa trên URL của đối tượng. Một số lượng lớn những failure cũng được xử lý trong các Proxy Server.Ví dụ, nếu một server là không có sẵn cho một object PUT, nó sẽ yêu cầu Ring cho một handoff server (chuyển giao server khác) và tuyến đường có thay thế.
Khi đối tượng được trực tiếp đến hoặc từ một object server thì sẽ được truyền trực tiếp thông qua proxy server.
Proxy Servers sử dụng một kiến trúc được chia sẻ và có thể mở rộng khi cần thiết trên cơ sở khối lượng công việc dự kiến.Có ít nhất hai máy chủ Proxy cần được triển khai để dự phòng.Nếu một máy chủ proxy thất bại, những máy khác sẽ giành quyền điều khiển.
Ring.
Một Ring đại diện cho một ánh xạ giữa tên của các thực thể được lưu trữ trên đĩa và vị trí địa lý của chúng.Có Ring riêng biệt cho các account, container, và các object như hình 2.5.Khi các thành phần khác cần phải thực hiện bất kỳ hoạt động trên một container, object, hoặc account, thì cần phải tương tác với Ring thích hợp để xác định vị trí của nó trong cluster.
32
Cấu trúc dữ liệu Ring bao gồm ba phần chính: một danh sách các thiết bị trong cluster, một danh sách các danh sách id thiết bị để phân vùng tập thiết bị, và một số nguyên cho biết số bit để tính toán băm để phân vùng.
Dữ liệu có thể được cô lập với nội dung của zone trong Ring.Mỗi bản sao của một phân vùng được đảm bảo để thường trú trong một zone khác nhau.Một zone có thể đại diện cho một ổ đĩa, một server, cabinet, một switch, hoặc thậm chí một trung tâm dữ liệu.
Các phân vùng của Ring được chia đều giữa tất cả các thiết bị trong quá trình cài đặt Swift.Khi phân vùng cần phải được di chuyển xung quanh (ví dụ nếu một thiết bị được thêm vào cluster), Ring đảm bảo rằng một số lượng tối thiểu các phân vùng được chuyển tại một thời điểm, và chỉ có một bản sao của một phân vùng được di chuyển tại một thời điểm.Trọng lượng có thể được sử dụng để cân bằng sự phân bố của các phân vùng trên ổ đĩa trên cluster.Điều này có thể hữu ích, ví dụ, khi ổ đĩa có kích thước khác nhau được sử dụng trong một cluster.
Ring được sử dụng bởi các Proxy Server và một số tiến trình nền (như sao chép). Bản đồ Ring phân vùng đến các địa điểm vật lý trên đĩa. Ring duy trì lập bản đồ này bằng cách sử dụng các zone, thiết bị, phân vùng, và bản sao.Mỗi phân vùng trong Ring được tái bản, theo mặc định, 3 lần qua cluster, và các địa điểm cho một phân vùng được lưu trữ trong các Map.Ring cũng chịu trách nhiệm xác định những thiết bị được sử dụng cho handoff (bàn giao) khi failure.
Zone.
Swift cho phép zone được cấu hình để cô lập các ranh giới thất bại.Mỗi bản sao của dữ liệu nằm trong một zone riêng biệt hình 2.6.
33
Hình 2.6 Cơ chế tạo bản sao trên mỗi zone.
Ở cấp độ nhỏ nhất, một zone có thể là một ổ đĩa đơn hay nhóm của một vài ổ đĩa.Nếu có năm object servers lưu trữ, thì mỗi máy chủ sẽ đại diện cho zone riêng của mình. Phát triển lớn hơn thì sẽ có một rack (hoặc nhiều rack) của object servers, mỗi rack đại diện cho một zone.Mục tiêu của zone là để cho phép các cluster chịu mất các object server quan trọng mà không bị mất tất cả các bản sao của dữ liệu.
Tất cả mọi thứ trong Swift được lưu giữ, theo mặc định là ba bản sao.Swift sẽ đặt mỗi bản sao "như là duy nhất" để vừa đảm bảo tính sẵn sàng cao và độ bền cao. Điều này có nghĩa là khi lựa chọn một vị trí bản sao, Swift sẽ lựa chọn một máy chủ trong khu vực không sử dụng, và trong khu vực đó đã có một bản sao của dữ liệu.
Object Server.
Server Object là một khối lưu trữ server mà có thể lưu trữ, truy xuất và xóa các đối tượng được lưu trữ trên các thiết bị địa phương.Đối tượng được lưu trữ như các tập tin nhị phân trên filesystem với siêu dữ liệu được lưu trữ trong các thuộc tính mở rộng của tập tin (xattrs).Điều này đòi hỏi: filesystem lựa chọn cho các object servers hỗ trợ xattrs trên các tập tin.Một số filesystem, như ext3, có xattrs tắt theo mặc định.
Mỗi đối tượng được lưu trữ bằng cách sử dụng một đường dẫn có nguồn gốc từ dữ liệu hỏng của tên đối tượng và dấu thời gian của hoạt động.Lần ghi cuối luôn thành công, và đảm bảo rằng đối tượng phiên bản mới nhất sẽ được phục vụ. Xóa là một version (thế hệ) của tập tin.Điều này đảm bảo rằng các tập tin đã xóa được nhân rộng một cách chính xác và các phiên bản cũ hơn không xuất hiện trở lại do các failure.
Partitions (phân vùng).
Phân vùng là một tập hợp các dữ liệu được lưu trữ, bao gồm databases account, databases Container, và các object được mô tả như hình 2.7.Phân vùng là cốt lõi để hệ thống sao chép.
Xem một phân vùng như là một thùng di chuyển qua một nhà kho trung tâm.Đơn đặt hàng riêng lẻ được đặt vào thùng.Hệ thống xử lý rằng thùng này như một thực thể gắn kết khi nó di chuyển trên toàn hệ thống.Một thùng đầy sẽ tiết kiệm được các pha hoạt động trên toàn hệ thống. Replication và update object hoạt động trên phân vùng.Khi hệ thống quy mô hơn, số lượng của phân vùng là một số cố định. Việc thực hiện các phân vùng là khái niệm rất đơn giản - một phân vùng chỉ là một thư mục trên một đĩa với một bảng băm tương ứng của những gì nó chứa.
34
Hình 2.7 Phân vùng Swift có chứa tất cả các dữ liệu trong hệ thống.
Replication (tạo bản sao).
Replication được thiết kế để giữ cho hệ thống trong một trạng thái ổn định khi đối mặt với các điều kiện lỗi tạm thời như mất mạng hoặc ổ đĩa thất bại.
Từ hình 2.8 thấy rằng các quá trình Replication so sánh local data với mỗi bản sao từ xa để đảm bảo tất cả Replication đều có chứa phiên bản mới nhất.Đối tượng sao chép sử dụng một danh sách để nhanh chóng so sánh các phần phụ của mỗi phân vùng.
Replication cũng đảm bảo việc dữ liệu được xóa khỏi hệ thống, khi một mục (object, container, hoặc account) bị xóa, thì tombstone được thiết lập như là phiên bản mới nhất của item đó.Replication cho thấy những tombstone và đảm bảo rằng mục đó đã được xóa khỏi toàn bộ hệ thống.
Hình 2.8 Quá trình phát hiện lỗi và tạo bản sao.
Nếu một Zone có dấu hiệu hỏng, một trong các nút có chứa bản sao sẽ thông báo và chủ động sao chép dữ liệu đến một địa điểm bàn giao.
Update (cập nhật).
Khi dữ liệu container hoặc account không thể được cập nhật ngay lập tức, điều này thường xảy ra trong các failure hoặc khoảng thời gian load lớn.Nếu bản cập nhật không thành công, cập nhật được xếp hàng đợi tại local trên filesystem, và update sẽ xử lý các bản update không thành công trước đó.Đây là nơi cuối cùng có khả năng đi
35
vào để hoạt động.Ví dụ: giả sử một container server tải và một object mới được đưa vào hệ thống.Các object ngay lập tức có sẵn cho lần đọc ngay sau khi các proxy server đáp ứng cho client.Tuy nhiên, các container server đã không cập nhật danh sách object, do đó, bản cập nhật sẽ được xếp hàng đợi cho một bản cập nhật sau đó.Vì thế danh sách Container có thể tại thời điểm đó không có các object mới được đưa vào hệ thống.
Auditors (Kiểm toán viên).
Auditors thu thập dữ liệu local server để kiểm tra tính toàn vẹn của các object, container, và account.Nếu sai xót được tìm thấy (trong trường hợp của bit lỗi) tập tin được cách ly, và replication sẽ thay thế các tập tin lỗi bằng bản sao khác.