1 / 40

基于 node.js 的高可扩展游戏服务器框架 设计与实现

基于 node.js 的高可扩展游戏服务器框架 设计与实现. 周永昶 zhouyongchang@corp.netease.com. 提纲. Node.js 与游戏服务器 游戏服务器框架的可扩展性 游戏的可扩展性 框架的可扩展性. Node.js 与游戏服务器. Pomelo 定位 Web ,社交, Mobile 游戏服务器 目标 简化游戏开发. https://github.com/NetEase/pomelo. Node.js 与游戏服务器. 什么是 node.js

moana
Download Presentation

基于 node.js 的高可扩展游戏服务器框架 设计与实现

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 基于node.js的高可扩展游戏服务器框架设计与实现基于node.js的高可扩展游戏服务器框架设计与实现 周永昶 zhouyongchang@corp.netease.com

  2. 提纲 • Node.js与游戏服务器 • 游戏服务器框架的可扩展性 • 游戏的可扩展性 • 框架的可扩展性

  3. Node.js与游戏服务器 • Pomelo • 定位 • Web,社交,Mobile游戏服务器 • 目标 • 简化游戏开发 https://github.com/NetEase/pomelo

  4. Node.js与游戏服务器 • 什么是node.js • Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. • Node.js 特性 • 服务器端js • 事件驱动,异步IO • 单线程 • 轻量 • 快速开发

  5. Node.js与游戏服务器 • 为什么用node.js • 优势 • IO • 可扩展性 • Javascript • 社区 • 不足 • CPU密集计算

  6. 游戏服务框架的扩展性 • 为什么扩展? • 如何扩展? • 游戏服务器的特性 • 框架的特性

  7. 游戏服务器的扩展性 • Web服务器 • 短连接 • 无状态 • 无限水平扩展

  8. 游戏服务器的扩展性 • 游戏服务器 • 长连接 • 有状态 • 响应时间~100ms • 有策略的扩展

  9. 游戏服务器的扩展性 • 单服架构 • 所有处理均在一个进程内完成 • 优点:简单 • 缺点:扩展难度较大

  10. 游戏服务器的扩展性 • 模块化架构 • 将场景分离出来 • 游戏世界随场景进行扩展 • 设计和维护复杂

  11. 游戏服务器的扩展性 • BigWorld架构 • 无缝地图,无限大的世界 • 强大的负载均衡

  12. 游戏服务器的扩展性 • 游戏服务器架构发展趋势

  13. 游戏服务器的扩展性 • 扩展的策略 • 多进程单线程 • 避免线程间的并发问题 • 单一进程负责单一服务 • 进程间通过消息进行通讯 • 以服务为单位进行功能扩展 • 使得游戏世界的扩展更容易

  14. 游戏服务器的扩展性 • 扩展的策略 • 服务器的类型与数量 • 服务器类型为模板 • 服务进程为实例 • 以实例的数量进行水平扩展 • 更合理的分配资源

  15. 游戏服务器的扩展性 • 扩展的策略 • 场景的分区策略 • 避免分布式的状态同步 • 以场景为单位分区 • 场景内所有状态在同一个进程(玩家,怪物,NPC等) • 无状态的服务可以分离出来(寻路等)

  16. 游戏服务器的扩展性 • Demo http://pomelo.netease.com/lordofpomelo/

  17. 游戏服务器的扩展性 • 运行时进程结构

  18. 游戏服务器的扩展性 • 小结 • 游戏服务器是一个整体 • 将问题分解,简化 • 灵活扩展,合理分配资源 • 从头开发比较复杂

  19. 框架的扩展性 • 设计目标 • 支撑游戏服务器的架构模型 • 简化游戏服务器开发

  20. 框架的扩展性 • 考虑的问题 • 服务器整体规划 • 单个服务进程的规划 • 业务逻辑的实现和扩展 • 框架的通用性

  21. 服务器的整体规划 • 服务器整体规划 • 服务进程的类型 • 可能会有很多种类型的进程 • 不同的类型可能有不同的特性 • 服务进程的数量 • 不同类型的进程可能分配不同的数量 提取服务器的共性

  22. 服务器的整体规划 • 服务器的抽象 master backend forward message frontend backend push message by channel rpc backend frontend backend

  23. 服务器的整体规划 • Frontend Server • 承载客户端连接 • 维护session信息 • 将请求分发给后端服务器 • 向客户端推送消息

  24. 服务器的整体规划 handler remote session before after dispatcher filter websocket rpc

  25. 服务器的整体规划 • Backend Server • 接收前端分发的请求 • 实现业务逻辑 • 提供远程服务 • 通过channel向客户端推送消息

  26. 服务器的整体规划 handler remote channel before after dispatcher filter rpc

  27. 服务器的整体规划 • 服务类型的定制 area connector chat frontend backend status 提供rpc服务的server 基于websocket的server

  28. 服务器的整体规划 • 实现策略:惯例优先 • 按服务器类型划分目录 • handler实现请求处理逻辑 • remote实现远程调用接口 • 一个工程管理所有代码 • 开发者只要填空就可以了 server type

  29. 服务器的整体规划 • 配置文件指定实例数量

  30. 服务进程的规划 • 单个服务进程的规划 • 进程对外的服务能力 • 服务的能力应该怎么获得 • 能力的复用:继承 or 组合

  31. 服务进程的规划 • 组件系统 • 组件是服务的功能单元 • 将组件组合到一起让进程具有相应的能力 • 组件间通过一个统一的上下文进行协作 • 将大软件分解为小模块

  32. 服务进程的规划 • 基于组件的扩展 handler client app connector rpc proxy client client rpc server remote peer

  33. 服务进程的规划 • 组件的生命周期

  34. 服务进程的规划 • 不同层次的抽象 area chat status connector container backend frontend component core

  35. 业务逻辑的实现与扩展 • 业务逻辑的实现 • 客户端请求的处理 • RPC的处理

  36. 客户端请求 • 服务流程的扩展 • 业务逻辑与前/后置逻辑分离 • Handler实现业务逻辑 • Filter负责前/后置逻辑,是服务流程的扩展点

  37. RPC • RPC的作用 • 服务器间通讯的基础 • 隐藏底层通讯的细节 • 考虑的问题 • 多进程间通讯 • 路由控制 • 协议切换

  38. RPC • RPC Client

  39. RPC • RPC Server

  40. Q&A

More Related