必威体育Betway必威体育官网
当前位置:首页 > IT技术

Pomelo分布式部署方案

时间:2019-09-01 21:13:14来源:IT技术作者:seo实验室小编阅读:53次「手机版」
 

pomelo

一 配置文件servers.json的配置

以connector服务为例我们想要在几台机器上部署该服务,对应的json文件connector元素下就有几个子元素。此处我们是在三台机器上部署,因此就有三个子元素,每个子元素包含了每台机器相应信息。

参数解读:

  1. id:在pomelo框架里面每个服务都有一个唯一的id。
  2. host:服务进程所在的主机ip。
  3. port:每个服务都是一个单独的进程存在于服务器之上,因此会监听一个单独的端口。这里的host和port也是服务之间进行rpc调用时候必须用到的,因为rpc调用走的是内网,所以不需要走外网。因此我们也可以把port理解为内网端口。
  4. clientHost:这是提供给客户端调用的ip地址。
  5. clientPort:这是提供给客户端调用的ip地址的端口,客户端调用是要带上此端口号,因为一个服务在一台机器上会复制多个进程,不同的进程监听的端口号不同,因此客户端访问的时候必须得带上端口号才行。
  6. frontend:如果为true说明该进程是前端进程可以提供给内部进程进行rpc调用和客户端调用,如果为false该进程为后端进程,只能提供给内部进程进行rpc调用,默认为false。
  7. clusterCount:pomelo框架提供了一个很人性化的子进程复制方式,比如:我们这里配置connector服务的clientPort参数为:6200++,clusterCount参数为:8,pomelo框架在启动时会对此框架进行解析,会在本台机器上依次创建8个子进程作为connector服务,8个进程监听的端口为:6200—6207。如果clusterCount参数缺省,那就在本台机器创建一个进程,同时把port或者clientPort参数改为:6200。

二 服务器负载均衡方案

ULB(UCloud Load Balancer)是负载均衡服务,即在多台云主机间实现应用程序流量的自动分配。可实现故障自动切换,提高业务可用性,并提高资源利用率

下面我们说一下客户端到服务器是如何路由的,每台机器gate服务监听的是6150~6157端口,connector监听的是6200~6207端口。首先我们会有一个域名绑定到ULB,客户端是使用域名来访问的,用户的请求首先到达ULB。经过ULB负载均衡之后请求到达六台服务器48个gate进程其中一个。gate进程收到请求后对userid和24进行取余计算后(三台服务器共有24个connector服务),返回其中一个connector服务的clientHost和clientPort给客户端。客户端通过这个ip地址和端口号连接到相应的connector服务上,到此客户端到服务器的长连接连接成功。

gate服务通过对userId进行取余之后,相当于把所有的用户平均的分配到了24个connector服务上。为什么是24而不是48呢?六台机器分为两组,方便之因为我们是把后的代码热更新

三 Pomelo分布式系统的代码更新方案

项目上线之后,总会有一些小需求需要立马更新上线,用户正在玩着游戏,立马停机重启项目,太暴力了,对用户的伤害很大。好在我们的项目是小游戏玩一局的时间是两分钟,本局结束时候进行重连。那我们的更新方案是:六台机器分为两组,如果有更新需求的情况,通过ULB路由设置把新连接都路由到第一组的gate服务上,等待三分钟后第二组的用户已经结束游戏,长连接都断开了,此时重启第二组,启动之后开启ULB路由到第二组的操作。到此第二组的代码更新成功,同理第一组重复上述流程。

六组机器分为两组的另一个好处是:在其中一组出现故障的情况下ULB会把请求都路由到可以使用一台上。

四 服务器的启动

项目部署在六台机器上,都是放到同样的目录路径下。六台机器的代码一样,六台机器分为两组,每组的配置文件一样,不同的组配置文件不一样。

以第一组为例,选定一台作为主机,其他的两台为从机,进入到主机的game-server目录下运行如下命令:

./node_modules/pomelo/bin/pomelo start --env=production -D

--env=production表示读取线上配置文件启动进程,--env=development表示读取开发环境的配置文件启动进程。

执行该命令后主机会一次启动主机和从机上的所有进程,这里因为主机和从机的项目目录一致(约定优于配置的原则),主机通过ssh找到从机的项目目录启动进程,所有的进程由主机上的master进程管理和监控。我们可以通过master获取到所有进程的状态和详细信息。

最后别忘了开启ssh端口(如果你每台服务器ssh默认端口不是22的话),因为主机是通过ssh来启动从机的进程的,不开启ssh端口服务启动不了。

APP.configure('production|development', function () {
    var env = app.get('env');
    if (env == 'production') {
        app.set('ssh_config_params', ['-p 59622']);
    }
}

 

更多编程知识交流,关注以下公众

相关阅读

环信大学:SaaS企业如何跨越私有部署7个大坑

SaaS企业在发展私有化业务中会遇到不少大坑,一不小心就掉下去,轻者伤筋动骨,重者一命呜呼。那么会遇到哪些大坑?如何跨越?万一掉下去,如

Qihoo360/wayne 部署教程

系统[root@master wayne]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 部署步骤安装docker请参考安装doc

如何在虚拟主机上部署ASPNET MVC2网站

本来网络上有很多类似的帖子,但是在我部署成功的过程中,依然摸索了很长时间,所以想写个文章来把我部署的过程记录分享一下,以便以后节

Web项目通过webservice编写一个接口,部署在远程服务器

在我的上一片文章中,我在本地新建了一个普通的类来编写WebService,使用终端类 Endpoint 发布这个WebService,以此来实现让其他类调用

MHN蜜罐实践(一)--安装部署

深度吐槽:本来在互联网公司时间就紧张,在开源蜜罐中最后中意了两款产品:Honeytrap和MHN。其中个人更中意Honeytrap。但是安装过程却

分享到:

栏目导航

推荐阅读

热门阅读