基于node.js的高可扩展游戏服务器框架设计和实现.docx
文本预览下载声明
基于node.js的高可扩展游戏服务器框架设计与实现
周永昶
zhouyongchang@
提纲
Node.js与游戏服务器
游戏服务器框架的可扩展性
游戏的可扩展性
框架的可扩展性
Node.js与游戏服务器
Pomelo
定位
Web,社交,Mobile游戏服务器
目标
简化游戏开发
/NetEase/pomelo
Node.js与游戏服务器
什么是node.js
Node.js is a platform built on Chromes JavaScript runtime for easily building fast, scalable network applications.
Node.js 特性
服务器端js
事件驱动,异步IO
单线程
轻量
快速开发
Node.js与游戏服务器
为什么用node.js
优势
IO
可扩展性
Javascript
社区
不足
CPU密集计算
游戏服务框架的扩展性
为什么扩展?
如何扩展?
游戏服务器的特性
框架的特性
游戏服务器的扩展性
Web服务器
短连接
无状态
无限水平扩展
游戏服务器的扩展性
游戏服务器
长连接
有状态
响应时间~100ms
有策略的扩展
游戏服务器的扩展性
单服架构
所有处理均在一个进程内完成
优点:简单
缺点:扩展难度较大
游戏服务器的扩展性
模块化架构
将场景分离出来
游戏世界随场景进行扩展
设计和维护复杂
游戏服务器的扩展性
BigWorld架构
无缝地图,无限大的世界
强大的负载均衡
游戏服务器的扩展性
游戏服务器架构发展趋势
游戏服务器的扩展性
扩展的策略
多进程单线程
避免线程间的并发问题
单一进程负责单一服务
进程间通过消息进行通讯
以服务为单位进行功能扩展
使得游戏世界的扩展更容易
游戏服务器的扩展性
扩展的策略
服务器的类型与数量
服务器类型为模板
服务进程为实例
以实例的数量进行水平扩展
更合理的分配资源
游戏服务器的扩展性
扩展的策略
场景的分区策略
避免分布式的状态同步
以场景为单位分区
场景内所有状态在同一个进程(玩家,怪物,NPC等)
无状态的服务可以分离出来(寻路等)
游戏服务器的扩展性
Demo
/lordofpomelo/
游戏服务器的扩展性
运行时进程结构
游戏服务器的扩展性
小结
游戏服务器是一个整体
将问题分解,简化
灵活扩展,合理分配资源
从头开发比较复杂
框架的扩展性
设计目标
支撑游戏服务器的架构模型
简化游戏服务器开发
框架的扩展性
考虑的问题
服务器整体规划
单个服务进程的规划
业务逻辑的实现和扩展
框架的通用性
服务器的整体规划
服务器整体规划
服务进程的类型
可能会有很多种类型的进程
不同的类型可能有不同的特性
服务进程的数量
不同类型的进程可能分配不同的数量
提取服务器的共性
服务器的整体规划
服务器的抽象
frontend
frontend
backend
backend
backend
backend
forward message
push message
by channel
rpc
master
服务器的整体规划
Frontend Server
承载客户端连接
维护session信息
将请求分发给后端服务器
向客户端推送消息
服务器的整体规划
websocket
rpc
before
after
dispatcher
handler
remote
session
filter
服务器的整体规划
Backend Server
接收前端分发的请求
实现业务逻辑
提供远程服务
通过channel向客户端推送消息
服务器的整体规划
rpc
before
after
dispatcher
handler
remote
channel
filter
服务器的整体规划
服务类型的定制
frontend
backend
基于websocket的server
提供rpc服务的server
area
chat
status
connector
服务器的整体规划
实现策略:惯例优先
按服务器类型划分目录
handler实现请求处理逻辑
remote实现远程调用接口
一个工程管理所有代码
开发者只要填空就可以了
server type
服务器的整体规划
配置文件指定实例数量
服务进程的规划
单个服务进程的规划
进程对外的服务能力
服务的能力应该怎么获得
能力的复用:继承 or 组合
服务进程的规划
组件系统
组件是服务的功能单元
将组件组合到一起让进程具有相应的能力
组件间通过一个统一的上下文进行协作
将大软件分解为小模块
服务进程的规划
基于组件的扩展
app
handler
rpc
proxy
rpc
server
connector
client
remote
peer
client
clien
显示全部