Tìm hiểu về Message Oriented Middleware (MOM) và RabbitMQ?

18 245 0
Tìm hiểu về Message Oriented Middleware (MOM) và RabbitMQ?

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ BÁO CÁO BÀI TẬP LỚN SỐ 2: Nhóm: Trần Thu Phương - 17021321 Nguyễn Tuấn Quốc - 17021326 Nguyễn Minh Quân – 17021325 Đề tài: Tìm hiểu Message Oriented Middleware (MOM) RabbitMQ? I MESSAGE ORIENTED MIDDLEWARE (MOM) Giới thiệu Message Oriented Middleware Một phương thức dựa chế gửi thông điệp không đồng - asynchronous message, tức máy khách gửi yêu cầu tới máy chủ mà không cần chờ kết phản hồi từ máy chủ Trong phương thức này, ứng dụng không tương tác trực tiếp với nhau, mà chúng tương tác gián tiếp thông qua hàng đợi Một hàng đợi tập hợp thơng điệp chia sẻ với nhiều máy tính Những đoạn mã xây dựng để kết nối gọi Message-oriented middleware (MOM) Hàng đợi nơi để thực mơ hình tương tác không đồng MOM Một hàng đợi tập hợp thơng điệp gửi đến nhận, thông thường thông điệp hàng đợi xếp theo thứ tự cụ thể Hàng đợi tiêu chuẩn tìm thấy hệ thống gửi thông điệp First-In First-Out (FIFO); tên cho thấy, thông điệp gửi đến hàng đợi thông điệp lấy từ hàng đợi MOM có loại Message queueing Message passing Message queueing mơ hình truyền thơng gián tiếp thơng qua hàng đợi Message passing mơ hình truyền thơng trực tiếp hai tiến trình Tuy nhiên, MOM hỗ trợ mơ hình truyền thông này, thuật ngữ MOM, hay Message Queueing System, Messaging – Queueing System hiểu chung nghĩa Để cho ngắn gọn, ta sử dụng cụm từ hệ thống messaging để hệ thống này, công nghệ messaging để công nghệ phát triển ứng dụng dựa hệ thống Messaging Các hệ thống MOM cung cấp truyền thông phân tán sở mơ hình tương tác khơng đồng Mơ hình cho phép MOM giải nhiều hạn chế RPC Người tham gia hệ thống dựa MOM không bắt buộc phải chặn chờ đợi thông điệp gửi, họ phép tiếp tục xử lý thông điệp gửi Điều cho phép gửi thông điệp người gửi người nhận không hoạt động có sẵn để trả lời thời điểm thực MOM trái ngược với chế RPC hay RMI MOM hỗ trợ thơng điệp vài phút để truyền RPC hay RMI phần nghìn giây giây để gửi Mơ hình truyền thơng MOM Truyền thông MOM thực việc sử dụng thông điệp, thông điệp gửi nhận theo chế đồng thông qua hàng chờ/queue Các thơng điệp phải gửi đến đích mong muốn chưa đến đích MOM thực gửi lại MOM có chế điều phối thơng điệp giảm thiểu vấn đề tải server Một số công nghệ phổ biến xây dựng kiến trúc MOM là: IBM MQ, Java Messaging Service, MS MQ,… Một số tính chất MOM • Coupling MOM cung cấp layer người gửi người nhận, cho phép người gửi người nhận message sử dụng lớp độc lập làm trung gian để trao đổi thơng điệp Lợi ích MOM kết hợp lỏng lẻo người tham gia hệ thống - khả liên kết ứng dụng mà điều chỉnh hệ thống nguồn hệ thống đích với nhau, dẫn đến việc triển khai hệ thống tách rời, gắn kết cao • Reliability Việc xảy lỗi thông điệp qua network hệ thống MOM ngăn chặn cách sử dụng chế lưu trữ chuyển tiếp để trì thơng báo Khả MOM cho thấy mức độ tin cậy cao vào chế phận hệ thống không khả dụng bận Mức độ tin cậy cụ thể thường cấu hình, hệ thống gửi thơng điệp MOM đảm bảo thông điệp gửi gửi đến người nhận lần theo dự định • Scalability Các hệ thống MOM tách rời cách độc lập, khơng có ảnh hưởng đến gián đoạn hệ thống khác Các mơ hình gửi messgae MOM chứa số đặc điểm tự nhiên, cho phép cân tải đơn giản hiệu quả, cách cho phép hệ thống chọn chấp nhận thơng điệp sẵn sàng thực thay buộc phải chấp nhận Các tảng MOM cấp doanh nghiệp đại sử dụng làm xương sống để tạo hệ thống có khả mở rộng quy mô với hỗ trợ xử lý 16,2 triệu truy vấn đồng thời 270.000 yêu cầu đặt hàng • Availability MOM sẵn sàng cho phép hệ thống vận hành liên tục xử lý cố khiến hệ thống không mượt Sự thất bại hệ thống không gây lỗi tồn hệ thống MOM cải thiện thời gian phản hồi hệ thống việc “loose coupling” thành phần tham gia MOM Điều giúp giảm thời gian hồn thành tiến trình cải thiện khả đáp ứng tính sẵn sàng tồn hệ thống Các thành phần MOM • Hàng đợi/Kênh (Queues/Chanels): sử dụng để truyền liệu Có hai loại hàng đợi: ▪ Point-to-point: điểm nhận nhận thông điệp Hàng đợi Point-to-point ▪ Push and Subscribe: thông điệp gửi tới tất subscriber Mỗi subscriber lưu thông điệp pushlisher không quan tâm tới lắng nghe Hàng đợi Push and Subcribe • Thơng điệp (Message): đóng gói liệu (function) cần trao đổi client server Thơng điệp bao gồm: • ▪ Header: định nghĩa thông điệp thông tin điều khiển ▪ Body: chứa thông tin xử lý ứng dụng nhận thông điệp Điểm kết thúc (EndPoints): điểm cho phép client/server kết nối với MOM để gửi hay nhận thông điệp Ưu điểm, nhược điểm MOM • Ưu điểm: ▪ Nâng cao tính mở rộng hệ thống tích hợp ▪ Tương tác bất đồng bộ: client/server không bị ràng buộc chặt chẽ, thông điệp đặt vào hàng đợi Các tính chất tốt cho việc tích hợp ứng dụng ▪ Hỗ trợ dịch vụ truyền tin cậy, MOM giữ hàng đợi kho chứa ▪ Xử lý thông điệp server thông điệp trung gian Có chế lọc, chuyển đổi, lưu vết,… • Nhược điểm: ▪ Sử dụng nhiều MOM lúc dẫn tới khơng đồng giao thức không đồng (HTTP HTTPS); định dạng thơng điệp khơng đồng ▪ Có ứng dụng cần chế gọi hàm đồng không đồng 5 Một vài MOM services phổ biến 5.1 Message Filtering Message Filtering cho phép người nhận tin chọn lọc thông điệp mà họ nhận từ kênh Filtering hoạt động số cấp độ khác Các filters sử dụng biểu thức logic Boolean để khai báo thơng điệp quan tâm đến Client, định dạng xác biểu thức phụ thuộc vào implementation mệnh đề WHERE SQL-92 (hoặc tập hợp con) thường sử dụng làm cú pháp Các mơ hình lọc thường hoạt động thuộc tính (cặp tên / giá trị) tin nhắn; nhiên, số projects mở rộng tính lọc message payloads Vì có số khả lọc tìm thấy hệ thống gửi message, nên hữu ích để ghi lại mà kỹ thuật lọc ngày tiên tiến, chúng chép kỹ thuật thực chúng Ví dụ: lọc dựa chủ đề chép lọc dựa kênh, giống lọc dựa nội dung chép lọc theo chủ đề lọc dựa kênh 5.2 Transactions Tài nguyên kho lưu trữ liệu liên tục tham gia vào transaction cập nhật MOM có khả bao gồm thông điệp gửi nhận transaction Khi kiểm tra khía cạnh giao dịch hệ thống gửi thông điệp, điều quan trọng cần nhớ message MOM thực thể độc lập tự chủ Trong message tên miền, có hai loại giao dịch phổ biến Local Transactions Global Transactions Các Local Transactions diễn trình quản lý tài nguyên nhà môi giới gửi message Global Transactions liên quan đến nhiều, có khả phân phối người quản lý tài nguyên không đồng với người quản lý giao dịch bên điều phối giao dịch 5.3 Guaranteed Message Delivery Để tảng MOM đảm bảo việc gửi thông điệp, tảng phải lưu tất thông điệp cửa hàng không dễ biến đổi đĩa cứng Nền tảng sau gửi thơng điệp đến người tiêu dùng chờ người tiêu dùng xác nhận việc gửi Nếu người tiêu dùng không chấp thuận message khoảng thời gian hợp lý, máy chủ gửi lại message Khi người tiêu dùng nhận message, báo cáo tiêu thụ (biên lai) tạo gửi đến người gửi message để xác nhận mức tiêu thụ message 5.4 Message Formats Tùy thuộc vào việc implement MOM, số định dạng message có sẵn cho người dùng Một số loại thông báo phổ biến bao gồm: Text (including XML), Object, Stream, HashMaps, Streaming Multimedia,… Các nhà cung cấp MOM cung cấp chế để chuyển đổi định dạng message sang định dạng khác để chuyển đổi / thay đổi định dạng tải trọng thư; số MOM implementation cho phép chuyển đổi XSL thực tải trọng thông báo XML II RABBITMQ RabbitMQ gì? RabbitMQ message broker ( Message-Oriented Middleware) sử dụng giao thức AMQP(Advanced Message Queue Protocol - Giao thức giao nhận tin nhắn sử dụng hàng đợi) Đây chương trình đóng vai trị trung gian lưu trữ điều phối yêu cầu (message) người nhận (consumer) người gửi (producer) RabbitMQ lập trình ngơn ngữ Erlang RabbitMQ cung cấp cho lập trình viên phương tiện trung gian để giao tiếp nhiều thành phần hệ thống lớn RabbitMQ nhận message đến từ thành phần khác hệ thống, lưu trữ chúng an toàn trước đẩy đến đích 2 AMQP gì? AMQP(Advanced Message Queue Protocol - Giao thức giao nhận tin nhắn sử dụng hàng đợi) giao thức làm trung gian cho gói tin lớp ứng dụng với mục đích thay hệ thống truyền tin độc quyền không tương thích Các tính AMQP định hướng message, hàng đợi, định tuyến (bao gồm point-to-point publish-subscribe) có độ tin cậy bảo mật cao Các hoạt động thực thơng qua broker, cung cấp khả điều khiển luồng (Flow Control) Một Message Broker phổ biến RabbitMQ, lập trình ngơn ngữ Erlang, RabbitMQ cung cấp cho lập trình viên phương tiện trung gian để giao tiếp nhiều thành phần hệ thống lớn Không giống giao thức khác, AMQP giao thức có dây (wire-protocol), có khả diễn tả message phù hợp với định dạng liệu, triển khai với nhiều loại ngơn ngữ lập trình Tại sử dụng RabbitMQ? • Vấn đề Đối với hệ thống sử dụng kiến trúc microservice việc gọi chéo service nhiều, khiến cho luồng xử lý phức tạp Mức độ trao đổi data thành phần tăng lên khiến cho việc lập trình trở nên khó khăn hơn(vấn đề maintain đau đầu) Khi phát triển ứng dụng để lập trình viên tập trung vào domain, business logic thay cơng việc trao đổi tầng infrastructure Với hệ thống phân tán, việc giao tiếp thành phần với đòi hỏi chúng cần phải biết Nhưng điều gây rắc rối cho việc viết code Một thành phần phải biết nhiều đâm khó maintain, debug • Lợi ích Một producer khơng cần phải biết consumer Nó việc gửi message đến queue message broker Consumer việc đăng ký nhận message từ queue Vì producer giao tiếp với consumer trung gian qua message broker nên dù producer consumer có khác biệt ngơn ngữ giao tiếp thành cơng.(Hiện rabbitmq hỗ trợ nhiều ngôn ngữ khác nhau) Một đặc tính rabbitmq bất đồng bộ(asynchronous) Producer khơng thể biết message đến consumer hay message consumer xử lý xong Đối với producer, đẩy message đến message broker xong việc Consumer lấy message muốn Đặc tính tận dụng để xây dựng hệ thống lưu trữ xử lý log Bên cạnh lợi ích kể trên, RabbitMQ cịn có nhiều tính thú vị khác như: ▪ Cluster: bạn gom nhiều RabbitMQ instance vào cluster Một queue định nghĩa instance truy xuất từ instance cịn lại Có thể tận dụng để làm load balancing ▪ High availibilty: cho phép failover sử dụng mirror queue ▪ Reliability: có chế ack để đảm bảo message nhận consumer xử lý 4 Mơ hình hoạt động RabbitMQ Step 1: Producer đẩy message vào exchange Khi tạo exchange, bạn phải mơ tả thuộc loại Các loại exchange giải thích phía Step 2: Sau exchange nhận message, chịu trách nhiệm định tuyến message Exchange chịu trách thuộc tính message, ví dụ routing key, phụ thuộc loại exchange Step 3: Việc binding phải tạo từ exchange đến hàng đợi Trong trường hợp này, ta có hai binding đến hai hàng đợi khác từ exchange Exchange định tuyến message vào hàng đợi dựa thuộc tính của message Step 4: Các message nằm hàng đợi đến chúng xử lý consumer Step 5: Consumer xử lý message queue 5 Exchange loại Exchange RabbitMQ Exchange thực thể AMQP nơi mà message gửi Các exchange lấy message định tuyến tới hàng đợi Thuật toán định tuyến dùng phụ thuộc vào loại exchange luật gọi bindings Có loại Exchange: direct, topic, fanout, headers 5.1 Direct Exchange Một Direct Exchange đẩy message đến hàng đợi dựa theo khóa định tuyến - routing key Routing key thuộc thuộc tính mesage thêm vào message header từ producer Routing key xem địa mà Exchange sử dụng để định tuyến messages A message goes to the queue(s) whose binding key exactly matches the routing key of the message Direct Exchange sử dụng trường hợp bạn muốn phân biệt messages published cho Exchange cách sử dụng chuỗi định danh đơn giản Tên khai báo mặc định AMQP brokers cung cấp cho Direct Exchange “amq.direct” Ví dụ: Một message với routing key pdf_log gửi từ exchange pdf_events Message định tuyến tới pdf_log_queue outing key (pdf_log) khớp với binding key (pdf_log) Nếu message routing key không khớp với binding key bị hủy bỏ • Default Exchange Mỗi Exchange đặt tên không trùng nhau, Default Exchange Direct Exchange tên (thường biểu diễn chuỗi rỗng "") Khi sử dụng Default Exchange, message bạn gửi đến queue có tên Routing key message Tất queue tự động liên kết với Default Exchange kèm với Routing key giống tên queue Ví dụ: Nếu bạn tạo queue với tên "hello-world", RabbitMQ broker tự động binding default exchange đến queue "hello-word" với routing key "hello-world" 5.2 Fanout Exchange Một Fanout Exchange copy message đẩy message đến tồn hàng đợi gắn với Nó bỏ qua routing key pattern đăng ký Fanout Exchange dùng trường hợp nhiều message gửi tới nhiều queue với nhiều consumer xử lý message theo nhiều cách khác Tên khai báo mặc định AMQP brokers cung cấp cho Fanout Exchange “amq.fanout” 5.3 Topic Exchange Topic Exchange định tuyến messages tới queue đối chiếu, đối sánh ký tự (wildcard matches) Routing key Routing pattern định queue binding Message định tuyến tới nhiều queue khớp Routing key message Routing pattern Routing key phải danh sách từ (a list of words) phân cách dấu chấm (.) ví dụ “agreements.us” “agreements.eu.stockholm” trường hợp xác định thỏa thuận thiết lập cho cơng ty có văn phịng nhiều địa điểm khác Routing pattern chứa dấu hoa thị (*) để thay từ vị trí cụ thể Routing key Ký tự thăng (#) thay khơng nhiều từ Ví dụ: booking.*.b -> Được đăng ký tất key bắt đầu booking bà kết thúc b booking.# -> Được đăng ký tất key booking bắt đầu với booking Consumers biểu diễn topic mà họ quan tâm đăng kí để có nguồn liệu cho thẻ riêng biệt Consumers tạo queue thiết lập binding với với Routing pattern Exchange Tất message với Routing key khớp với Routing pattern định tuyến đến queue đến consumers đến lấy message Topic Exchange sử dụng vài trường hợp: - Phân phối liệu liên quan đến vị trí địa lý cụ thể - Xử lý tác vụ thực nhiều workers, cơng việc có khả xử lý nhóm tác vụ cụ thể - Cập nhật tin tức liên quan đến phân loại gắn thẻ (ví dụ: dành cho môn thể thao đội cụ thể) - Điều phối dịch vụ loại khác cloud Tên khai báo mặc định AMQP brokers cung cấp cho Topic Exchange “amq.topic” 5.4 Headers Exchange Header Exchange thiết kế để định tuyến với nhiều thuộc tính, dễ dàng thực dạng tiêu đề message Routing key Header Exchange bỏ Routing key mà thay vào định tuyến dựa header message Trường hợp này, broker cần nhiều thông tin từ Developer, cụ thể là, nên quan tâm đến message với tiêu đề phù hợp tất chúng Tên khai báo mặc định AMQP brokers cung cấp cho Header Exchange RabbitMQ “amq.headers” • Dead Letter Exchange Nếu khơng tìm thấy queue phù hợp cho message, message tự động bị hủy RabbitMQ cung cấp tiện ích mở rộng AMQP gọi “Dead Letter Exchange” - Cung cấp chức để bắt message gửi III ỨNG DỤNG THỰC TẾ Ứng dụng Crawl Website sử dụng RabbitMQ Thông qua RabbitMQ tạo hệ thống xử lý phân tán Producer Consumer Consumer Consumer - Producer phân phát url cần crawl qua cho tất Consumer xử lý - Consumer xử lý url nhận, chưa tồn xử lý đẩy kết list url liên kết trả cho Producer -> Lặp lại vòng lặp xử lý xong tất url liên kết Producer Consumer gửi nhận message cách follow request_queue response_queue Kết xuất file record.txt

Ngày đăng: 10/07/2020, 03:28

Hình ảnh liên quan

truyền thông gián tiếp thông qua hàng đợi. Message passing là mô hình truyền thông trực tiếp giữa hai tiến trình - Tìm hiểu về Message Oriented Middleware (MOM) và RabbitMQ?

truy.

ền thông gián tiếp thông qua hàng đợi. Message passing là mô hình truyền thông trực tiếp giữa hai tiến trình Xem tại trang 2 của tài liệu.
MOM có 2 loại là Message queueing và Message passing. Message queueing là mô hình - Tìm hiểu về Message Oriented Middleware (MOM) và RabbitMQ?

c.

ó 2 loại là Message queueing và Message passing. Message queueing là mô hình Xem tại trang 2 của tài liệu.
4. Mô hình hoạt động của RabbitMQ - Tìm hiểu về Message Oriented Middleware (MOM) và RabbitMQ?

4..

Mô hình hoạt động của RabbitMQ Xem tại trang 10 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan