做者: 韩伟
现代游戏项目中,为了让更多的玩家能在一块儿玩,游戏服务器所须要承载的在线玩家数量愈来愈多。同时为了让游戏更好玩,愈来愈多复杂的业务逻辑都须要放在游戏服务器端上运行。所以,拥有一个同时具有可灵活扩展功能、而且能轻松构建服务器集群的底层框架,变得愈来愈有必要。这样游戏程序员能够专心编写好玩的游戏逻辑,而无需去担忧服务器承载量的问题。git
Pebble的含义是“基石”。咱们开发这个框架的目标,就是但愿它能坚固、可靠,发挥做为基础开发框架的做用,成为游戏服务器的基础代码。Pebble诞生于腾讯公司的游戏研发部公共技术研发中心,这个中心已经为腾讯游戏提供了多年的底层技术和服务支持。从端游、页游到手游、电视游戏,这个团队都一直走在游戏研发技术的前列。Pebble这个产品,正是他们多年游戏研发技术的积累和游戏支持经验的结晶。程序员
价值观:易用、灵活、云github
Pebble在设计之初,着眼点有三个:易用性;灵活性;云特性。为了让更多的游戏开发团队能很容易的搭建起一个游戏服务器端,Pebble仔细的衡量各类特性,简化出一套游戏服务器端的最经常使用范围里功能库,而且让这套代码仅依靠Linux系统,就能够运行起来。同时,Pebble库自己也是一个分层良好的SDK,开发团队既可使用Pebble的完整功能,快速开发出一个游戏服务器;也能够只抽取其有特点的底层库,用于加强本身的游戏服务器程序。Pebble为了让游戏服务器真正的成为一个PaaS云,还在代码库中预制了完整的集群管理方案,能够很方便的在任何的IaaS云服务器上,搭建游戏服务器。而且,Pebble还能完美的结合腾讯云的“游戏云”方案,使任何游戏服务器都能一键上云,省却全部的安装、部署、资源规划过程,享受完整的统计、监控服务。数据库
运行环境:缓存
通讯功能服务器
异步框架和协程微信
数据缓存和持久化网络
三种工做模式数据结构
对等网络模型:
在Pebble的集群中,包含两类进程,一类是“集群中心”进程,负责管理和存储整个集群的运行时情况,这类进程由ZooKeeper充当,无需用户开发;另一类是“服务进程”,这些进程负责完成业务功能,这些进程由用户使用Pebble库开发编译而成。全部的“服务进程”,都遵循着最简单的协做逻辑:每一个进程都是对等的,它们本身向集群中心报告本身的状态。当需求发起请求时,都先从“集群中心”处得到目标进程的具体地址,而后再发起请求。所以Pebble集群具备很是突出的优势:部署很是简单——每一个进程只须要配置本身的服务端口,同时配置一个表明集群的“中心地址”。一旦配置好这两个地址,就能组建成任何规模复杂的集群。另外,因为“集群中心”的存在,你也能够从中读取到整个集群的实时状态,并使用这些信息开发出本身的集群监控管理系统。Pebble为你开发集群管理系统,提供了对应的“服务管理”的API。并发
基于服务路由的伸缩特性:
服务器端代码的功能,Pebble都以“服务”的概念来封装,因此服务器伸缩性,也是根据“服务”的请求目标来伸缩的。简单来讲,就是Pebble的“服务”能够在多个服务器上运行,而这些服务器增长和缩减,都不影响“服务”的提供。基本的实现方法,就是因为Pebble集群会对服务请求作路由选择:选择那些可用的、符合业务预订规则的集群节点(服务器)来响应请求。这个过程彻底是自动的,你能够kill掉任何一个Pebble集群中的服务进程,服务请求就不会发给这个失效的进程;你能够简单的启动一个Pebble服务进程,它将自动加入你想要的集群,而后很快服务请求就会发给这个新加入的进程。另外,在多个服务节点的选择上,若是业务功能是有一些特定要求的,好比按某个数值作哈希,Pebble也能够支持,只须要在服务请求的时候,把须要哈希的数值送入请求API便可。这大大简化了以往须要同步在线服务节点状态,而后计算具体业务路由规则,最后才请求服务的繁琐过程。
状态无关的服务
在服务器集群中,最难处理的伸缩性和容灾问题,就是对有状态的服务节点进行操做。因为状态数据有可能在伸缩和容灾中丢失,因此就牵涉大量的同步、落地、缓存管理的代码。这些代码在大量的服务集群中被反复开发,致使了大量的人力浪费。Pebble对于服务状态数据的解决方案是“让服务进程尽可能的状态无关”。Pebble为集群服务进程,提供了一个标准的状态存储接口,让用户把状态数据托管给Pebble,这样用户就无需本身去维持复杂的状态有效性和伸缩性了。这个托管的状态数据接口很是易用,就是一个stl的map接口,只不过这个map是一个分布式存储的map,它会在调用者本地创建内存缓存(可用共享内存),而后在数据须要修改、冷却等状况下自动落地(持久化)到存储设备中;在多个服务节点共用一条记录的时候,自动完成数据同步的功能。Pebble能够提供数据在最终一致性、弱一致性、强一致性之间的配置和切换,从而提供不一样的性能输出。
升云之力
腾讯云:分布式计算平台
Pebble是一个具有创建PaaS云能力的服务框架。所以咱们在腾讯云的基础IaaS上,搭建了一个能够承载Pebble集群的分布式计算平台。这个平台能够提供Pebble集群的服务部署、资源采购和隔离、统计监控、自动容灾、智能伸缩等能力。简单来讲,就是你能够仅仅上传你的Pebble服务代码,而后全部的容量设计、硬件采购、部署、监控,都由腾讯云的分布式计算平台来完成。几乎全部的技术运维操做,包括扩容缩容、故障恢复、负载均衡都不须要使用者去处理,可是你仍是能够很细致的监控到这些事件和效果,也能够介入调整这些自动化的策略。
运维监控WEB工具及日志服务
做为一款云服务的框架,对于运维操做和状态监控是必然很是重视的。Pebble因为是服务框架,因此它能收集到很是细节的信息,包括每一个服务的调用成功率、时延、依赖路径树等等。它还能够根据这些动态统计的细节信息,提供详细的异常报警策略。对于运行中的故障排查,也能提供详细的记录和现场信息。这一切的操做,在腾讯云上,都是有漂亮的WEB界面呈现;同时也提供丰富的RESTful管理接口,可让用户本身定制专用的运维工具。除了运行状态信息监控外,Pebble自己提供的日志框架,能够对接到腾讯云的游戏分布式日志统计平台上,这个统计平台能够利用大量服务器并行计算,为你从大量的日志中统计、挖掘出一切你想要的信息。
自动化弹性伸缩
做为分布式服务集群,其运维工做通常是很是繁重的。成千上万的服务器同时运行,硬件、网络故障很常见;业务的用户量大幅波动,资源采购回收工做量也很大;产品内容突飞猛进,更新版本,部署新的运行环境也很频繁——这一切都须要专业的运维团队来操做。可是,若是你使用Pebble框架,而后在腾讯云的分布式计算平台上运营,以上这些复杂的工做,就都会由经验丰富的腾讯云团队和自动化程序来承担。你所须要作的事情,仅仅是上传一次你的程序,而后开通一下服务就好了。在业务访问量小的时候,分布式计算平台会分配较少的资源来运行,以便帮你节省费用;当业务访问量快速增加的时候,平台会自动的分配充足的资源来接纳新的请求量,这个扩容的过程是彻底自动完成的;若是你的业务量回落,平台也会智能的下降运行资源,减小你的开销——这就是自动化的弹性伸缩云能力。
Pebble框架腾讯互动娱乐事业群(IEG)研发部,在多年支持腾讯游戏经验积累下,开发的一款通用型游戏服务器端开发框架。此框架的使用很是容易学习,能够在几乎无依赖的环境下,知足全部常见的游戏服务器端基础功能;同时也具有无须修改业务逻辑代码,就能够创建起海量承载的分布式集群;最后,这个框架还能配合腾讯云的分布式计算平台,提供自动化运维、丰富运维监控和日志统计、资源智能弹性伸缩的能力。
本项目开源地址:github.com/tencent/peb…
本文来自 韩大 微信公众号
此文已由做者受权腾讯云技术社区发布,转载请注明原文出处
原文连接:https://cloud.tencent.com/community/article/614135?utm_source=jueji
海量技术实践经验,尽在腾讯云社区