400-638-8808
|
微信公眾號(hào)








穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無(wú)阻

協(xié)同辦公 資源管理

超大郵件 超級(jí)功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

微信掃一掃 關(guān)注"天下數(shù)據(jù)"商品一律九折
![]()
搜索"朗玥科技"關(guān)注,了解最新優(yōu)惠

在做服務(wù)器集群時(shí),集群中的服務(wù)器需要通信,比如Client1(簡(jiǎn)稱C1)連接到Server1(簡(jiǎn)稱S1),Client2連接到Server2,Client1需要向Client2發(fā)消息,S1并不知道C2已連接到S2。
想到了兩種方案:
A方案:采用組播(或廣播),S1在接收到C1消息后,發(fā)送廣播包查詢C2位于哪個(gè)Server上,這時(shí)S2向S1回復(fù),S1再將消息發(fā)送到S2,S2轉(zhuǎn)發(fā)給C2,但是udp是不可靠的,雖然Server都位于同一局域網(wǎng)內(nèi),如果消息丟了,那C2就接收不到C1的消息了。
B方案:增加一個(gè)路由服務(wù)器,所有Server都連接到路由服務(wù)器(tcp長(zhǎng)連接),S1將消息轉(zhuǎn)發(fā)給路由服務(wù)器,路由服務(wù)器再?gòu)V播給所有Server,由各個(gè)Server自行判斷,但這樣程序復(fù)雜度就上升了,每個(gè)Server都會(huì)處理本來(lái)不屬于自己處理的消息,而且路由服務(wù)器會(huì)成為瓶頸,消息數(shù)量大規(guī)模增加的話。
這不就是個(gè)消息隊(duì)列嘛,簡(jiǎn)單的可以用zeromq做,稍微復(fù)雜一點(diǎn)可以用rabbitmq/activemq/qpid等等各種成熟方案。
rabbitmq
MQ全稱為Message Queue, 消息隊(duì)列(MQ)是一種應(yīng)用程序?qū)?yīng)用程序的通信方法。應(yīng)用程序通過(guò)讀寫(xiě)出入隊(duì)列的消息(針對(duì)應(yīng)用程序的數(shù)據(jù))來(lái)通信,而無(wú)需專用連接來(lái)鏈接它們。消息傳遞指的是程序之間通過(guò)在消息中發(fā)送數(shù)據(jù)進(jìn)行通信,而不是通過(guò)直接調(diào)用彼此來(lái)通信,直接調(diào)用通常是用于諸如遠(yuǎn)程過(guò)程調(diào)用的技術(shù)。排隊(duì)指的是應(yīng)用程序通過(guò) 隊(duì)列來(lái)通信。隊(duì)列的使用除去了接收和發(fā)送應(yīng)用程序同時(shí)執(zhí)行的要求。其中較為成熟的MQ產(chǎn)品有IBM WEBSPHERE MQ等等。
ActiveMQ
1、ActiveMQ是消息隊(duì)列技術(shù),為解決高并發(fā)問(wèn)題而生!
2、ActiveMQ生產(chǎn)者消費(fèi)者模型(生產(chǎn)者和消費(fèi)者可以跨平臺(tái)、跨系統(tǒng))
有中間平臺(tái)3、ActiveMQ支持兩種消息傳輸方式
1)Queue,隊(duì)列模式,生產(chǎn)者生產(chǎn)了一個(gè)消息,只能由一個(gè)消費(fèi)者進(jìn)行消費(fèi)
2)Topic,發(fā)布/訂閱模式,生產(chǎn)者生產(chǎn)了一個(gè)消息,可以由多個(gè)消費(fèi)者進(jìn)行消費(fèi)
Qpid
AMQP是一種用于業(yè)務(wù)消息的開(kāi)放網(wǎng)絡(luò)協(xié)議。他定義了一種允許雙方進(jìn)行可靠業(yè)務(wù)消息傳遞的二進(jìn)制線級(jí)協(xié)議。該協(xié)議的目標(biāo)是成為所有消息中間件之間進(jìn)行互操作的標(biāo)準(zhǔn)協(xié)議。
消息隊(duì)列是一種進(jìn)程間通信線程或同一進(jìn)程的不同線程間的通信方式。
Qpid則是由Apache開(kāi)發(fā)的一種消息隊(duì)列,實(shí)現(xiàn)了AMQP協(xié)議,并且支持多種語(yǔ)言與多種平臺(tái)。
zeromq
這是個(gè)類似于Socket的一系列接口,他跟Socket的區(qū)別是:普通的socket是端到端的(1:1的關(guān)系),而ZMQ卻是可以N:M 的關(guān)系,人們對(duì)BSD套接字的了解較多的是點(diǎn)對(duì)點(diǎn)的連接,點(diǎn)對(duì)點(diǎn)連接需要顯式地建立連接、銷毀連接、選擇協(xié)議(TCP/UDP)和處理錯(cuò)誤等,而ZMQ屏蔽了這些細(xì)節(jié),讓你的網(wǎng)絡(luò)編程更為簡(jiǎn)單。ZMQ用于node與node間的通信,node可以是主機(jī)或者是進(jìn)程。
引用官方的說(shuō)法: “ZMQ(以下ZeroMQ簡(jiǎn)稱ZMQ)是一個(gè)簡(jiǎn)單好用的傳輸層,像框架一樣的一個(gè)socket library,他使得Socket編程更加簡(jiǎn)單、簡(jiǎn)潔和性能更高。是一個(gè)消息處理隊(duì)列庫(kù),可在多個(gè)線程、內(nèi)核和主機(jī)盒之間彈性伸縮。ZMQ的明確目標(biāo)是“成為標(biāo)準(zhǔn)網(wǎng)絡(luò)協(xié)議棧的一部分,之后進(jìn)入Linux內(nèi)核”。現(xiàn)在還未看到它們的成功。但是,它無(wú)疑是極具前景的、并且是人們更加需要的“傳統(tǒng)”BSD套接字之上的一 層封裝。ZMQ讓編寫(xiě)高性能網(wǎng)絡(luò)應(yīng)用程序極為簡(jiǎn)單和有趣。”
這不就是個(gè)消息隊(duì)列嘛,簡(jiǎn)單的可以用zeromq做,稍微復(fù)雜一點(diǎn)可以用rabbitmq/activemq/qpid等等各種成熟方案
我看了下zeromq資料,它是用的tcp,通過(guò)一個(gè)路由服務(wù)器來(lái)轉(zhuǎn)發(fā)(發(fā)布-訂閱,請(qǐng)求-應(yīng)答等等)。我的問(wèn)題這種轉(zhuǎn)發(fā)服務(wù)器會(huì)是一個(gè)瓶頸額,比如設(shè)計(jì)目標(biāo)并發(fā)量10萬(wàn),即每秒10萬(wàn)條消息,要求所有消息1秒內(nèi)處理完,他能即時(shí)處理?
消息隊(duì)列很成熟了,你要想性能好,就加機(jī)器來(lái)解決。
看消息大小,0mq官網(wǎng)有測(cè)試數(shù)據(jù),8字節(jié)的消息每秒可以吞吐280萬(wàn)條(10G網(wǎng)絡(luò))或者400萬(wàn)條(infiniband),100字節(jié)的消息每秒都在100萬(wàn)條以上,每秒10萬(wàn)并不是一個(gè)特別巨大的量。想要性能可以堆機(jī)器,分布式消息隊(duì)列很成熟了。
吞吐能力是接收和發(fā)送的總和?還是單單是接收?其實(shí)我想知道它的分發(fā)能力,比如說(shuō)有10個(gè)服務(wù)器向它訂閱了消息,那1秒它能同時(shí)分發(fā)給這10臺(tái)服務(wù)器的消息量有多大?
官網(wǎng)有很具體的報(bào)告可以參考,建議自己搭環(huán)境實(shí)際測(cè)試,在普通PC和千兆網(wǎng)卡的環(huán)境里,是不可能有官方測(cè)出來(lái)的那個(gè)成績(jī)的
我的程序中用的就是“廣播”,主動(dòng)或被動(dòng)發(fā)送狀態(tài)。
請(qǐng)問(wèn)你是如何解決udp廣播中丟消息的問(wèn)題呢?建立應(yīng)答與重發(fā)機(jī)制
在分布式調(diào)度系統(tǒng)中,如果要實(shí)現(xiàn)調(diào)度服務(wù)器與多臺(tái)計(jì)算節(jié)點(diǎn)服務(wù)器之間通信,采用socket來(lái)實(shí)現(xiàn)是一種實(shí)現(xiàn)方式,當(dāng)然我們也可以通過(guò)數(shù)據(jù)存儲(chǔ)任務(wù),子節(jié)點(diǎn)來(lái)完成任務(wù),但是往往使用數(shù)據(jù)作為任務(wù)存儲(chǔ)都需要定制開(kāi)發(fā),要維護(hù)數(shù)據(jù)庫(kù)中任務(wù)記錄狀態(tài)等等。開(kāi)發(fā)的東西還是有點(diǎn)多,而且還不夠靈活。因此,我個(gè)人是比較偏向于使用socket來(lái)實(shí)現(xiàn)任務(wù)的調(diào)度工作。原因:使用socket實(shí)現(xiàn)調(diào)度比較靈活,而且擴(kuò)展性都比較好。
實(shí)現(xiàn)思路:調(diào)度服務(wù)器要實(shí)現(xiàn)調(diào)度工作,它必須與所有計(jì)算節(jié)點(diǎn)之間建立連接。而且他需要知道每臺(tái)計(jì)算節(jié)點(diǎn)的任務(wù)狀況,因此服務(wù)器節(jié)點(diǎn)必須存儲(chǔ)與所有計(jì)算節(jié)點(diǎn)的socket連接對(duì)象。
在客戶端唯一需要知道的就是它歸屬的調(diào)度服務(wù)器的通信IP和端口,因此client是發(fā)送連接的主動(dòng)方,由調(diào)度服務(wù)器監(jiān)聽(tīng)是否有client請(qǐng)求建立連接,當(dāng)建立連接成功后,把該連接信息存儲(chǔ)到一個(gè)節(jié)點(diǎn)中以便監(jiān)控client的存活狀態(tài)及通信使用。
擴(kuò)展:
由于server端是存儲(chǔ)了所有server與client的連接對(duì)象,因此我們是可以基于此demo的基礎(chǔ)上實(shí)現(xiàn)聊天系統(tǒng):
* 每當(dāng)一個(gè)與用戶發(fā)言時(shí),是由server接收到的某個(gè)用戶的發(fā)言信息的,此時(shí)服務(wù)器端可以通過(guò)循環(huán)發(fā)送該用戶發(fā)送的信息給每個(gè)已經(jīng)連接連接的用戶(排除發(fā)送者)。
天下數(shù)據(jù)受中國(guó)電信大力扶持發(fā)展IDC業(yè)務(wù),已與全球120個(gè)國(guó)家的頂級(jí)機(jī)房達(dá)成戰(zhàn)略合作關(guān)系,為互聯(lián)網(wǎng)金額行業(yè)、區(qū)塊鏈、數(shù)字貨幣、IOT行業(yè)、直銷行業(yè)、游戲行業(yè)、電商行業(yè)企業(yè)客戶等提供一站式安全解決方案,詳詢天下數(shù)據(jù)客服電話400-6388-808。
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國(guó)服務(wù)器 韓國(guó)服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺(tái)灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國(guó)云主機(jī) 韓國(guó)云主機(jī) 新加坡云主機(jī) 臺(tái)灣云主機(jī) 日本云主機(jī) 德國(guó)云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無(wú)限防御 SSL證書(shū) 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號(hào)
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠(chéng)聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊(cè) 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國(guó)服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證》 ISP證:粵ICP備07026347號(hào)
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營(yíng))聯(lián)合版權(quán)
深圳總部:中國(guó).深圳市南山區(qū)深圳國(guó)際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號(hào)建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊(cè)業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品