Hiểu các nhà môi giới tin nhắn. Tìm hiểu cơ chế nhắn tin với ActiveMQ và Kafka. Chương 1

Xin chào tất cả mọi người!

Bắt đầu dịch một cuốn sách nhỏ:
«Hiểu các nhà môi giới tin nhắn",
tác giả: Jakub Korab, nhà xuất bản: O'Reilly Media, Inc., ngày xuất bản: tháng 2017 năm 9781492049296, ISBN: XNUMX.

Từ lời giới thiệu cho cuốn sách:
" ... Cuốn sách này sẽ hướng dẫn bạn cách suy nghĩ về các hệ thống nhắn tin môi giới bằng cách so sánh và đối chiếu hai công nghệ môi giới phổ biến: Apache ActiveMQ và Apache Kafka. Nó sẽ phác thảo các trường hợp sử dụng và các khuyến khích phát triển đã khiến các nhà phát triển của họ thực hiện các cách tiếp cận rất khác nhau đối với cùng một lĩnh vực nhắn tin được môi giới giữa các hệ thống. Chúng ta sẽ xem xét các công nghệ này từ đầu và làm nổi bật tác động của các lựa chọn thiết kế khác nhau trong quá trình thực hiện. Bạn sẽ hiểu sâu hơn về cả hai sản phẩm, hiểu cách chúng nên và không nên được sử dụng cũng như hiểu những điều cần chú ý khi xem xét các công nghệ nhắn tin khác trong tương lai. ... "

Các phần đã dịch cho đến nay:
Chương 1 Giới thiệu
Chương 3. Kafka

Tôi sẽ đăng các chương đã hoàn thành khi chúng được dịch.

CHƯƠNG 1

Giới thiệu

Nhắn tin liên hệ thống là một trong những lĩnh vực CNTT ít được hiểu nhất. Là một nhà phát triển hoặc kiến ​​trúc sư, bạn có thể rất quen thuộc với các framework và cơ sở dữ liệu khác nhau. Tuy nhiên, có khả năng là bạn chỉ có một cái nhìn thoáng qua về cách thức hoạt động của các công nghệ nhắn tin dựa trên nhà môi giới. Nếu đó là cách bạn cảm thấy, đừng lo lắng, bạn đang ở trong một công ty tốt.

Mọi người thường có liên hệ rất hạn chế với cơ sở hạ tầng nhắn tin. Thường thì họ kết nối với một hệ thống đã được tạo từ lâu hoặc tải xuống bộ công cụ phân phối từ Internet, cài đặt nó trong PROM và bắt đầu viết mã cho nó. Sau khi chạy cơ sở hạ tầng trong PROM, các kết quả có thể khác nhau: tin nhắn bị mất khi gặp sự cố, hoạt động gửi không như bạn mong đợi hoặc nhà môi giới treo nhà sản xuất của bạn hoặc không gửi tin nhắn đến người tiêu dùng của bạn.

Âm thanh quen thuộc?

Một tình huống phổ biến trong đó mã nhắn tin của bạn hoạt động tốt trong thời điểm hiện tại. Cho đến khi nó ngừng hoạt động. Giai đoạn này làm mất cảnh giác và mang lại cảm giác an toàn sai lầm, dẫn đến thậm chí nhiều mã hơn dựa trên những ý tưởng sai lầm về hành vi cơ bản của công nghệ. Khi mọi thứ bắt đầu trở nên tồi tệ, bạn phải đối mặt với một sự thật khó chịu: rằng bạn thực sự không hiểu hành vi cơ bản của sản phẩm hoặc sự đánh đổi mà các tác giả đã chọn, chẳng hạn như hiệu suất so với độ bền hoặc giao dịch so với .khả năng mở rộng theo chiều ngang.

Nếu không có hiểu biết sâu sắc về cách thức hoạt động của các nhà môi giới, mọi người đưa ra những tuyên bố có vẻ hợp lý về hệ thống nhắn tin của họ, chẳng hạn như:

  • Hệ thống sẽ không bao giờ mất tin nhắn
  • Tin nhắn sẽ được xử lý tuần tự
  • Thêm người tiêu dùng sẽ làm cho hệ thống nhanh hơn
  • Tin nhắn sẽ chỉ được gửi một lần

Thật không may, một số tuyên bố này dựa trên các giả định chỉ áp dụng trong một số trường hợp nhất định, trong khi những tuyên bố khác đơn giản là không đúng.

Cuốn sách này sẽ hướng dẫn bạn cách lập luận về các hệ thống nhắn tin được môi giới bằng cách so sánh và đối chiếu hai công nghệ môi giới phổ biến: Apache ActiveMQ và Apache Kafka. Nó sẽ phác thảo các trường hợp sử dụng và các khuyến khích phát triển đã khiến các nhà phát triển của họ thực hiện các cách tiếp cận rất khác nhau đối với cùng một lĩnh vực nhắn tin được môi giới giữa các hệ thống. Chúng ta sẽ xem xét các công nghệ này từ đầu và làm nổi bật tác động của các lựa chọn thiết kế khác nhau trong quá trình thực hiện. Bạn sẽ hiểu sâu hơn về cả hai sản phẩm, hiểu cách chúng nên và không nên được sử dụng cũng như hiểu những điều cần chú ý khi xem xét các công nghệ nhắn tin khác trong tương lai.

