如何在服務器群集中的服務器之間進行通信?
發布時間:2020-07-15 點擊數:6567
在建立服務器群集時,群集中的服務器需要進行通信。例如,Client1(簡稱C1)連接到Server1(簡稱S1),Client2連接到Server2,并且Client1需要向Client2發送消息。 S1不知道C2已連接到S2。
我想到了兩個選擇:
方案A:采用組播(或廣播)。 S1收到C1消息后,發送廣播報文查詢C2所在服務器。此時,S2回復S1,S1將消息發送到S2,S2將其轉發到C2,但是udp并不可靠,盡管服務器位于同一局域網中,如果消息丟失,則C2可以沒有收到C1的消息。
選項B:添加路由服務器,所有服務器都連接到路由服務器(tcp長連接),S1將消息轉發到路由服務器,路由服務器廣播到所有服務器,由每個服務器判斷,但是復雜度高程序數量的增加順便說一下,如果消息數量大量增加,則每個服務器將處理自身未處理的消息,并且路由服務器將成為瓶頸。
這不是消息隊列。簡單的可以使用zeromq來完成,稍微復雜的可以使用Rabbitmq / activemq / qpid和其他成熟的解決方案。
Rabbitmq
MQ被稱為消息隊列,消息隊列(MQ)是一種應用程序到應用程序的通信方法。應用程序通過在隊列(應用程序的數據)之間讀取和寫入消息進行通信,而無需專用連接來鏈接它們。消息傳遞是指通過發送消息中的數據進行通信的程序,而不是通過直接相互調用來相互通信的程序,通常用于諸如遠程過程調用之類的技術。排隊是指通過隊列進行通信的應用程序。隊列的使用消除了接收和發送應用程序以同時執行的需求。在更成熟的MQ產品中,有IBM WEBSPHERE MQ等。
ActiveMQ
1. ActiveMQ是一種消息排隊技術,其誕生是為了解決高并發問題!
2. ActiveMQ生產者消費者模型(生產者和消費者可以跨平臺和系統)
有中間平臺3,ActiveMQ支持兩種消息傳輸方式
1)隊列,隊列模式,生產者產生一條消息,該消息只能由一個消費者使用
2)主題,發布/訂閱模型,生產者產生一條消息,可由多個消費者使用
Qpid
AMQP是用于業務消息的開放網絡協議。他定義了一個二進制的線級協議,該協議允許雙方執行可靠的業務消息傳遞。該協議的目標是成為所有消息中間件之間互操作性的標準協議。
消息隊列是進程間通信線程之間或同一進程的不同線程之間的通信方法。
Qpid是Apache開發的消息隊列,實現AMQP協議并支持多種語言和多種平臺。
零平方米
這是一系列類似于Socket的接口。它和Socket的區別在于普通套接字是端到端的(1:1關系),而ZMQ是N:M關系。您了解有關點對點連接的更多信息。點對點連接需要顯式建立連接,破壞連接,選擇協議(TCP / UDP)和處理錯誤。 ZMQ屏蔽了這些細節,使您的網絡編程更加輕松。 ZMQ用于節點與節點之間的通信。節點可以是主機或進程。
引用官方聲明:“ ZMQ(ZeroMQ縮寫為ZMQ)是一個簡單易用的傳輸層。它是一個類似于框架的套接字庫。它使套接字編程更簡單,更簡潔并且具有更高的性能。它是一個消息處理隊列庫,可以在多個線程,核心和主機盒之間靈活伸縮。ZMQ的明確目標是“成為標準網絡協議棧的一部分,然后進入Linux內核。”他們還沒有看到他們的成功,但是,毫無疑問,這是極其有希望且要求更高的BSD套接字上的封裝層。ZMQ使編寫高性能網絡應用程序變得極為輕松和有趣。
這不只是一個消息隊列嗎?簡單的可以使用zeromq完成,稍微復雜的可以使用Rabbitmq / activemq / qpid和其他成熟的解決方案
希望全網數據小編的方法對大家有用,全網數據為大家提供專業的深圳服務器托管,深圳服務器租用,深圳主機托管,云服務器租用等服務器資源,詳情歡迎咨詢客服了解。