40
基基 node.js 基基基基基基基基基基基基 基基基基基 基基基 [email protected]

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

  • Upload
    moana

  • View
    243

  • Download
    1

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

周永昶[email protected]

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

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

– 游戏的可扩展性– 框架的可扩展性

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

Node.js与游戏服务器• Pomelo

– 定位• Web ,社交, Mobile 游戏服务器

– 目标• 简化游戏开发

https://github.com/NetEase/pomelo

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

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

– 单线程– 轻量– 快速开发

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

Node.js与游戏服务器

• 为什么用 node.js

– 优势• IO

• 可扩展性• Javascript

• 社区

– 不足• CPU 密集计算

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

游戏服务框架的扩展性

• 为什么扩展?• 如何扩展?

– 游戏服务器的特性– 框架的特性

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

游戏服务器的扩展性• Web服务器

– 短连接– 无状态– 无限水平扩展

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

游戏服务器的扩展性• 游戏服务器

– 长连接– 有状态– 响应时间 ~100ms

– 有策略的扩展

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

游戏服务器的扩展性• 单服架构

– 所有处理均在一个进程内完成– 优点:简单– 缺点:扩展难度较大

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

游戏服务器的扩展性• 模块化架构

– 将场景分离出来– 游戏世界随场景进行扩展– 设计和维护复杂

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

游戏服务器的扩展性• BigWorld架构

– 无缝地图,无限大的世界– 强大的负载均衡

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

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

gateway

auth

chat

trade

db

AI

path-finding

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

游戏服务器的扩展性• 扩展的策略

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

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

游戏服务器的扩展性• 扩展的策略

– 服务器的类型与数量• 服务器类型为模板• 服务进程为实例• 以实例的数量进行水平扩展• 更合理的分配资源

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

游戏服务器的扩展性• 扩展的策略

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

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

游戏服务器的扩展性• Demo

http://pomelo.netease.com/lordofpomelo/

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

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

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

游戏服务器的扩展性• 小结

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

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

框架的扩展性• 设计目标

– 支撑游戏服务器的架构模型– 简化游戏服务器开发

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

框架的扩展性• 考虑的问题

– 服务器整体规划– 单个服务进程的规划– 业务逻辑的实现和扩展– 框架的通用性

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

服务器的整体规划• 服务器整体规划

– 服务进程的类型• 可能会有很多种类型的进程• 不同的类型可能有不同的特性

– 服务进程的数量• 不同类型的进程可能分配不同的数量

提取服务器的共性

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

服务器的整体规划• 服务器的抽象

frontend

frontend

backend

backend

backend

backend

forward message

push messageby channel

rpc

master

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

服务器的整体规划• Frontend Server

– 承载客户端连接– 维护 session 信息– 将请求分发给后端服务器– 向客户端推送消息

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

服务器的整体规划

websocket rpc

before after

dispatcher

handler remote

session

filter

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

服务器的整体规划• Backend Server

– 接收前端分发的请求– 实现业务逻辑– 提供远程服务– 通过 channel 向客户端推送消息

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

服务器的整体规划

rpc

before after

dispatcher

handler remote

channel

filter

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

服务器的整体规划• 服务类型的定制

frontend backend

基于 websocket 的 server 提供 rpc 服务的 server

area

chat

status

connector

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

服务器的整体规划• 实现策略:惯例优先

– 按服务器类型划分目录– handler 实现请求处理逻辑– remote 实现远程调用接口– 一个工程管理所有代码– 开发者只要填空就可以了

server type

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

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

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

服务进程的规划• 单个服务进程的规划

– 进程对外的服务能力– 服务的能力应该怎么获得– 能力的复用:继承 or 组合

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

服务进程的规划• 组件系统

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

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

服务进程的规划• 基于组件的扩展

app

handler

rpcproxy

rpcserve

r

connector

client

remotepeer

client

client

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

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

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

服务进程的规划• 不同层次的抽象

connector

area chat status

frontend

backend

core

container

component

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

业务逻辑的实现与扩展• 业务逻辑的实现

– 客户端请求的处理– RPC 的处理

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

客户端请求• 服务流程的扩展

– 业务逻辑与前 / 后置逻辑分离– Handler 实现业务逻辑– Filter 负责前 / 后置逻辑,是服务流程的扩展点

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

RPC

• RPC的作用– 服务器间通讯的基础– 隐藏底层通讯的细节

• 考虑的问题– 多进程间通讯– 路由控制– 协议切换

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

RPC

• RPC Client

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

RPC

• RPC Server

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

Q&A