Giới thiệu giao thức truyền thông điệp/giao tiếp nâng cao AMQP 

Ngày nay, các thiết bị IoT không còn xa lạ mà đang dần trở thành những vật dụng quen thuộc trong cuộc sống hằng ngày của con người. Sự dày đặc và phổ biến hơn của các thiết bị IoT đòi hỏi sự kết nối kịp thời, chính xác và ổn định trong một mạng đồng nhất. Mạng này còn cần một sự điều phối thống nhất trong nội bộ để trách các vấn đề liên quan đến tắc nghẽn hay quá tải. Đó là lí do các giao thức truyền thông tin cho thiết bị IoT được xây dựng và đưa vào thực tiễn.

Các giao thức truyền thông điệp cho thiết bị IoT được ưa chuộng hiện nay trên thế giới chủ yếu phát triển theo nguyên tắc “xuất bản – theo dõi” bởi nhiều ưu việt so với các giao thức truyền thống, có thể kể đến như MQTT, AMQP và DDS. Bài viết này sẽ giới thiệu về giao thức AMQP với nhưng ưu điểm được đánh giá cao và được nhiều nhà phát triển, nhà sản xuất thiết bị lựa chọn.

AMQP (Advanced Message Queue Protocol) là một giao thức với mong muốn thay thế các hệ thống truyền tin độc quyền, không có tính tương thích cao với mụch đích làm trung gian cho các gói tin trên lớp ứng dụng. AMQP vừa là một tiêu chuẩn mở lớp ứng dụng có tác dụng như một khung quy chuẩn đáng tin cậy về việc nhận, điều hướng và chuyển thông điệp, vừa được coi là giao thức dây (Wire protocol) giúp định hướng việc lấy dữ liệu/thông điệp từ các điểm khác nhau.

Các tính năng chính của AMQP là định hướng message, hàng đợi, định tuyến (bao gồm point-to-point và publish-subscribe) có độ tin cậy và bảo mật cao. Các hoạt động sẽ được thực hiện thông qua broker, broker cung cấp khả năng điều khiển luồng (Flow Control). AMQP cung cấp giao tiếp theo hướng tin nhắn được kiểm soát, với các đảm bảo gửi tin nhắn chẳng hạn như nhiều nhất một lần (trong đó mỗi tin nhắn được gửi một lần hoặc không bao giờ), ít nhất một lần (trong đó mỗi tin nhắn chắc chắn sẽ được gửi, nhưng có thể làm như vậy nhiều lần) và chính xác một lần (trong đó chắc chắn tin nhắn sẽ luôn đến và chỉ thực hiện một lần), và xác thực và(hoặc) mã hóa dựa trên SASL và(hoặc) TLS. AMQP giả định một giao thức lớp truyền tải đáng tin cậy cơ bản như Giao thức điều khiển truyền (TCP). Không giống như các giao thức khác, AMQP là một giao thức có dây (wire-protocol), có khả năng diễn tả các message phù hợp với định dạng dữ liệu, có thể triển khai với rất nhiều loại ngôn ngữ lập trình.

Một trong các Message Broker phổ biến là RabbitMQ, được lập trình bằng ngôn ngữ Erlang, RabbitMQ cung cấp cho lập trình viên một phương tiện trung gian để giao tiếp giữa nhiều thành phần trong một hệ thống lớn.

Về lịch sử hình thành và phát triển, AMQP được thành lập vào năm 2003 bởi John O'Hara tại JPMorgan Chase ở London. Giai đoạn đầu, AMQP là một nỗ lực của các tổ chức cá nhân nhằm xây dựng một giao thức chung cho các thiết bị IoT thời điểm bấy giờ để đồng nhất về cách thức truyền nhận thông điệp. AMQP cũng đã triển khai với Microsoft. Vào tháng 8 năm 2011, nhóm công tác AMQP đã thông báo tổ chức lại và trở thành một bộ phận thành viên của OASIS. Ngày 30 tháng 10 năm 2011, AMQP 1.0 được nhóm công tác giới thiệu tại một hội nghị ở New York và với sự công nhận của cộng cồng công nghệ toàn cầu tại hội nghị này. OASIS cũng ghi nhận điều này và sau các bản công bố trước đó cùng với các góp ý chỉnh sửa, AMQP được phê duyệt làm tiêu chuẩn vào ngày 31 tháng 10 năm 2012. Đến tháng 4 năm 2014, OASIS AMQP đã được phê duyệt để phát hành như một Tiêu chuẩn Quốc tế ISO và IEC với số ký hiệu ISO / IEC 19464.

