mqant框架概述

二向箔
• 阅读 3961

mqant经过4个月的发展,目前已在github上获得了300多的star,相信在大家的努力下mqant将在未来更加光彩

现如今只有多进程的架构才能达到支撑较多在线用户,降低服务器压力,降低单点故障所带来的影响等要求,因此一个真正高可扩展的游戏运行架构必须是多进程的。

然而在游戏的开发和运营也是按步骤阶段性进行的,尤其是现如今服务器硬件设备配置也越来越高的前提下,在游戏刚开始运营时单台服务器就足够支撑了,况且多进程部署所带来的运维成本也相对较高。

mqant的设计思想是在能用单台服务器时能让充分挖掘服务器的性能,而在需要多进程时再通过简单的配置就可以实现分布式部署。

mqant游戏服务器的运行架构

mqant框架概述
mqant服务器是按模块来划分功能模块的,例如 用户管理,在线聊天,战斗平台等等都应该划分为独立的模块

模块之间通过RPC通讯,mqant底层会根据实际情况选择rpc数据交互的通信渠道,在调用模块在同一个进程的情况下直接使用golang chan通讯,因此同进程内模块通信性能不受影响。

每一个模块可以注册多个处理器(handler), 处理器分为 backend/frontend 两种模式

frontend 提供给客户端调用的

backend 提供个后端模块之间相互调用的

frontend的约定

frontend与backend实际上是相同的,唯一的不同是我们约定frontend命名已"HD_"开通,同时frontend函数的参数类型也固定

mqant游戏服务器架构示意图

mqant框架概述

模块间通信RPC

mqant中的RPC被封装为通用接口,底层可以根据需求在切换为如grpc,zerorpc等其他RPC通道,但目前mqant默认使用的远程通信通道是rabbitmq消息队列。

为什么这样选择?

选择消息队列而不选择传统的tcp/socket rpc的主要考虑是传统的基于点对点service/client模式的连接比较难于维护和统计,假如服务器存在100个模块和服务器的话进一个进程所需要维护的client连接就>100个(计算可能不太准确(^—^)).

而选择消息队列的话每一个进程对每一个模块只需要维护一条连接即可,同时rabbitmq有完善的监控,报警工具,可以随时监控模块的处理性能和实时性。

另外关于消息队列可能面临消息转发出现瓶颈的问题,mqant是可以按每一个模块单独配置自己的消息队列服务器的,因此在未来可以横向扩展

点赞
收藏
评论区
推荐文章
捉虫大师 捉虫大师
4年前
dubbo网关演进之路
本文已收录https://github.com/lkxiaolou/lkxiaolou欢迎star。背景随着公司业务的飞速发展,基于php的模块化架构难以支持未来业务的发展:php模块化架远远落后于行业主流架构(微服务–云原生),而php生态的服务治理开源组件匮乏,研发投入过大杭州php人才匮乏,导致新鲜血液招聘困难基于php的多进程架构难以支撑
我在京东做研发第五期:京东云自研服务器,如何将开发成本降低 60% 的同时还更低碳环保?
随着互联网的不断发展,各类技术工程对cpu算力的需求持续飙高,这不仅带来了技术上的压力,对电力能耗的需求也越来越大。为在有限的电力内达到最佳的效果,京东云自研服务器围绕三大主轴,提升性能效率、降低整体成本,让地球环境可以永续经营。
如何规避MyBatis使用过程中带来的全表更新风险
不知大家在使用MyBatis有没有过程人工梳理代码的经理?但由于web应用数量多,代码行数几十万行,人力梳理代码费时又费力。基于此,架构师根据MyBatis的扩展点推出一款插件做到降低全表更新的风险,降低人工成本。
Stella981 Stella981
3年前
Exceptionless
<divid"cnblogs\_post\_body"class"blogpostbodycnblogsmarkdown"<h1id"exceptionless.netcore开源日志框架"Exceptionless.NetCore开源日志框架</h1<blockquote<p作者:markjiang7m2<b
Stella981 Stella981
3年前
DBeaver笔记
<divclass"markdown\_views"<p公司使用的是PostgreSQL数据库,可以使用pgAdmin或者DBeaver进行连接该数据库。个人更喜欢用DBeaver,因为其界面更加美观,操作也相对简单。对于习惯了eclipse的开发者来说,DBeaver绝对是个不错的选择。</p<blockquote<pDBeaver
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
MySQL(mariadb)多实例应用与多实例主从复制
MySQL多实例mysql多实例,简单理解就是在一台服务器上,mysql服务开启多个不同的端口(如3306、3307,3308),运行多个服务进程。这些mysql服务进程通过不同的socket来监听不同的数据端口,进而互不干涉的提供各自的服务。在同一台服务器上,mysql多实例会去共用一套mysql应用程序,因此在部署mysql
Stella981 Stella981
3年前
Linux日志安全分析技巧
0x00前言我正在整理一个项目,收集和汇总了一些应急响应案例(不断更新中)。GitHub地址:https://github.com/Bypass007/EmergencyResponseNotes本文主要介绍Linux日志分析的技巧,更多详细信息请访问Github地址,欢迎Star。0x01日志简介Lin
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
计算机视觉与信息取证技术讲解
今晚20:0022:00人工智能技术与自信计算机视觉就是用各种成像系统代替视觉器官作为输入敏感手段,由计算机来代替大脑完成处理和解释。计算机视觉的最终研究目标就是使计算机能象人那样通过视觉观察和理解世界,具有自主适应环境的能力。要经过长期的努力才能达到的目标。因此,在实现最终目标以前,人们努力的中期目标是建立一种视觉系统,这个系统能依据视觉敏感和反馈的某
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
二向箔
二向箔
Lv1
晨起动征铎,客行悲故乡。
文章
3
粉丝
0
获赞
0