Dùng MOM để liên lạc giữa các thành phần chạy độc lập
Software Engineering
38
White

Ngoc Dao viết ngày 21/03/2016

Khi xây dựng hệ thống gồm nhiều thành phần chạy độc lập, có thể nằm cùng chương trình (thread), cùng máy tính (process), hoặc khác máy tính, người ta có nhu cầu làm sao để các thành phần nói chuyện được với nhau.

 

Lúc này, thường người ta dùng MOM, thành phần trung gian để các thành phần có thể truyền thông điệp cho nhau.

Bài viết này giới thiệu 2 giao thức MOM phổ biến hiện nay là XMPPAMQP.

Một trường hợp thường gặp làm nảy sinh nhu cầu dùng MOM nữa là khi hệ thống cần queue các job lại để xử lí dần dần, vì xử lí mỗi job mất nhiều thời gian. Ví dụ khi upload phim lên YouTube, YouTube không thể xử lí xong ngay lập tức, mà cần xếp phim này vào hàng để đợi đến lượt nó được xử lí. Thuật ngữ "xếp hàng" mang nghĩa xử lí tuần tự nên không phản ánh đúng MOM lắm, vì tùy dữ liệu mà có thể xử lí hàng này song song. Ví dụ có thể xử lí song song đơn đặt hàng của 2 khách hàng khác nhau. Do đó tùy trường hợp thay vì gọi là hàng đợi có thể gọi là kho chứa (backlog) để tránh hiểu lầm.

Tại sao cần giao thức?

Nếu các thành phần của hệ thống được viết bằng cùng ngôn ngữ, cùng nền tảng (ví dụ cùng hệ điều hành, cùng loại CPU để tránh vấn đề big endian little endian) v.v. thì truyền thông điệp giữa các thành phần là việc quá dễ: chỉ việc serialize thông điệp thành chuỗi kí tự rồi gửi đi, khi nhận được chỉ việc deserialize ngược lại. Có thể làm điều này với ngôn ngữ thấp như C chứ chưa nói đến các ngôn ngữ cao như Java, Ruby. Ngoài ra, mỗi ngôn ngữ đều có vài thư viện cho phép làm điều này dễ dàng, ví dụ Ruby có Sparrow.

Thế nhưng trên thực tế làm gì có hệ thống lớn nào lại đơn giản đến thế, lúc này cần có giao thức chung để các thành phần hiểu thông điệp của nhau. Có nhiều cách phân loại giao thức, ví dụ khi phân theo mức độ logic-vật lí thì ta có JMS (logic API) và AMQP (wire). Định dạng dữ liệu chỉ là một phần nhỏ của giao thức, còn các thứ khác như cách thức truyền dữ liệu.

Chỉ mới vài năm gần đây người ta mới có xu hướng dùng giao thức mở như XMPP và AMQP. Trước đó trong vòng vài chục năm cả thế giới (chủ yếu là các công ty tài chính) phải trả hàng năm cả tỉ $ cho vài đại gia đếm được trên đầu ngón tay, như IBM. Lí do là các đại gia này giấu giao thức, độc quyền ép cả thế giới phải dùng sản phẩm của họ, khách hàng khó mà chuyển cái đang dùng sang cái khác. Mà đã độc quyền thì hét giá bao nhiêu chả được. Thống trị chơi gác quá thì thể nào bị trị cũng nổi dậy. Ví dụ trường hợp của AMQP, công ty JPMorgan Chase & Co. nóng mặt nên đã tự nghiên cứu phát triển ra giao thức, rồi công bố mở cho cả thế giới.

Như vậy, có giao thức thì máy được lợi, có giao thức mở thì cả thế giới được lợi.

So sánh XMPP và AMQP

XMPP ra đời trước, thông điệp dựa trên XML. Ý tưởng căn bản của nó là nếu như con người có thể liên lạc với nhau tức thời bằng các chương trình chat, thì tại sao máy tính lại không thể nối với nhau theo cách tương tự?

AMQP ra đời sau, hỗ trợ thông điệp binary nên gọn nhẹ hơn XMPP.

Nói chung, khi hệ thống liên quan đến con người như chat chit thì nên dùng XMPP, còn khi hệ thống chỉ liên quan giữa máy với nhau thì nên dùng AMQP. Hai implementation của XMPP và AMQP nổi tiếng viết bằng Erlang là ejabberdRabbitMQ.

Đọc thêm

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
300 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
66 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 2 năm trước
66 8
White
42 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
42 1
White
38 2
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
38 2
Bài viết liên quan
White
1 1
Lập trình đôi (pair programming) là hình thức lập trình trong đó 2 người cùng hợp tác làm việc trên cùng màn hình (có thể khác bàn phím v.v.). Bài ...
Ngoc Dao viết hơn 2 năm trước
1 1
White
31 4
Như thường lệ, là chuyên mục quảng cáo, bài viết được đăng lại từ https://thefullsnack.com/posts/frameworkorlibrary.html Hôm nay mình nghe podca...
Huy Trần viết 28 ngày trước
31 4
White
7 1
Trong quyển sách Beyond Java, xuất bản vài năm trước có đoạn:Java has characteristics that many of us take for granted. You can find good Java deve...
Ngoc Dao viết hơn 2 năm trước
7 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
300 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!