Trước đó, AMQP có 4 phiên bản cũ là AMQP 0-8, AMQP 0-9, AMQP 0-10 và AMQP 0-9-1 nhưng hiện tại có chỉ có một phiên bản duy nhất được sử dụng là AMQP 1.0 với sự cập nhật kỹ thuật có nhiều khác biết đáng kể so với những phiên bản cũ.

Kiến trúc giao thức AMQP

AMQP là một giao thức chủ yếu được sử dụng cho phần mềm trung gian hướng tin nhắn. Một số tính năng ấn tượng mà nó cung cấp là định hướng nội dung, xếp hàng, độ tin cậy, bảo mật và định tuyến.

AMQP yêu cầu hành vi của người phát hành tin nhắn và người tiêu dùng tin nhắn để vận chuyển thông điệp liền mạch giữa các ứng dụng khác nhau do các nhà cung cấp khác nhau xây dựng bằng các ngôn ngữ lập trình khác nhau.

Một cách cụ thể, kiến trúc AMQP gồm 3 hàng chờ, hàng đầu tiên là từ các client sản xuất nội dung, các thiết bị cảm biến nói chung tạo ra các thông điệp đẩy vào một server đã được đăng ký. Server này là một “hộp Broker để phân chia thông điệp”, hàng đầu tiên sẽ đẩy thông điệp này và hàng chờ định tuyến và phân loại nội dung theo kênh. Sau đó hàng chờ định tuyến sắp xếp nội dung phù hợp với kênh và đưa vào hàng chờ kho xếp hàng, các nôi dung được sắp xếp một cách có thự tự và có quy tắc theo thời gian thực và nội dung tương thích của kênh. Tại hàng chờ cuối, “hộp Broker” sẽ chuyển nội dung đến client có nhu cầu về nội dung kênh theo đăng ký tại một hàng chờ cụ thể.

Hình 1: Kiến trúc giao thức AMQP

Một cách tổng quát hơn, AMQP gồm 3 thành phần chính là bên tạo nội dung, trung tâm phân chia thông điệp (Borker), định tuyến nội dung và bên tiêu thụ nội dung.

Các khái niệm trong AMQP

- Kiến trúc hàng chờ nội dung: Tất cả các nôi dung được tạo bởi ứng dụng sản xuất nội dung và được đẩy vào hàng chờ. Quá trình này được gọi là “Enqueue”. Các nôi dung được đẩy sẽ ở trong hàng đợi này cho đến khi ứng dụng tiêu thụ kết nối và tìm nạp nôi dung này. Quá trình này được gọi là “Dequeue”. Cả quy trình “Enqueue” và “Dequeue” đều được thực hiện độc lập bởi các ứng dụng sản xuất và tiêu thụ và do tính chất độc lập của nhà sản xuất và người tiêu dùng, giao thức AMQP có tùy chọn để giữ một nội dung trong hàng đợi tin nhắn, đợi bên tiêu thụ tìm nạp nó.

- Sắp xếp nội dung: Là sự sắp xếp các nội dung tại kho tạo điều kiện giao tiếp hiệu quả giữa các ứng dụng. Nó cũng đóng vai trò là nơi lưu trữ tạm thời cho các nội dung bằng cách lưu trữ chúng trong khi ứng dụng đích đang bận hoặc không được kết nối.

- Các nhà môi giới nội dung: Được hiểu là phần ở giữa của chu trình, cũng là bên sở hữu Broker, họ chăm sóc các kết nối giữa các ứng dụng. Dựa trên yêu cầu, một kết nối hai chiều sẽ được tạo giữa mỗi hệ thống ứng dụng và tạo môi giới thông báo. Sau đó, thông điệp được chuyển qua kết nối này. Các nhà môi giới thông điệp hoạt động như một trung tâm để định tuyến các nội dung thích hợp đến các điểm đến thích hợp. Tóm lại, một Message Broker định tuyến các tin nhắn thích hợp đến các đích thích hợp của họ, tương tự như cách hoạt động của văn phòng chuyển mạch điện thoại.

- RabbitMQ: được coi là nhà môi giới nội dung, bên tạo trung tâm phân loại nội dung chính khi muốn sử dụng giao thức AMQP, AMQP là giao thức cốt lõi của RabbitMQ nhưng tất nhiên cũng hộ trợ các giao thức khác như STORM, MQTT và HTTP.

