现代游戏项目中,为了让更多的玩家能在一起玩,游戏服务器所需要承载的在线玩家数量越来越多。同时为了让游戏更好玩,越来越多复杂的业务逻辑都需要放在游戏服务器端上运行。因此,拥有一个同时具备可灵活扩展功能、并且能轻松构建服务器集群的底层框架,变得越来越有必要。这样游戏程序员可以专心编写好玩的游戏逻辑,而无需去担心服务器承载量的问题。
Pebble的含义是“基石”。我们开发这个框架的目标,就是希望它能坚固、可靠,发挥作为基础开发框架的作用,成为游戏服务器的基础代码。Pebble诞生于腾讯公司的游戏研发部公共技术研发中心,这个中心已经为腾讯游戏提供了多年的底层技术和服务支持。从端游、页游到手游、电视游戏,这个团队都一直走在游戏研发技术的前列。Pebble这个产品,正是他们多年游戏研发技术的积累和游戏支持经验的结晶。
价值观:易用、灵活、云
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)研发部,在多年支持腾讯游戏经验积累下,开发的一款通用型游戏服务器端开发框架。此框架的使用非常容易学习,可以在几乎无依赖的环境下,满足所有常见的游戏服务器端基础功能;同时也具备无须修改业务逻辑代码,就可以建立起海量承载的分布式集群;最后,这个框架还能配合腾讯云的分布式计算平台,提供自动化运维、丰富运维监控和日志统计、资源智能弹性伸缩的能力。
本项目开源地址:https://github.com/tencent/pebble
本文来自 韩大 微信公众号
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。