1. 程式人生 > >端遊廣播機制在阿里雲的配置方案

端遊廣播機制在阿里雲的配置方案

1. 客戶需求場景

對於傳統端游來說,後臺服務端架構通常都很複雜,各個伺服器之間需要進行重度的網路通訊。如果採用單播通訊,就需要伺服器隨時知曉其他伺服器的變動,整個架構往往變得十分笨重。出於對開發靈活性和節省主機計算資源的考慮,目前很多端遊各個伺服器之間仍然在使用udp廣播通訊。

2. 基本原理

在目前阿里雲的經典網路和VPC網路環境下,由於底層交換機使用了三層交換機,因此不支援二層組播和廣播。為了滿足客戶組播和廣播的需求,可以使用單播的方式模擬組播。基本實現原理如下圖:

b697ea3f7f133ee0a5656ac4d8f7d38a2e48dc8e

3. Windows環境配置

Windows環境下,多播工具包括服務端udptopoint

和客戶端udptomulti,服務端安裝在需要傳送多播資料包的ECS上,客戶端安裝在需要接收多播資料包的ECS上。

3.1 安裝

Windows多播代理程式通過安裝包來安裝。雙擊udptopoint-1.3.1.exeudptomulti-1.1.1.exe安裝包程式來安裝,按照提示來安裝。安安裝目錄:C:\udptopoint 和 C:\udptomulti。

4638bed9b14396847bbae4e188aeb2b53f0854fc

f5ef3dbe0194ce8a3835c4b9059b17c192de947b

安裝說明:

1.     在安裝過程中如果檢測到winpcap已經安裝,直接取消安裝便可,也可繼續覆蓋安裝。

2.     

如果沒有安裝winpcap,則需要點選安裝,如下圖所示:

d5694d1a07f076c63e44c009087f9b66d048d754

3.2 配置

3.2.1 服務端配置

當組播工具安裝成功後,執行udptopoint.exe,將會自動執行多播轉單播的後臺服務,在工作管理員->服務 裡可以看到當前服務執行狀態。

服務端需要配置多播組以及新增對應的多播成員。主要通過配置檔案的形式進行配置。配置檔名稱為server_cfg.json.txt。配置檔案的格式如下所示:

服務端配置檔案格式:

{

  "multi_group_array":[

    {

      "group_ip":"224.2.2.1",

      "group_port":4321,

      "server_port":4322,

      "member_array":[

        "172.16.1.1",

        "172.16.1.2",

        "172.16.1.3"

      ]

    }

  ]

}

說明:group_ip:多播組IP。

group_port:多播組埠,即在伺服器端發起的多播埠。

server_port:代理程式的通訊埠,即將多播轉換成單播使用的埠。

member_array:多播組的成員IP。

服務端輔助工具——send_reload_point_cfg:

目前支援的命令為reload和list命令。

reload命令作用:重新載入配置檔案。每當重新修改配置檔案後,都需要執行該命令重新載入配置檔案。

list命令作用:顯示當前代理系統的收發包情況。

使用方法:

終端輸入reload或者list命令。

79e51cd91a598d1d6941bdb2e5c00ccdc0a83e00

3.2.2  客戶端配置

當組播工具安裝成功後,執行udptomulti.exe,將會自動執行多播轉單播的後臺服務,在工作管理員->服務 裡可以看到當前服務執行狀態。

客戶端需要配置加入的多播組資訊,主要通過配置檔案中的json陣列進行配置,配置檔名稱為client_cfg.json.txt。配置檔案的格式如下:

客戶端配置檔案格式:

{

    "multi_server_info_array":[

    {

    "server_ip":"10.65.251.14",

    "server_port":6000,

        "group_ip":"192.168.1.255",

        "group_port":6001

    }

  ]

}

說明:

  server_ip: 傳送多播資料的源IP。

  server_port: 代理程式的通訊埠,即單播使用的埠。

  group_ip: 多播組IP。即在接受訊息後如果需要模擬的多播組IP。

  group_port: 應用程式的通訊埠。即在接收訊息後需要模擬的多播組埠。

客戶端輔助工具——send_reload_multi_cfg:

目前支援的命令為reload和list命令。

