孢子框架-网络游戏架构与微服务架构简单对比

  笔者十年前做过网络游戏,当第一次看到微服务架构就发现它和网络游戏架构很像,如下图:

  

  先来简单介绍一下这个网游架构,有些东西记不清了,如今的网游大牛看到可别丢砖头。

用户下载网游客户端,登录网游,首先会执行登录服务,登录服务主要就是给你分配一个网关,因为网关后面连接的才是真正的游戏服务器。登录后,进入游戏,发出指令,比如你移动到某个位置,这个指令会先发送到网关,然后再由网关识别发送到“移动系统”服务,移动系统计算后再经由网关发送给玩家客户端,玩家客户端执行一个动画让你移动到某个位置。

假如子服务间要通信也是通过网关转发,比如任务系统里面要购买物品,那么任务系统发一个指令消息给网关,网关再转发给物品系统等等。图中的“游戏A服务器集群”,其中“游戏A”代表你所属的游戏服务器,每个游戏服务器能承载的人数是有限的(当时的技术一个服务器组最多同时在线也就几千人),人数满了,你就要登录到另外的服务器。“集群”表示服务部署的集群。每一个明面上的游戏服务器,对应一个N台服务器构成的游戏服务集群,但只对应一个用户数据库,数据库没有使用集群技术,因为你即使使用了数据库集群技术,在实时性方面也跟不上。

从编程上来讲,包括以下应用:

客户端.exe

网关.exe

移动系统.exe

聊天系统.exe

….

说到这里,了解微服务的人可能看出来了,上面的网关就好比nginx反向代理服务器,每一个游戏服务就好比微服务中的服务,如果你的微服务通信协议使用的是TCP那后面服务部分基本就一模一样了。网络游戏中数据访问没有分层直接放到业务处理模块,在游戏中每一个游戏执行逻辑不管是加载脚本、配置数据还是账户数据都是在同一个逻辑中处理的,不会去划分出什么数据库访问层、脚本访问层,这样处理有一个很大的好处,那就是可以处理复杂的逻辑,而又不用丧失效率。

在网游中,因为服务间通信的是二进制消息,在编程时解析消息和组装消息非常麻烦,因此需要设计一个统一的类库,这个类库把二进制消息传递直接变成面向对象调用。比如你调用了一个方法,其实就是向网关发送了一个二进制消息。这用在微服务这里也是一样的,让接口的收发消息变成面向对象调用,可以提高编程开发的效率,又能降低通信所产生的bug,孢子框架中的接口访问层也完成类似功能。

至于说分布式事务的问题,在网游开发中比较容易就可以解决(即使解决不了还有客服),因为所有事物相关数据都在一个数据库,即使不在一个数据库也是通过消息去同步。比如你砍了怪物一刀,你的等级数据上升、体力下降都在一个服务里计算的,假如怪物被砍了一刀的计算不在这个服务里,那么会发一个消息给那个服务,那个服务计算怪物被砍了一刀,如果计算失败,再回发一个消息给前一个服务来协同这方面,如果被砍死了掉物品了,就发一个消息给物品服务去计算,物品服务再回发消息与主计算协同。这其实就是通过消息机制进行事务协同最原始的版本。

和微服务对比归纳一下:

游戏(Gate网关)相当于:微服务(nginx或API Gateway)

游戏(个体服务)相当于:微服务(个体服务)

游戏(接口访问层)相当于:孢子框架(接口访问层)

另外微服务中流行的分布式事务解决方法也是通过消息来实现,比如支付,调用方调用支付接口失败,发一个失败消息给消息队列,支付接口服务监听消息队列并处理支付失败。

时间: 2024-12-20 18:25:11

孢子框架-网络游戏架构与微服务架构简单对比的相关文章

单体架构还是微服务架构,这是个问题?

