4.4.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 công nghệ khác nhau và dễ dàng mở rộng theo nhu cầu lưu thông.
Hình 4.20 – Các thao tác với message.
Trong kịch bản điển hình, nhiều thể hiện Web role đang chạy, mỗi thể hiện nhận công việc từ người dùng (bước 1). Để đẩy công việc đến thể hiện Worker role, một thể hiện Web role viết một message vào queue(bước 2). Message này, chứa tối đa 8KB, có thể chứa đường dẫn URI đến một blob hoặc một entity trong table hoặc những nội dung khác. Thể hiện Worker role đọc message từ queue này (bước 3). Sau đó thực hiện công việc mà queue yêu cầu. Khi thể hiện Worker role đã hoàn thành công việc message yêu cầu, nó phải xóa hẳn message từ queue (bước 5).
Kiến trúc này có nhiều thuận lợi, bởi vì: - Có khả năng mở rộng
• Ứng dụng có thể mở rộng một cách dễ dàng theo nhu cầu lưu thông.
• Số lượng web role và số lượng worker role được điều chỉnh độc lập mà không ảnh hưởng đến logic ứng dụng.
• Một queue riêng biệt có thể được sử dụng cho các mục công việc theo độ ưu tiên khác nhau.
• Các thành phần khác nhau của ứng dụng được tách rời do sử dụng queue. Các message trong queue theo định dạng chuẩn và mở rộng, ví dụ như XML, để các thành phần giao tiếp ở cả hai đầu của queue không có sự phụ thuộc lẫn nhau miễn là họ có thể hiểu được các thông điệp trong queue.
• Các công nghệ và ngôn ngữ lập trình khác nhau có thể được sử dụng để thực thi các phần khác nhau của hệ thống. Hơn nữa, những thay đổi trong một thành phần là trong suốt với phần còn lại của hệ thống.
• Hơn nữa, việc sử dụng queue cũng làm giảm nhẹ các ảnh hưởng khi một thành phần riêng lẻ bị lỗi. Trong ví dụ trên, nếu một vài thể hiện worker role bị sụp đổ, thay vì mất tất cả các mục công việc, queue có thể làm bộ nhớ đệm cho tất cả các mục công việc. Khi thể hiện worker role được phục hồi, chúng có thể tiếp tục xử lí các mục công việc trong queue. Nên nhớ rằng các mục công việc đang được xử lí bởi worker role cũng không bị mất, chúng được xuất hiện trở lại trong queue sau thời gian VisibilityTimeout do đó đảm bảo không mất dữ liệu khi các thành phần xảy ra lỗi.