A.
What is distributed queues
(source:[Link]
[Link]#:~:text=A%20distributed%20queue%20is
%20a,to%20a%20separate%20JMS%20server.)
A distributed queue is a set of physical queues that are called under a single
JNDI name so they appear to be a single, logical destination to a client, when the
members of the set are actually distributed across multiple servers within a cluster,
with each destination member belonging to a separate JMS server. This page
summarizes the distributed queues that have been created for this JMS module.
This page summarizes the distributed queues that have been created for this JMS
module.
You can create a uniform distributed destination, which automatically
creates uniformly-configured destination members on selected JMS servers, or on
all JMS servers on a target server or cluster. This feature ensures the consistent
configuration of all distributed destination parameters, particularly in regards to
weighting, security, persistence, paging, and quotas. If necessary, you can also
continue to manually configure and fine-tune weighted distributed destination
members.
B. How do distributed queues work
(source: [Link]
There are various Topologies that you can employ with ActiveMQ, where
clients are connected to message brokers in various ways like:
peer based
client server
hub and spoke
Each client communicates with a broker using some kind of client library
and network protocol.
To create distributed queues or topics we need to have the message brokers
communicate with each other. There are two different types of broker to broker
communication…
I. Master/Slave for High Availability
A Master/Slave Cluster is used for HA. Basically it means that all messages
are replicated across each broker in the master/slave cluster. If the Master goes
down, the clients can automatically failover to a slave which will have all the
messages already, so each message is highly available. The Slave(s) provide a hot
standby broker which will always be in sync ready to take over if the master goes
away due to hardware failure etc.
Master/Slave works by having some form of replication; each message is
owned by every broker in the logical cluster. A master/slave cluster then acts as
one logical message broker which could then be connected via store and forward to
other brokers (as we’ll see in the next section).
II. Distributed Queues and Topics
In Master/Slave, queues and topics are all replicated between each broker in
the cluster (so often to a master and maybe a single slave). So each broker in the
cluster has exactly the same messages available at any time so if a master fails,
clients failover to a slave and you don’t loose a message.
III. Store and forward networks of brokers
A Store and Forward Network of Brokers means the messages travel from
broker to broker until they reach a consumer; with each message being owned by a
single broker at any point in time. When a JMS producer sends a message to a JMS
consumer, it may travel through several brokers to reach its final destination.
ActiveMQ uses Consumer Priority so that local JMS consumers are always higher
priority than remote brokers in a store and forward network.
Note though that a store and forward network is not a solution for message
HA; if a broker fails in a Store and Forward network, the messages owned by that
broker remain inside the broker’s persistent store until the broker comes back
online. If you need HA of messages then you need to use Master/Slave described
above.
Store and forward is often used in large networks where producers are on
one LAN and consumers are on another LAN and you wish to use a broker on each
LAN as a kind of network concentrator to minimise chattiness over the WAN
between them (and to minimise the number of connections required across the
WAN too). Similar uses of store and forward can be found when using firewalls or
SSL across certain networks etc. One other use case for store and forward
networks is if your OS does not support many sockets (and you can’t reconfigure
that) you could use a store and forward network to connect massive numbers of
clients together in one logical network.
IV. Distributed Queues in Store/Forward
When we publish a message on a queue, it is stored in the persistent store of
the broker that the publisher is communicating. Then if that broker is configured to
store/foward to other brokers and clients, the broker will send it to one of these
clients (which could be a node or a broker depending on the dispatch algorithm).
This dispatch algorithm continues until the message is finally dispatched and
consumed by a client.
At any point in time the message will only exist in one broker’s store until
its consumed. Note that messages are only distributed onto other brokers if there is
a consumer on those brokers.
e.g. If we had broker A, B, C and a publisher on a queue on A. If we have
consumers on the queue on A and B then messages for the queue will be spread
across both brokers A and B; some messages going to B, some being consumed on
A, none going to C. If a consumer on the queue starts on C, then messages will
flow there too. If the consumer stops then no more messages will be dispatched to
C.
V. Distributed Topics in Store/Forward
For topics the above algorithm is followed except, every interested client
receives a copy of the message - plus ActiveMQ will check for loops (to avoid a
message flowing infinitely around a ring of brokers).
A. Định nghĩa thuật toán hàng đợi phân tán
Hàng đợi phân tán là một tập hợp các hàng đợi vật lý được gọi dưới một tên
JNDI (Java Naming and Directory Interface – Giao diện đặt tên và thư mục Java)
để chúng dường như là một điểm đến hợp lý, duy nhất cho một client, khi các
thành viên của tập hợp thực sự được phân phối trên nhiều máy chủ trong một cụm,
với mỗi đích thành viên thuộc một máy chủ JMS (Java Message Service) riêng
biệt. Trang này tóm tắt các hàng đợi phân tán đã được tạo cho module JMS này.
Trang này tóm tắt các hàng đợi phân tán đã được tạo cho module JMS này.
Bạn có thể tạo một đích được phân tán thống nhất, tự động tạo các thành
viên đích được cấu hình đồng nhất trên các máy chủ JMS đã chọn hoặc trên tất cả
các máy chủ JMS trên một máy chủ hoặc cụm mục tiêu. Tính năng này đảm bảo
cấu hình nhất quán của tất cả các tham số đích được phân phối, đặc biệt liên quan
đến trọng số, bảo mật, tính bền bỉ, phân trang và hạn ngạch. Nếu cần, bạn cũng có
thể tiếp tục định cấu hình thủ công và tinh chỉnh các thành viên đích phân phối có
trọng số.
B. Cơ chế thuật toán hàng đợi phân tán
Có nhiều cấu trúc liên kết khác nhau mà bạn có thể sử dụng với ActiveMQ,
nơi mà khách hàng được kết nối với các message brokes theo nhiều cách khác
nhau như:
peer based
client server
hub and spoke
Mỗi máy khách giao tiếp với một nhà môi giới bằng cách sử dụng một số
loại thư viện máy khách và giao thức mạng .
Để tạo hàng đợi hoặc chủ đề phân tán, chúng ta cần có các message brokes
giao tiếp với nhau. Có hai loại môi giới khác nhau để giao tiếp môi giới…
I. Master / Slave để có tính khả dụng cao
Một cụm Master / Slave được sử dụng cho HA(High Availability) . Về cơ
bản, điều đó có nghĩa là tất cả các thông báo được sao chép qua từng nhà môi giới
trong cụm master / slave. Nếu Master gặp sự cố, các máy khách có thể tự động
chuyển đổi dự phòng sang một máy chủ sẽ có tất cả các thông báo, vì vậy mỗi
thông báo đều có tính khả dụng cao. Các Slave cung cấp một môi giới chờ nóng sẽ
luôn được đồng bộ hóa sẵn sàng tiếp quản nếu bản chính ra đi do lỗi phần cứng,
v.v.
Master / Slave hoạt động bằng cách có một số hình thức sao chép; mỗi thông
báo thuộc sở hữu của mỗi nhà môi giới trong cụm logic. Sau đó, một cụm master /
slave hoạt động như một nhà môi giới thông điệp logic, sau đó có thể được kết nối
thông qua cửa hàng và chuyển tiếp đến các nhà môi giới khác (như chúng ta sẽ
thấy trong phần tiếp theo).
II. Hàng đợi và Chủ đề được Phân tán
Trong Master / Slave, các hàng đợi và chủ đề đều được sao chép giữa mỗi
nhà môi giới trong cụm (thường xảy ra với một chủ và có thể là một slave duy
nhất). Vì vậy, mỗi nhà môi giới trong cụm có chính xác các thông báo giống nhau
có sẵn tại bất kỳ thời điểm nào, vì vậy nếu một master bị lỗi, các máy khách sẽ
chuyển đổi dự phòng thành slave và bạn không mất một thông báo nào.
III. Lưu trữ và chuyển tiếp mạng lưới các nhà môi giới
Một Mạng lưới Store / Forward môi giới có nghĩa là các thông điệp di
chuyển từ môi giới để môi giới cho đến khi họ đạt được một người tiêu dùng; với
mỗi tin nhắn thuộc sở hữu của một nhà môi giới duy nhất tại bất kỳ thời điểm nào.
Khi một nhà sản xuất JMS gửi một thông điệp đến người tiêu dùng JMS, nó có thể
đi qua một số nhà môi giới để đến đích cuối cùng. ActiveMQ sử dụng Consumer
Priority(Sự ưu tiên khách hàng) để local JMS consumers luôn được ưu tiên cao
hơn so với các nhà môi giới từ xa trong một cửa hàng và mạng chuyển tiếp.
Lưu ý rằng mạng lưu trữ và mạng chuyển tiếp không phải là giải pháp cho
tin nhắn HA ; nếu một nhà môi giới không thành công trong mạng Cửa hàng và
Chuyển tiếp, các thông báo thuộc sở hữu của nhà môi giới đó vẫn ở trong kho lưu
trữ liên tục của nhà môi giới cho đến khi nhà môi giới trực tuyến trở lại. Nếu bạn
cần HA của tin nhắn thì bạn cần sử dụng Master / Slave được mô tả ở trên.
Lưu trữ và chuyển tiếp thường được sử dụng trong các mạng lớn nơi các nhà
sản xuất ở trên một mạng LAN và người tiêu dùng ở trên một mạng LAN khác và
bạn muốn sử dụng một nhà môi giới trên mỗi mạng LAN như một loại bộ tập trung
mạng để giảm thiểu sự trò chuyện qua mạng WAN giữa chúng (và để giảm thiểu
số lượng kết nối cần thiết trên mạng WAN). Cách sử dụng tương tự của store và
forward có thể được tìm thấy khi sử dụng tường lửa hoặc SSL trên các mạng nhất
định, v.v. Một trường hợp sử dụng khác cho mạng store và mạng chuyển tiếp là
nếu hệ điều hành của bạn không hỗ trợ nhiều socket (và bạn không thể định cấu
hình lại), bạn có thể sử dụng lưu trữ và chuyển tiếp mạng để kết nối số lượng lớn
các máy khách với nhau trong một mạng logic.
IV. Hàng đợi được phân phối trong Store / Forward
Khi chúng tôi xuất bản một tin nhắn trên hàng đợi, nó được lưu trữ trong kho
lưu trữ liên tục của nhà môi giới mà nhà xuất bản đang giao tiếp. Sau đó, nếu nhà
môi giới đó được định cấu hình để lưu trữ / chuyển tiếp đến các nhà môi giới và
khách hàng khác, nhà môi giới sẽ gửi nó đến một trong các khách hàng này (có thể
là một nút hoặc một nhà môi giới tùy thuộc vào thuật toán điều phối). Thuật toán
gửi này tiếp tục cho đến khi tin nhắn cuối cùng được gửi đi và được sử dụng bởi
một máy khách.
Tại bất kỳ thời điểm nào, thông báo sẽ chỉ tồn tại trong cửa hàng của một
nhà môi giới cho đến khi nó được tiêu thụ. Lưu ý rằng tin nhắn chỉ được phân phối
đến các nhà môi giới khác nếu có người tiêu dùng trên các nhà môi giới đó.
Ví dụ: nếu chúng tôi có nhà môi giới A, B, C và một nhà xuất bản trong
hàng đợi ở A. Nếu chúng tôi có người tiêu dùng trong hàng đợi ở A và B thì thông
báo cho hàng đợi sẽ được trải rộng trên cả nhà môi giới A và B; một số thông báo
đến B, một số được sử dụng ở A, không có thông báo nào đến C. Nếu người tiêu
dùng trong hàng đợi bắt đầu từ C, thì các thông báo cũng sẽ chuyển đến đó. Nếu
người tiêu dùng dừng lại thì sẽ không có tin nhắn nào được gửi đến C.
V. Các chủ đề được phân phối trong Store / Forward
Đối với các chủ đề, thuật toán trên được tuân theo ngoại trừ, mọi khách hàng
quan tâm sẽ nhận được một bản sao của thông báo - cộng với ActiveMQ sẽ kiểm
tra các vòng lặp (để tránh thông báo chảy vô hạn xung quanh một vòng các nhà
môi giới).