Bài viết được sự cho phép của tác giả Kiên Nguyễn
Tiếp theo chuỗi về System Design và System Architecture, bài viết này giới thiệu với anh em về khái niệm Message Brokers. Khái niệm này cũng nằm trong nhóm bài viết về Large Scale Systems Architectural Building Blocks.
Tuần trước hay trước nữa gì đó là bài viết về API Gateway – Cần biết khi thiết kế hệ thống, anh em có nhu cầu cứ feel free ghé đọc nha.
Ok, bắt đầu thôi nào!
Xem thêm các việc làm MySQL hấp dẫn trên TopDev
1. Message Brokers là gì?
Applications ngày nay càng ngày càng lớn, càng ngày càng phức tạp. Thời gian và cách thức để giao tiếp giữa các Services lớn đã trở thành một bài toán lớn. Rất may ta đã có một solutions khá tốt tên Message Brokers.
Luôn bắt đầu với khái niệm loằng ngoằng lèo nghèo
A message broker is a piece of software, which enables services and applications to communicate with each other using messages. The message structure is formally defined and independent from the services that send them.
Message broker là một phần của phần mềm, cho phép services và applicaiton giao tiếp với nhau thông qua messages. Cấu trúc message thông thường được định nghĩa sẵn và nó động lập hoàn toàn khỏi services gửi nó.
Thêm nữa
This allows applications to share information with one another, even if they’re written in different programming languages!
Message Brokers còn cho phép ứng dụng chia sẻ thông tin với một cái khác, kể cả là 2 con services viết trên 2 ngôn ngữ lập trình khác nhau!
Rồi kèm thêm quả 3 khái niệm chất chơi Producer, Consumer và Queue/topic nữa. Loạn hết đầu, khó hiểu nhân đôi.
May thay ở Kieblog luôn có ví dụ cụ thể tận tình cho anh em.
2. Message Brokers Motivation
Trước khi bắt đầu với Message Brokers thì ta điểm xuyết qua tí về Load Balancer. Anh em nào chưa biết về Load Balancer có thể tham khảo bài này.
Rồi, bắt đầu với ví dụ, đầu tiên là
2.1 Synchronous Communication
Synchoronous là đồng bộ. Synchronous Communication nghĩa là giao tiếp đồng bộ. Sender và Receiver sẽ giao tiếp với nhau thông qua Direct Communication (kết nối trực tiếp).
Ngoài kết nối trực tiếp (Direct Communication), cũng có thể thông qua Load Balancer như hình dưới
Giao tiếp kiểu này thường yêu cầu cả Sender và Receiver đều phải work (healthy). Trường hợp một trong hai ngủm thì tính là ngủm.
2.2 Drawbacks
Trường hợp giao tiếp trực tiếp (Direct Communication), sẽ có yêu cầu cho cả 2 services
Both application instances have to remain healthy and maintain this connection to complete transaction
Cả hai application đều phải đảm bảo ổn và duy trì connection để có thể hoàn thành một transaction.
Cũng không có vấn đề gì phát sinh để ta phải dùng Message Brokers nếu cả hai services đều nhỏ, ít xử lí và cho thời gian phản hồi nhanh.
Nhưng đời không như là mơ, trường hợp receiver services xử lí cồng kềnh và tốn nhiều thời gian thì sao?
Nói là làm, ví dụ ngay và luôn cho anh em. Giả sử ta đang build một hệ thống xử lí vé (ticket), đã là vé thì có mua bán, có thanh toán online, có xử lí đặt chỗ.
Fullfilment Services sẽ thực thi nhiều actions, kiểm tra thẻ, thanh toán và gửi email thông báo thành công cho user. Nếu cả 3 thứ này đều tốn thời gian?
Bài toán đặt ra lúc này là user cần có response nhanh nhất?. Không thể chờ tới khi tất cả các services hoàn thành (giảm performance). Chính lúc này là lúc Message Brokers ra tay.
À tí quên, chưa kể là trường hợp có nhiều user truy cập cùng lúc và Services xử lí lần lượt từng request.
2.3 Message Brokers là gì?
Lý thuyết, không thể không đọc.
A software architectural building block that uses the queue data structure to store messages between sender and receiver
Kiến trúc phần mềm theo các khối sử dụng queue để lưu trữ message giữa người gửi là người nhận là Message Brokers
Tới đây đã rõ, Brokers có nghĩa là môi giới và siêu đúng trong trường hợp này. Đứng giữa sender và receicer để nhận messages, đem nó vào queue. Ngon
Đứng giữa hai thằng là ông Brokers, sender lúc này gửi request tới ông trung gian và có ngay kết quả. Đôi khi là ngay lập tức. Đặt hàng phát là có thông báo đặt hàng thành công luôn. Quá đã.
Sau khi đã done và Broker trả về cho Sender, lúc này Message Brokers mới giao tiếp thật sự với Receiver. Đi thực hiện nốt cho xong các công việc.
Với kiến trúc này, ta cũng có thể chia nhỏ các services với nhiều brokers
Tới đây là anh em hiểu hết rồi đúng không?. Giờ chuyển qua phần hấp dẫn không kém. Benefits
3. Message Brokers Benefits
Chính vì cơ chế đứng trung gian giữa Sender và Receiver nên:
Most message brokers implemetation offer the publish/subscrible pattern
Hầu hết các message brokers đều implement dựa trên publish/subscrible pattern.
- Publish messages to a particular channel (gửi tin nhắn tới một kênh cụ thể)
- Subscrible to that channel (đăng kí một kênh)
- Get notified when a new event is published (nhận thông báo khi có event mới được publish)
4. Message Capabalities
Về những thứ Message Brokers có thể làm, hoặc gọi chung là benefit đi. Bao gồm một số điểm sau:
- Storing/temporarily buffering the messages
- Message routing
- Transformation validation
Với message brokers, ta cũng có thể đăng kí với các services khác, thông báo tới end user khi một event nào đó đã hoàn thành.
4.1 Fault Tolerance
Khả năng chịu lỗi là điểm đáng ghờm mà Mesage Brokers đem lại.
It allows different services to communicate with each other white some of them maybe unavailable temporarily
Nó cho phép các services khác nhau giao tiếp với nhau trong khi một trong số chúng đã ngủm củ tỏi
Thua, vậy lại chả tăng tính chịu lỗi, hàng không có nhưng anh brokers môi giới đã cho đặt luôn rồi.
4.2 Availability và Scalabality
Tính sẵn sàng (availability) và tính mở rộng (scalabality) cũng là 2 điểm mà Mesage Brokers đem tới. Trường hợp có rất nhiều traffic, thanh niên môi giới này có thể trả về kết quả nhanh chóng, sau đó đi xử lí từ từ.
We pay a little in performance when it comes to latency
Tăng performance và giảm độ trễ của hệ thống
Tới đây mong anh em đã hiểu rõ về Message Brokers. Một số bài viết hay để ở tham khảo nha.
5. Tham khảo
- 5 use cases of message brokers.
- What are Message Brokers? | IBM
- Messaging that just works — RabbitMQ
My pleasure when you spend a time to read my post – Wish all the best for you and your family – Happy Coding!
Bài viết gốc được đăng tải tại kieblog.vn
Có thể bạn quan tâm:
- System Design Cơ Bản: Message Broker
- Message Queue VS Message Bus
- System Design Cơ Bản: Domain Name System (DNS)
Xem thêm các công việc ngành CNTT hấp dẫn trên TopDev