reload命令作用:重新載入配置檔案。每當重新修改配置檔案後,都需要執行該命令重新載入配置檔案。

List命令作用:顯示當前代理系統的收發包情況。

4. Linux環境配置

4.1 安裝

Linux使用者組播工具伺服器和客戶端都打包成了一個主RPM包。目前提供的rpm包是:multicast_usr_tool-1.0.1-1.x86_64.rpm, 版本為1.0.1。安裝方法如下:

sudo rpm -ivh multicast_usr_tool-1.0.3-1.el6.x86_64.rpm

可用rpm -q multicast_usr_tool-1.0.3-1.el6.x86_64 查詢rpm包是否安裝成功。成功安裝rpm包後,會自動將使用者態組播工具的伺服器端程式和客戶端程式安裝到系統中。

4.2 配置

組播工具安裝成功後,客戶端啟動程式安裝目錄為/usr/local/bin,配置檔案目錄為/etc/multicast/

首先利用 cd /usr/local/bin 命令進入到客戶端所在目錄,

執行source ~/.bashrc

啟動: 

   客戶端:

手動啟動:(root許可權)

 nohup multic_admin -R > /dev/null &                          

   服務端:

啟動: (root許可權)

service multis_monitord start

停止:

   客戶端:

手動停止:ps aux|grep multic_admin找到執行程序的pid, 然後kill pid

   伺服器:

root許可權 service multis_monitord stop

檢視執行狀態:

    service multis_monitord status

5. 使用案例

d08b6033998fb724ac9c4d6218afa93691e181fc
如上圖所示,ECS1為組播源,ECS2, ECS3和ECS4為組播成員,組播IP地址和埠分別為224.1.2.3:7134。此時ECS1上需要安裝執行組播服務端,ECS2,ECS3和ECS4分別安裝執行組播客戶端。操作步驟如下:

5.1 修改服務端配置檔案

Windows下修改udptopoint資料夾下server_cfg.json.txt檔案,Linux下修改/etc/multicast/server_cfg.json.txt檔案,配置如下: {     "multi_group_array": [         { "group_ip": "224.1.2.3", "server_port": 7134,             "group_port": 7134,             "member_array": [                 "192.168.1.1",                 "192.168.1.2",                 "192.168.1.3"             ],         }     ] } 修改後需要用reload工具載入到當前執行的伺服器程式中: Linux下執行:     server_reload_list please input command[reload or list]#reload Windows下執行: send_reload_point_cfg please input command[reload or list]#reload 若出現connection refused 提示,請檢查服務udptopoint是否執行正常。

5.2 修改客戶端配置檔案

客戶端以ECS2為例,Windows下修改udptopoint資料夾下client_cfg.json.txt檔案,Linux下修改/etc/multicast/client_cfg.json.txt檔案,配置如下: client_cfg.json.txt {     "multi_server_info_array": [         {             "group_ip": "224.1.2.3",             "group_port": 7134,             "server_ip": "192.168.0.1",             "server_port": 7134         }     ] } 同樣修改後需要用reload工具載入到當前執行的伺服器程式中: Linux下執行:     client_reload_list please input command[reload or list]#reload Windows下執行: send_reload_multi_cfg please input command[reload or list]#reload 若出現connection refused 提示,請檢查服務udptomulti是否執行正常。

5.3 注意事項和測試

注意事項: • 客戶端和服務端Server_port需要保持一致,否則收不到資料包。 • 系統會生成日誌資訊,windows在目錄C:\udptomulti下的client_log.txt及C:\udptopoint下的server_log.txt中,linux在目錄/etc/multicast/下的client_log.txt和server_log.txt中。 • 服務配置成功後,可使用抓包工具進行測試,windows下推薦使用wireshark,linux下推薦使用自帶的tcpdump命令。 • 如不能正常通訊,在進行錯誤排查時,排查順序為 1、服務端檢測組播包是否正常轉化成單播包併成功傳送。2、客戶端檢測是否正常接收到單播包,排查網路問題。3、客戶端是否正常將單播包重新轉換成組播包。

6. 最佳實踐結果

經過組播工具改造後,客戶的各個經典網路下ECS之間已能夠正常通過廣播方式通訊。