(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 微服务架构现在越来越流行,那么是不是就意味着单体架构不再成为我们的选择了呢?个人认为这个要依情况而定. 现在谈及微服务架构的文章.演讲随处可见,似乎所有系统的架构都开始尽情拥抱微服务架构,包括笔者前久为一个异构电商平台系统设计的架构也选用了这种风格.然而,我们在选择微服务架构之前,一定要问一句"你现在面对的系统,微服务架构是一个好的选择吗?".当然,这个问题也是我这几天在思考的.

Java高可用集群架构与微服务架构简单分析

前言 可能大部分读者都在想,为什么在这以 dubbo.spring cloud 为代表的微服务时代,我要还要整理这种已经"过时"高可用集群架构? 本人工作上大部分团队都是7-15人编制的开发团队,对应的公司项目也大都是中小型项目,最大的项目 PV/UV 也就只有 10w/2w .在这样的场景下,中小型公司一般都是创业起步没多久,大部分都需要本着"开源节流"."以最小的成本把产出最大化".微服务架构相比于高可用集群架构,个人理解,对于技术团队的成员

软件架构设计学习总结(22):软件架构——分层架构、事件驱动架构、微内核架构、微服务架构、基于空间的架构

分层架构 (Layered Architecture) 分层架构是最常见的架构,也被称为n层架构.多年以来,许多企业和公司都在他们的项目中使用这种架构,它已经几乎成为事实标准,因此被大多数架构师.开发者和软件设计者所熟知.比如MVC. 分层架构的一个特性就是 关注分离(separation of concerns) .在层中的组件只负责本层的逻辑.组件的划分很容易让它们实现自己的角色和职责,也比较容易地开发,测试管理和维护. 我们需要这样的冗余,即使业务层没有处理业务规则,也要通过业务层来调用数

Android系统架构之微服务架构

目录 一.微服务架构模式 1.1 模式描述 1.2 模式拓扑 1.3 避免依赖与调度 1.4 注意事项 1.5 模式分析 二.Android中的微服务架构 三.结语 前段时间我们翻译的<软件架构模式>( 完整书籍的地址 ) 对外发布之后得到了大家的一致好评,书中讲述了五种经典.流行的软件架构模式,同时分析了五种模式的实现.优缺点等,为我们的开发工作提供了很有价值的指导.但是<软件架构模式>的问题在于没有结合具体的示例来让这些理论知识更易于吸收,因此有些同学在我的开发群反馈: 书看起

企业应用架构之微服务架构

微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活.更能适应现在需求快速变更的大环境. 本文将介绍微服务架构的演进.优缺点和微服务应用的设计原则,然后着重介绍作为一个"微服务应用平台"需要提供哪些能力.解决哪些问题才能更好的支撑企业应用架构. 微服务平台也是我目前正在参与的,还在研发过程中的平台产品,平台是以SpringCloud为基础,结合了普元多年来对企业应用的理解和产品的设计经验,逐步孵化的一个微服务应用平台. 目录:

Java高级架构:微服务架构的核心概念

微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: 需要Registry,实现动态的服务注册发现机制: 需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑: 同步调用还是异步消息传递,如何保证消息可靠性?SOA由ESB来集成所有的消息: 都需要统一的Gateway来汇聚.编排接口,实现

SOA 架构与微服务架构的区别

注重重用,微服务注重重写 SOA 的主要目的是为了企业各个系统更加容易地融合在一起. 微服务通常由重写一个模块开始.要把整个巨石型的应用重写是有很大的风险的,也不一定必要.我们向微服务迁移的时候通常从耦合度最低的模块或对扩展性要求最高的模块开始. 把它们一个一个剥离出来用敏捷地重写,可以尝试最新的技术和语言和框架,然后 单独布署.它通常不依赖其他服务.微服务中常用的 API Gateway 的模式主要目的也不是重用代码. 而是减少客户端和服务间的往来.API gateway 模式不等同与 Fac

微服务架构(Microservice Architecture)

之前一段时间,有听部门架构说起接下来公司要使用微服务架构来研发系统,当时没怎么在意,因为是第一次听说微服务这个名词(果然无知者无畏啊):正好赶上五一假, 我自告奋勇的,接了编写微服务架构培训文档这个任务(也许因为我是文科生,文笔稍微好点).五一假期三天,基本都是在看资料,梳理思路以及编写接下来的培训文档中度过. 下面,就说说我这几天的一些收获吧:先说说资料来源吧:有架构给我的一些资料,以及自己百度和论坛.社区找来的一些资料,权当做一个总结式的简介... 目录如下: 一.微服务架构介绍 二.出现和

微服务架构设计

微服务 软件架构是一个包含各种组织的系统组织,这些组件包括 Web服务器, 应用服务器, 数据库,存储, 通讯层), 它们彼此或和环境存在关系.系统架构的目标是解决利益相关者的关注点. Conway’s law: Organizations which design systems[...] are constrained to produce designs which are copies of the communication structures of these organizati