Trước khi bắt đầu, chúng ta hãy đi qua những điều cơ bản.

Hệ thống nhắn tin là gì và tại sao cần thiết

Để hai ứng dụng giao tiếp với nhau, trước tiên chúng phải xác định một giao diện. Định nghĩa của giao diện này bao gồm việc lựa chọn phương tiện truyền tải hoặc giao thức như HTTP, MQTT hoặc SMTP và thương lượng các định dạng thông báo mà các hệ thống sẽ trao đổi. Đây có thể là một quy trình nghiêm ngặt, chẳng hạn như xác định lược đồ XML với các yêu cầu về chi phí tải trọng cho một thông báo hoặc có thể ít trang trọng hơn nhiều, chẳng hạn như thỏa thuận giữa hai nhà phát triển rằng một số phần của yêu cầu HTTP sẽ chứa mã định danh ứng dụng khách. .

Miễn là định dạng của tin nhắn và thứ tự chúng được gửi nhất quán giữa các hệ thống, chúng sẽ có thể giao tiếp với nhau mà không phải lo lắng về việc triển khai hệ thống khác. Nội bộ của các hệ thống này, chẳng hạn như ngôn ngữ lập trình hoặc khuôn khổ được sử dụng, có thể thay đổi theo thời gian. Miễn là bản thân hợp đồng được duy trì, sự tương tác có thể tiếp tục không thay đổi ở phía bên kia. Hai hệ thống được tách rời (tách rời) một cách hiệu quả bởi giao diện này.

Các hệ thống nhắn tin thường liên quan đến một trung gian giữa hai hệ thống tương tác để tiếp tục tách rời (tách biệt) người gửi khỏi người nhận hoặc người nhận. Trong trường hợp này, hệ thống nhắn tin cho phép người gửi gửi tin nhắn mà không cần biết người nhận đang ở đâu, người đó có đang hoạt động hay không hoặc có bao nhiêu phiên bản của họ.

Hãy xem xét một số phép loại suy đối với các loại vấn đề mà hệ thống nhắn tin giải quyết và giới thiệu một số thuật ngữ cơ bản.

Điểm tới điểm

Alexandra đến bưu điện để gửi một gói hàng cho Adam. Cô đi đến cửa sổ và đưa bưu kiện cho nhân viên. Người nhân viên nhận gói hàng và đưa cho Alexandra một biên lai. Adam không cần phải ở nhà khi gói hàng được gửi đi. Alexandra tự tin rằng gói hàng sẽ được giao cho Adam vào một thời điểm nào đó trong tương lai và có thể tiếp tục công việc kinh doanh của mình. Sau đó, tại một thời điểm nào đó, Adam nhận được một gói hàng.

Đây là một ví dụ về mô hình nhắn tin điểm đến điểm. Bưu điện ở đây đóng vai trò là cơ chế phân phối gói hàng, đảm bảo mỗi gói hàng được phát một lần. Việc sử dụng bưu điện tách biệt hành động gửi bưu kiện với việc giao bưu kiện.
Trong các hệ thống nhắn tin cổ điển, mô hình điểm-điểm được thực hiện thông qua hàng đợi. Hàng đợi hoạt động như một bộ đệm FIFO (vào trước, ra trước) mà một hoặc nhiều người tiêu dùng có thể đăng ký. Mỗi tin nhắn chỉ được gửi một trong những người tiêu dùng đã đăng ký. Hàng đợi thường cố gắng phân phối thông điệp một cách công bằng giữa những người tiêu dùng. Chỉ một người tiêu dùng sẽ nhận được tin nhắn này.

Thuật ngữ "bền" được áp dụng cho hàng đợi. Độ tin cậy là một thuộc tính dịch vụ đảm bảo rằng hệ thống nhắn tin sẽ giữ tin nhắn khi không có người đăng ký hoạt động cho đến khi người tiêu dùng đăng ký hàng đợi gửi tin nhắn.

Độ tin cậy thường bị nhầm lẫn với kiên trì và, mặc dù hai thuật ngữ có thể hoán đổi cho nhau, nhưng chúng thực hiện các chức năng khác nhau. Độ bền xác định liệu một tin nhắn có được hệ thống nhắn tin ghi vào một số loại lưu trữ hay không giữa việc nhận và gửi nó cho người tiêu dùng. Tin nhắn được gửi đến hàng đợi có thể hoặc không liên tục.
Tin nhắn điểm-điểm được sử dụng khi một trường hợp sử dụng yêu cầu một hành động duy nhất trên một tin nhắn. Ví dụ bao gồm gửi tiền vào tài khoản hoặc thực hiện lệnh giao hàng. Chúng ta sẽ thảo luận sau tại sao bản thân hệ thống nhắn tin không có khả năng cung cấp dịch vụ giao hàng một lần và tại sao hàng đợi có thể cung cấp bảo đảm giao hàng tốt nhất. ít nhất một lần.