Biểu diễn thông điệp và liên kết trong giao thức

Khung (flame) là đơn vị cơ bản cho dữ liệu/thông điệp chạy trong giao thức AMQP, một khung có 9 thành phần được định nghĩa nhằm tạo ra một vòng di chuyển tuần tự từ lúc khởi tạo thông điệp, điền khiển qua các hàng chờ thông điệp, kênh truyền, hàng chờ kho và loại bỏ thông điệp khi không yêu cầu. 9 thành phần của Khung là: mở (kết nối), bắt đầu (phiên làm việc), đính kèm (liên kết), chuyển tiếp, lưu lượng, sắp xếp, tách ra (liên kết), kết thúc (phiên làm việc), đóng (kết nối).

Thành phần “đính kèm” và “tách ra” nằm ở trung tâm của quá trình trong giao thức AMQP, ở trong khối xử lý trung tâm, trung tâm phân chia thông điệp (Borker). Hai thành phần này có vai trò thiết lập lệnh nhận và gửi thông điệp vào hàng chờ phù hợp. Các thông điệp được gửi đến các thành phần liên kết đã thiết lập với thành phần “chuyển tiếp”.

Các thông điệp được chuyển tiếp trong khung theo một chiều duy nhất. Việc thực hiện chuyển tiếp phải tuân theo lưu lượng tại thời điểm đó của hàng chờ, thành phần “lưu lượng” có vai trò quản lý luồng phù hợp của thông điệp trong khung ổn định và đúng như lệnh từ thành phần liên kết trước đó. Đây là nguyên tắc bắt buộc có tính hiệu quả cao trong việc đảm bảo tính ổn định của một khung, chống tắc nghẽn, tất công từ chối dịch vụ DDOS.

Do khung cũng tuân theo quy trình “Enqueue” và “Dequeue” của giao thức nên thông điệp cuối cùng trong khung sẽ luôn phải được xử lý đến cùng. Điều này đảm bảo độ tin cậy rằng khi có một lên yêu cầu thông điệp và bên sản xuất đã gửi thông điệp thì chắc chắn rằng thông điệp phải được chuyển tiếp đến hoàn chỉnh.

Khi khung có sự thay đổi trạng thái và việc chuyển tiếp trong khung thì giao thức sẽ thực hiện “khung chỉnh đốn” phù hợp. Các mức độ đảm bảo độ tin cậy có thể thực hiện phù hợp với từng vấn đề, cụ thể là kiểm tra và thông báo nhiều nhất một lần, kiểm tra và thông báo ít nhất một lần, kiểm tra và thông báo chính xác một lần.

Nhiều liên kết, trong nhiều khung có thể được xếp vào cùng một phiên làm việc, phiên làm việc là quá trình trao đổi song song giữa cả bên cung cấp và tiêu thụ nội dung và được thực hiện tuần tự từ thành phần “bắt đầu” đến “kết thúc” của phiên làm việc. Các phiên làm việc độc lập về mặt logic, hai bên có thể có nhiều phiên làm việc với nhau.

Kết nối giữa các bên là bắt đầu khung với thành phần “mở” kết nối và tuần tự hoàn thành đến thành phần “đóng” kết nối.

Định dạng cho thông điệp giữa các bên

Giao thức AMQP định nghĩa rằng thông điệp luôn có phần thông điệp trần được tạo ra bởi bên cung cấp nội dung. Điều này được coi là bất biến vì thông điệp được chuyển tiếp trong một hoặc nhiều quy trình.

Thông điệp thực hiện giao thức AMQP sẽ được cho phép ký và/hoặc mã hóa E2E (end to end) nhằm đảm bảo tính toàn vẹn giữ nguyên giá trị của thông điệp được cung cấp. Thông điệp có thể được chú thích bởi một bên trung gian trong quá trình chuyển tiếp, các chú thích này sẽ riêng biệt, không được ghi đè, ghi chèn và tách biệt với phần thông điệp trần của bên cung cấp nội dung. Phần chú thích có thể được thêm trước hoặc sau phần thông điệp trần.

Phần tiêu đề (header) của thông điệp là một bộ tiêu chuẩn đi kèm với duy nhất một thông điệp bao gồm, thời gian tồn tại của thông điệp, tính ổn định, các ưu tiên.

