服务器架构浅析--pomelo

1. pomelo简介: 
    网易在2012年11月开源的一个网游服务器框架,使用javascript作为开发语言,运行在node.js环境下。具体说明请查阅:https://github.com/NetEase/pomelo
    pomelo项目主页上已经有比较详细的文档说明,本文是我在阅读其源代码过程中对其整体架构整理出来的一点补充文档。欢迎对服务器架构有兴趣的同学对本文多提意见。
2. pomelo总体架构图




2.1 App Server规范:
每个文件一个模块,文件中的公开方法可被路由到, 包规范如下:
    > handler包:处理客户端请求,客户端连接上connector后可发起的request请求(与web的resquest/response类似,区别在此为长连接,且连接在connector服务器上)
    > remote包: 其它服务器发出的rpc调用处理逻辑


2.2 server种类:
    > 前端(webSocket): 配置中有wsPort
    > 后端(rpc): 配置中有port
    > master: master.json配置文件中指定(注: wsPort与port均有,但不属于前两者)


2.3 不同种类的服务器启动的组件:
    > 所有服务器: monitor
    > master服务器: 启动所有服务器及相应的监控/统计等服务
    > 非master服务器均会启动: 
        > server: 服务器对外服务接口(路由解释、转发、请求处理)
        > proxy: rpc客户端代理, 服务器帐号策略由app配置, 默认路由算法: server_index = Math.abs(crc32(uid) % sever_count)
        > channel: 为广播消息服务
    > 前端服务器:
        > connection: 统计用
        > connector: 客户端与服务器的直接连接, 可在加载connector组件时指定使用自己实现的connector,以选择合适的连接模式(tcp/websocket)或数据通信协议(例如protobuff)
        > session: session管理
    > rpc服务器: 
        > remote: rpc服务器组件
        > localSession: 由connector发送消息时copy过来的session数据 


3. pomelo依赖库


    async: 解决回调函数嵌套造成可读性差的问题
    stream-pkg: js对象序列化与反序列化




4. 简单总结
    关于connector: Pomelo虽然声明可使用自己实现的connector以更改接入服务的底层通信协议,但connector组件使用到的connector实现(默认为sioConnector与sioSocket)并未被抽象出来(即没有一个类似connector接口之类的声明)
    pomelo的服务器架构属于比较主流(connector与gate server+业务服务器),其"多进程胜于多线程"的思想有值得借鉴的地方。虽然代码量不大,但层次之间的耦合度较高,依赖很多,导致有些地方不直观。当然,这个也与js的代码风格有关。
    较为不直观的地方:
    > 服务器启动(master启动所有服务器)
    > rpc请求的路由
    > rpc服务代理
    
todo:  
    > connector部分协议抽象
    > rpc部分协议抽象
    > 服务进程监控与管理(monitor/admin)
    > session管理(session与localSession)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值