對(duì)于一個(gè)即時(shí)通信服務(wù)器來(lái)說(shuō),在用戶(hù)量少的時(shí)候,一臺(tái)服務(wù)器就足以提供所有的服務(wù)。而這種架構(gòu)也最簡(jiǎn)單,舉個(gè)例子,用戶(hù)A與用戶(hù)B互為好友,A向B發(fā)消息,服務(wù)器接收到消息時(shí),解析出接收消息的人,直接轉(zhuǎn)發(fā)給B即可??墒钱?dāng)用戶(hù)數(shù)量越來(lái)越多時(shí),一臺(tái)服務(wù)器已經(jīng)無(wú)法所有用戶(hù)的需求,這時(shí)就要進(jìn)行服務(wù)擴(kuò)容,進(jìn)行分布式部署

                                         

如圖所示,不同的用戶(hù)可能登錄到不同的服務(wù)器上,那么用戶(hù)A給用戶(hù)B發(fā)消息時(shí),服務(wù)器收到消息,首先判斷B是否也登錄在本服務(wù)器上,如果是,那么直接轉(zhuǎn)發(fā)消息即可。如果B不在本服務(wù)器上,那應(yīng)該往哪里轉(zhuǎn)發(fā)這條消息呢?最簡(jiǎn)單的做法就是向服務(wù)器集群中的其他服務(wù)器廣播這條消息,對(duì)于每個(gè)收到這條消息的服務(wù)器,首先判斷消息的目的用戶(hù)是否登錄在自己身上,如果不是,直接忽略該消息。如果是,那么向目的用戶(hù)轉(zhuǎn)發(fā)該消息。固然,這種暴力粗獷的做法是最簡(jiǎn)單直接的,但是會(huì)產(chǎn)生很多無(wú)效的消息轉(zhuǎn)發(fā),對(duì)于服務(wù)器性能產(chǎn)生很大的影響。曾看過(guò)蘑菇街開(kāi)源的即時(shí)通信軟件Teamtalk的代碼,服務(wù)器就是這種實(shí)現(xiàn)方式。其服務(wù)器架構(gòu)如下:

                                   

                                              

不同的msg服務(wù)器連接到同一臺(tái)route server上,所有msg服務(wù)器之間的轉(zhuǎn)發(fā)全部通過(guò)route server。這無(wú)疑會(huì)加重route server的負(fù)載。即時(shí)msg server部署的再多,根據(jù)木桶理論,一個(gè)系統(tǒng)的性能是由其最薄弱的環(huán)節(jié)所決定的。所以也注定這樣的架構(gòu),其系統(tǒng)容量也是有限的。那么如何改善這種系統(tǒng)呢,很明顯服務(wù)器之間的消息轉(zhuǎn)發(fā)不能直接全部廣播,而應(yīng)該有一套明確的路由系統(tǒng),即服務(wù)器在轉(zhuǎn)發(fā)消息時(shí),應(yīng)該知道這條消息應(yīng)該轉(zhuǎn)發(fā)到哪一臺(tái)服務(wù)器,這樣就不需要每條消息都在所有服務(wù)器之間廣播了。

那么如何實(shí)現(xiàn)這樣一套路由系統(tǒng)呢?

簡(jiǎn)單的做法是,每個(gè)用戶(hù)上線(xiàn)時(shí),通過(guò)其連接的msg server向其他所有msg server廣播自己的登錄信息,告知其他服務(wù)器自己登錄在哪臺(tái)服務(wù)器上面。這樣當(dāng)某個(gè)用戶(hù)向其好友發(fā)消息時(shí),首先通過(guò)好友id查看其登錄的msg server。如果好友與自己是同一臺(tái)服務(wù)器,那么直接轉(zhuǎn)發(fā)即可;如果不是,服務(wù)器向route server發(fā)送轉(zhuǎn)發(fā)該消息,并且?guī)夏繕?biāo)msg server的id.這樣route server 收到消息后,解析出目標(biāo)的msg server,進(jìn)行一次轉(zhuǎn)發(fā)即可,省去了大量的廣播消息。這種方式雖然解決了廣播消息的問(wèn)題,但是在每臺(tái)msg server上都要保存所有用戶(hù)的路由信息。當(dāng)所有用戶(hù)都登錄時(shí),幾乎就退化成了單點(diǎn)模型,msg server肯定承受不了。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式