Phần nội dung thông điệp trần được cấu trúc gồm một danh sách các thông tin thuộc tính của thông điệp (id thông điệp, id người tạo, thời gian tạo, trả lời, chủ đề, id tương quan, id chủ đề, …), một danh sách tùy chọn các thuộc tính dành riêng cho ứng dụng (tức là các thuộc tính mở rộng) và phần thân (được coi là dữ liệu chính của thông điệp được định nghĩa theo AMQP). Các thuộc tính này được lựa chọn trong hệ thống nhóm của AMQP, bao gồm cả chú thích.

Dữ liệu chính của thông điệp có thể ở bất cứ dạng nào, mã hóa bởi bất cứ kiểu mã hóa nào mà bên sản xuất nội dung lựa chọn. AMQP cũng cho phép định dạng và gửi các dữ liệu theo một quy tắc, cấu trúc, mô tả nhất định. Tất cả phụ thuộc vào nhu cầu người dùng.

Các tính năng của đặc tả giao thức AMQP

Đặc tả giao thức AMQP được xây dựng nhằm hệ thống hóa rõ ràng các hành vi được thực hiện trên một hệ thống từ bên sản xuất, trung tâm phân loại nội dung và bên tiêu thụ nội dung.

Đặc tả giao thức AMQP chuẩn hóa quá trình chuyển tiếp, cho phép bên tiêu thu nội dung chấp nhận hoặc từ chối nhận thông điệp. Đặc tả giao thức cũng được xây dựng với khả năng xác định và chống sao chép, tức là hệ thống có chế độ phân phối để chỉ ra các nội dung thông điệp trùng lặp, bắt trước các thông điệp trước đó và thông báo cho bên tiêu thụ nội dung.

Đặc tả giao thức AMQP cũng cho phép tạo ra thêm hàng chờ phản hồi, phù hợp cho việc phân loại đúng nội dung, nội dung thông điệp phù hợp cho bên tiêu thụ nội dung. Bên cạnh đó đặc tả cũng có bộ lọc để bên tiêu thụ nội dung chọn lọc và nhận nội dung thông điệp phù hợp.

Kết luận

Trong bài viết này, giao thức truyền thông điệp/giao tiếp AMQP được giới thiệu đến người đọc từ giới thiệu chung đến các thông tin kỹ thuật chi tiết để có thể triển khai AMQP thực tế hiện nay. AMQP là không chỉ là giao thức mở rộng cho thiết bị IoT mà còn là hình mẫu lý tưởng cho các mô hình phân chia sắp xếp nội dung, thông điệp, yêu cầu hiện nay với các ưu điểm về sự toàn vẹn, rõ ràng, bảo mật, chống tắc nghẽn. Đây là một giao thức nên được phổ biến tại Việt Nam để triển khai thực tiễn trong nhiều lĩnh vực hiện nay dù chỉ là học tập mô hình hoặc, thuê dịch vụ, thuê trung tâm phân loại nội dung.

Thông qua việc giới thiệu giao thức này, bài đọc đưa ra các cơ sở tri thức để áp dụng phát triển hạ tầng Internet vạn vật (IoT) phục vụ các ứng dụng nghiệp vụ, chuyên môn trong chính phủ điện tử hiện nay. Hi vọng trong tương lai có thể thấy các ứng dụng triển khai AMQP phục vụ người dân và cơ quan nhà nước trong khuôn khổ chính phủ điện tử của Việt Nam.

Vũ Cao Minh Đức

Tài liệu tham khảo

  1. OASIS Advanced Message Queuing Protocol (AMQP) Version 0, OASIS Standard, 29th October 2012.
  2. ISO/IEC 19464:2014, Information technology — Advanced Message Queuing Protocol (AMQP) v1.0 specification.
1070 Go top

Sự kiện nổi bật

Ý kiến về Trang thông tin điện tử Cục Tin học hóa?
1. Đạt yêu cầu, 1180 phiếu (88 %)
2. Chưa đạt yêu cầu, 107 phiếu (8 %)
3. Cần thêm chủ đề, 57 phiếu (4 %)
Tổng số phiếu: 1344
THÔNG KÊ TRUY CẬP
  • Người trực tuyến Người trực tuyến
    • Khách Khách 37
    • Thành viên Thành viên 0
    • Tổng Tổng 37
    • Tổng lượt truy cập: Tổng lượt truy cập: 18945538