Nhà xuất bản-Người đăng ký

Gabriella quay số hội nghị. Trong khi được kết nối với hội nghị, cô ấy nghe thấy mọi điều diễn giả nói, cùng với những người tham gia cuộc gọi còn lại. Khi cô ấy mất điện, cô ấy nhớ những gì được nói. Khi kết nối lại, cô ấy tiếp tục nghe những gì đang được nói.

Đây là một ví dụ về mô hình nhắn tin theo dõi công khai. Cuộc gọi hội nghị hoạt động như một cơ chế phát sóng. Người đang nói chuyện không quan tâm có bao nhiêu người hiện đang tham gia cuộc gọi - hệ thống đảm bảo rằng bất kỳ ai hiện đang được kết nối sẽ nghe thấy những gì đang được nói.
Trong các hệ thống nhắn tin cổ điển, mô hình nhắn tin đăng ký xuất bản được triển khai thông qua ngọn. Một chủ đề cung cấp phương thức phát sóng giống như cơ chế hội nghị. Khi một tin nhắn được đăng lên một chủ đề, nó sẽ được phân phối cho tất cả người dùng đã đăng ký.

Chủ đề thường không đáng tin cậy (không bền). Giống như một người nghe không thể nghe thấy những gì đang được nói trong cuộc gọi hội nghị, khi người nghe ngoại tuyến, những người đăng ký chủ đề sẽ bỏ lỡ bất kỳ tin nhắn nào được gửi khi họ ngoại tuyến. Vì lý do này, chúng tôi có thể nói rằng các ngọn cung cấp một sự đảm bảo về giao hàng. không quá một lần cho mọi người tiêu dùng.

Tin nhắn Xuất bản-Đăng ký thường được sử dụng khi tin nhắn có tính chất thông tin và việc mất một tin nhắn không đặc biệt quan trọng. Ví dụ: một chủ đề có thể truyền các chỉ số nhiệt độ từ một nhóm cảm biến mỗi giây một lần. Một hệ thống quan tâm đến nhiệt độ hiện tại và đăng ký một chủ đề sẽ không lo lắng nếu nó bỏ lỡ một tin nhắn - một tin nhắn khác sẽ sớm đến.

mô hình lai

Trang web của cửa hàng đặt các tin nhắn đặt hàng vào một "hàng đợi tin nhắn". Người tiêu dùng chính của những thông điệp này là hệ thống điều hành. Ngoài ra, hệ thống kiểm toán nên có bản sao của các thông báo đặt hàng này để theo dõi sau này. Cả hai hệ thống không thể bỏ lỡ tin nhắn, ngay cả khi bản thân hệ thống không khả dụng trong một thời gian. Trang web không nên biết về các hệ thống khác.

Các trường hợp sử dụng thường yêu cầu kết hợp các mô hình nhắn tin điểm-đăng ký và điểm-điểm, chẳng hạn như khi nhiều hệ thống cần một bản sao của một tin nhắn và cả độ tin cậy và độ bền đều được yêu cầu để tránh mất tin nhắn.

Trong những trường hợp này, cần có một đích (thuật ngữ chung cho hàng đợi và chủ đề), phân phối thư về cơ bản giống như một chủ đề, để mỗi thư được gửi đến một hệ thống riêng biệt quan tâm đến các thư này, nhưng cũng trong đó mỗi hệ thống có thể xác định một số người tiêu dùng nhận tin nhắn đến, giống như một hàng đợi hơn. Kiểu đọc trong trường hợp này là - một lần cho mỗi bên liên quan. Các điểm đến kết hợp này thường yêu cầu độ bền để nếu người tiêu dùng ngắt kết nối, các tin nhắn được gửi vào thời điểm đó sẽ được chấp nhận khi người tiêu dùng kết nối lại.

Các mô hình kết hợp không phải là mới và có thể được áp dụng cho hầu hết các hệ thống nhắn tin, bao gồm cả ActiveMQ (thông qua các đích ảo hoặc tổng hợp kết hợp các chủ đề và hàng đợi) và Kafka (ngầm, như một thuộc tính cơ bản của thiết kế đích của nó).

Bây giờ chúng ta đã có một số thuật ngữ cơ bản và sự hiểu biết về những gì hệ thống nhắn tin có thể hữu ích, hãy đi vào chi tiết.

Dịch xong: tele.gg/middle_java

Phần dịch tiếp theo: Chương 3. Kafka

Để được tiếp tục ...

Nguồn: www.habr.com

Thêm một lời nhận xét