端游广播机制在阿里云的配置方案

1. 客户需求场景

对于传统端游来说,后台服务端架构通常都很复杂,各个服务器之间需要进行重度的网络通信。如果采用单播通信,就需要服务器随时知晓其他服务器的变动,整个架构往往变得十分笨重。出于对开发灵活性和节省主机计算资源的考虑,目前很多端游各个服务器之间仍然在使用udp广播通信。

2. 基本原理

在目前阿里云的经典网络和VPC网络环境下,由于底层交换机使用了三层交换机,因此不支持二层组播和广播。为了满足客户组播和广播的需求,可以使用单播的方式模拟组播。基本实现原理如下图:

端游广播机制在阿里云的配置方案

3. Windows环境配置

Windows环境下,多播工具包括服务端udptopoint和客户端udptomulti,服务端安装在需要发送多播数据包的ECS上,客户端安装在需要接收多播数据包的ECS上。

3.1 安装

Windows多播代理程序通过安装包来安装。双击udptopoint-1.3.1.exeudptomulti-1.1.1.exe安装包程序来安装,按照提示来安装。安安装目录:C:\udptopoint 和 C:\udptomulti。

端游广播机制在阿里云的配置方案

端游广播机制在阿里云的配置方案

安装说明:

1.     在安装过程中如果检测到winpcap已经安装,直接取消安装便可,也可继续覆盖安装。

2.     如果没有安装winpcap,则需要点击安装,如下图所示:

端游广播机制在阿里云的配置方案

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命令。

端游广播机制在阿里云的配置方案

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. 使用案例

端游广播机制在阿里云的配置方案
如上图所示,ECS1为组播源,ECS2, ECS3和ECS4为组播成员,组播IP地址和端口分别为224.1.2.3:7134。此时ECS1上需要安装运行组播服务端,ECS2,ECS3和ECS4分别安装运行组播客户端。操作步骤如下:
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之间已能够正常通过广播方式通信。


上一篇:多线程容易产生的40个问题汇总


下一篇:如何使用高速通道实现跨VPC NAT公网共享