游戏服务器为什么选用Actor模型,《百万在线》给你答案

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第1张图片

游戏服务器需要承载很多玩家,开发者需要选择合理的架构。Actor模型是一种常用的游戏服务端架构模型,在选用Skynet、Erlang方案的公司中广泛应用。

从硬件角度看待架构划分

游戏服务端选用的抽象模型,它既要符合硬件资源的运行特性,尽可能的提高运行效率,也要尽可能的符合对游戏内容的抽象。对于传统软件,人们总结出很多设计模式,比如工厂模式、观察者模式等等;类似的,在并发编程领域,人们也总结出很多模式,Actor就是其中一种。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第2张图片

图:从硬件角度看待服务端架构

游戏服务器需要承载很多玩家,意味着要尽可能的利用硬件资源。现代CPU都是多核CPU,多核CPU的特性表现在操作系统对多线程的处理能力上。


多进程/多线程的限制

理论也许枯燥,我们通过一个例子来说明,假如要开发一款如下图的斗地主游戏,而且预计玩家数量很多。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第3张图片

图:斗地主游戏示意图

传统方法是开启多个进程,每个进程处理多张桌子的逻辑。如果每个进程可以处理10张桌子,单台物理机开启100个进程就可以支撑3000名玩家。

但是,进程A和进程B究竟是什么东西?叫做桌子集合?它是计算机系统的概念,现实世界找不到对应的事物,就不容易理解。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第4张图片

图:传统的多进程模型,图片来自《百万在线》第1章

还有一种方法,让每个进程只处理一张桌子的逻辑,然而由于进程会占用很多系统资源,线程会占用的资源包括:

1、Linux下每个线程至少会占用的一“页”的物理内存,即4K。

2、CPU一次线程切换大概需要几微秒的时间,花销较大。

在普通的计算机,虽然操作系统理论上可以支持(近乎)无限的线程数,但若考虑性能,实际上只能支撑几百个。另外,多线程编程很复杂,需要考虑各种加锁问题。

这边产生了一个矛盾,操作系统抽象出来的进程、线程概念并不能完成符合对游戏世界的表达。

Actor模型的优势

从对游戏内容抽象的角度看,Actor模型的理念——万物皆Actor,能够充分表达游戏元素。

Actor模型由来已久,早在1973年,CarlHewitt提出Actor并发计算的理论模型;1991年爱立信推出的编程语言Erlang将Actor模型融入到语言里,并应用在通信领域;2009年前后,珠三角的一些游戏公司开始大规模的将Erlang语言应用于游戏领域。

优势一:对世界的表达

Actor模型是更进一步的面向对象,把世间万物都当做Actor对象。Actor可以代表一个角色、一只动物,也可以代表整个游戏场景。下图展示一种用Actor模型抽象的游戏世界,方括号代表Actor的类型,id代表Actor的标识,中间文本代表名称。它能够很好的表达世间万物。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第5张图片

图:万物皆Actor,图片来自《百万在线》第1章

优势二:并发性

由于各个Actor之间相互独立,意味着CPU可以并行的调度它们,符合CPU的运行特性。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第6张图片

Actor模型的调度,图片来自《百万在线》第11章

例子

Erlang、Skynet通过内部处理,让每个Actor都很轻量,在斗地主游戏的例子中,可让每张桌子独立分开,让游戏逻辑更符合现实世界。同时,Actor与多进程模型同样具备天然分布式属性,不同的桌子可以运行在不同的物理机上。

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第7张图片

Actor模型提供了更多灵活性,图片来自《百万在线》第1章

分布式程序的前提是游戏逻辑能够被分割,而如果程序模型的灵活性较高,自然也就为业务逻辑的分割提供便利。从这个角度看,Actor并发模型给游戏业务的分割提供了灵活性。

总结

Actor模型既要符合硬件资源的运行特性,也能够符合对游戏内容的抽象;再加上页游时代广州一些游戏公司选择Erlang语言的机遇,使得Actor在游戏服务端领域有其用武之地。

本文摘编自《百万在线:大型游戏服务端开发》

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第8张图片

《百万在线:大型游戏服务端开发》是基于C++与Lua语言开发游戏服务端的入门图书,内容涵盖Skynet引擎、CH底层开发、服务端架构设计等多个方面,全面展现网络游戏核心技术。

作者,罗培羽,现就职于广州四三九九公司技术研发中心,致力于深耕游戏技术、追逐前沿科技成果,一直进行不倦的探索。著有《Unity3D网络游戏实战》等计算机图书,所著图书被部分高校的软件工程专业选为教材。

61a59fd5f4fff97194bd0487dd73538e.gif

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第9张图片

扫码关注【华章计算机】视频号

每天来听华章哥讲书

fefd9b27b884a32ae4965f473e6fa096.gif

更多精彩回顾

书讯 | 10月书讯(下) |  小长假我读这些新书

书讯 | 10月书讯(上) |  小长假我读这些新书

资讯 | 什么是图数据库?图数据库实践与创新浅析

书单 | 你们要的Java学习路线图来了

干货 | 数字化转型的1个目标,3大领域,6大因素和9个环节

收藏 | 两本书助你构建智能计算系统知识树

上新 | 【新书速递】从技术小白到开发大牛,这本实验教程带你手把手全栈开发!

赠书 | 【第75期】《失控玩家》引发的思考:我们究竟离真正的人工智能有多远?

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第10张图片

游戏服务器为什么选用Actor模型,《百万在线》给你答案_第11张图片

点击阅读全文购买

你可能感兴趣的:(游戏,java,编程语言,人工智能,大数据)