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']);
    }
}

 

 

 

 

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

 

 

 

 

 

 

pomelo 是由网易开发的基于node.js开发的高性能、分布式游戏服务器框架, 也可作为高实时web应用框架。 Pomelo的应用范围 pomelo最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现pomelo可以用如此少的代码达到强大的扩展性和伸缩性。当然还不仅仅是游戏,很多人断言未来的web时代是实时web应用的时代, 我们发现用pomelo开发高实时web应用也如此合适, 而且伸缩性比其它框架好。目前不推荐将pomelo用于大型的MMO rpg游戏开发,尤其是3d游戏, 还是需要象bigworld这样的商用引擎来支撑。 Pomelo的理念 pomelo的第一个理念是让游戏(高实时web应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟rails是很类似的;第二个理念是重视性能和可伸缩性,用户用pomelo开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行;第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件component、路由规则、甚至管理控制台都可以完全由第三方扩展。 Pomelo的框架组成 pomelo包括三部分: 框架, pomelo的核心, 与以往单进程的游戏框架不同, 它是高性能、分布式的游戏服务器框架,并且使用很简单 库, 包括了开发游戏的常用工具库, 如人工智能(ai), 寻路, aoi等 工具包, 包括管理控制台, 命令行工具, 压力测试工具等 pomelo特性 快速、易上手的游戏开发模型和api 高可伸缩的多进程架构, 支持MMO的场景分区和其它各类分区策略 方便的服务器扩展机制,可快速扩展服务器类型和数量 方便的请求、响应、广播、服务器通讯机制, 无需任何配置 注重性能,在性能、可伸缩性上做了大量的测试、优化 提供了较多扩展组件,包括游戏开发常用的库和工具包 提供了完整的MMO demo代码(客户端html5),可以作为很好的开发参考 基于socket.io开发,支持socket.io支持的多种语言客户端 为什么使用pomelo? 高并发、高实时的游戏服务器的开发是很复杂的工作。跟web应用一样, 一个好的开源容器或开发框架可以大大减少游戏开发的复杂性,让开发变得更加容易。遗憾的是目前在游戏服务器开发领域一直没有太好的开源解决方案pomelo将填补这个空白, 打造一款完全开源的高性能(并发)游戏服务器框架。 pomelo的优势有以下几点: 架构的可伸缩性好。 采用多进程单线程的运行架构,扩展服务器非常方便, node.js的网络io优势提供了高可伸缩性。 使用非常容易, 开发模型与web应用的开发类似,基于convention over configuration的理念, 几乎零配置, api的设计也很精简, 很容易上手。 框架的松耦合和可扩展性好, 遵循node.js微模块的原则, framework本身只有很少的代码,所有component、库、工具都可以用npm module的形式扩展进来。任何第三方都可以根据自己的需要开发自定义module。 提供完整的开源MMO游戏demo参考(基于HTML 5)。 一个超过1万行代码的游戏demo,使开发者可以随时借鉴demo的设计与开发思路。 在线演示:http://pomelo.netease.com/demo.html 标签:开发框架  游戏框架
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值