置顶 【必读】mqant如何分布式部署
发布于 10 个月前 作者 liangdas 1500 次浏览 来自 分享

mqant中的分布式即是将系统中的部分模块分布到不同的进程中,分布到不同进程的模块还能像在同一个进程中一样可以相互调用。

实现技术点

  1. 在配置文件中为需要分离的模块指定ProcessID
  2. 在配置文件中为需要分离的模块指定RPC通信通道(Redis/Rabbitmq)
  3. 启动这些进程

经过以上三部就实现了分布式部署

配置文件中如何配置?

需要配置ProcessID,RPC通信通道

示例:

"Chat":[
               {
                    "Id":"Chat001",
                    "ProcessID":"Chat001",
                     "Redis":{
                        "Uri"          :"redis://:user@ip:port/db",
                        "Queue"        :"Chat001"
                    }
               },
              {
                "Id":"Chat002",
                "ProcessID":"Chat002",
                "Redis":{
                  "Uri"          :"redis://:user@ip:port/db",
                  "Queue"        :"Chat002"
                }
              }
],

示例说明:

Chat是模块名,代表一个聊天功能模块

配置ProcessID

将Chat分布为两个进程中运行, ProcessID分别为 Chat001, Chat002

配置RPC通信通道
"Redis":{
	"Uri"          :"redis://:payplug@115.28.62.110:6379/10",
	"Queue"        :"Chat002"
}

Uri和Queue 共同决定一条RPC通道

启动进程

以上已经在配置层面上将Chat分布成两个进程了,但还需最后一个步骤,启动这些进程,Chat才能提供服务

启动进程Chat001

/opt/go/server -pid=Chat001 -conf=/opt/go/bin/conf/server.json -wd=/opt/go/

启动进程Chat002

/opt/go/server -pid=Chat002 -conf=/opt/go/bin/conf/server.json -wd=/opt/go/

pid: ProcessID 与配置文件中ProcessID对应
conf: 配置文件路径,建议使用绝对路径
wd: 工作目录
正式环境部署可以使用nohup

nohup /opt/go/server -pid=Chat001 -conf=/opt/go/bin/conf/server.json >/opt/go/bin/logs/nohup.log 2>&1 &

自动化部署

mqant自动化部署模块目前还未实现

4 回复

假如部署了不同进程的 Chat 模块,我看到 mqantserver 中以房间号存储用户信息,假如 gate 将A用户连接到了 Chat001,B 用户连接到了 Chat002,AB 在同一房间,那怎么保证 A 发送的聊天信息可以被 B 收到呢?如果部署多个 gate,一个 Chat,Chat 的压力在人数多时会不会很高

Chat 模块 只是一个示例没有考虑分布式环境下的数据同步问题。首先用户A和B连接到gate,然后再加入后端的某一个房间 也就是说Chat001和Chat002都是提供的房间,如果要给房间编号的话 Chat001 里面的房间号从 1-100 Chat002里面的房间号是101-199 所以他们如果都加入到房间150,那么就都应该到Chat002了

这样的话,负载呢?如果一个房间人数非常多,仅仅一个 Chat001无法提供服务的话,怎么办?

这就不是框架需要考虑的问题了

回到顶部