IM伺服器:我的千萬級線上聊天伺服器叢集

一隻會鏟史的貓發表於2021-11-01

一、伺服器特點

01、傻瓜式部署,一鍵式啟動;
02、單機支援10萬以上線上使用者聊天(8G記憶體,如果記憶體足夠大,併發量可超過10萬);
03、支援伺服器叢集,叢集間高內聚、低耦合,可動態橫向擴充套件IM伺服器,最大支援200臺IM伺服器的叢集;
04、高併發、高穩定性;
05、支援群組聊天;
06、IM業務完全獨立:只需uid(使用者id)和gid(群組id),可方便的將IM業務整合到上層業務中;
07、內建HTTP訪問介面,用於查詢使用者狀態(上線/離線);
07、基於websocket協議,輕鬆實現網頁端開發;
09、訪問安全支援;
10、伺服器體積小,不依賴任何第三方庫和中介軟體,伺服器叢集只有三個檔案,不到500K;
11、提供外部介面用於處理離線訊息;
12、開發成本低,基於websocket協議,訊息體為json格式,使用者可擴充套件自己的訊息欄位;

二、技術特點

01、實現自主記憶體管理,避免記憶體碎片的產生;
02、採用IOCP模型,充分利用CPU多核效能,支援高併發,IO業務處理完全非同步;
03、採用“無鎖”化設計,IM伺服器內部只有一把鎖;
04、內部大量採用HASH表進行資料管理,查詢速度實現O(1);
05、採用紅黑樹進行定時器管理;
06、嚴格的網路異常處理,防止高併發下記憶體訪問異常;

三、伺服器叢集程式介紹

1、imserver.exe
概要介紹:IM通訊服務
預設埠:8210
功能說明:
1、轉發使用者間的點對點訊息;
2、轉發群組訊息;
3、群組的建立、銷燬以及將指定使用者加入到指定群組;

如果線上使用者數量超出單臺imserver的配置,則需要建立IM伺服器叢集,不同的使用者會登入在不同的IM伺服器上。 在叢集模式下,需要importal.exe和improxy.exe程式的支援。
假設一臺imserver支援10萬使用者,你的上層業務需要支援百萬級線上聊天,則需要10臺IM伺服器。此時這10臺伺服器 的管理和通訊需要如下兩個服務支援。

2、importal.exe
概要介紹:負載均衡服務
預設埠:8510
功能說明:
1、實時更新叢集中所有聊天伺服器上的使用者狀態(線上、離線);
2、提供HTTP介面,用於查詢叢集中所有IM伺服器的地址,以及當前每臺伺服器上線上使用者數;
3、提供HTTP介面,用於查詢指定使用者的線上狀態;

使用說明:
1、上層業務通過“/importal/getimserverlist.do”介面獲取叢集中所有IM伺服器列表;
2、根據當前IM伺服器上登入的使用者數量,來決定使用者登入到哪臺IM伺服器上;

3、improxy.exe
概要介紹:訊息轉發服務。
功能說明:
1、連線importal服務,獲取叢集中所有imserver伺服器地址;
2、轉發登入在不同imserver伺服器上的使用者訊息和群組訊息;

四、如何建立IM伺服器叢集

只需一分鐘,一個配置項。
1、部署importal服務,雙擊importal.exe即可。
2、配置imserver上的imconfig.ini檔案
通過imconfig.ini配置檔案中的PortalServer欄位設定portal伺服器的地址。如:PortalServer=127.0.0.1:8510。
imserver伺服器啟動會讀取該配置項,並連線到importal服務上。
3、部署improxy服務,雙擊improxy.exe即可,improxy會通過importal獲取所有IM伺服器。

注意:imserver、importal、improxy最好分別部署在不同的伺服器上。

五、演示地址

單機使用者5萬時的併發演示

六、下載地址

點選此處訪問下載地址

相關文章