首页 > 其他分享 >skynet非单点类型节点的管理(一):玩家代理节点

skynet非单点类型节点的管理(一):玩家代理节点

时间:2024-03-30 16:00:35浏览次数:18  
标签:单点 玩家 proxy skynet id 节点 user

单个skynet进程,或者说单台机器的承载业务能力是有上限的,对于负责玩家主要业务的节点,横向扩展以提高游戏承载能力是必须的。

对于滚服架构,玩家角色与指定业务节点(单服)固定对应,连接游戏业务前通过中央后台获取到指定信息进行连接。承载能力通过新增单服完成,这里我们只对世界服架构做探讨。

我们将负责玩家主要业务逻辑的skynet节点类型称为user,将负责验证登入身份信息的skynet节点称为login,单个接入的玩家使用独立的lua虚拟机代理,称之为agent,玩家唯一id称为role id。那么user必然需要是非单点且支持动态分配扩展的,现在探讨以下几个问题:

  1. user节点如何分配

即登入时如何为agent分配目标user;这显然是在login节点上处理的逻辑,节点需要维护集群内user节点相关信息,讨论两个实现方案:

方案一:根据各节点当前承载情况动态分配。

方案二:根据role id硬哈希分配。

方案一支持根据当前各个user承载情况为接入玩家动态分配一个可用user节点,需要支持监测所有user状态、实时承载等信息;玩家与节点无强制关联关系,可能被分配到所有的节点上;方案支持热调整user机器,风险在于维护的user信息需要准确可信;

方案二根据登入的role id与当前可用的user列表哈希计算映射到指定的user节点上。类似滚服分服的思路,将指定role id跟指定的user节点固定对应,单节点异常影响范围在单节点内,相对可控但线上调整机器复杂;

对于上述方案一,user是根据登入时刻各节点状态动态分配的,那么就需要在服务器内维护一份roleid 2 user的数据,用于查询指定roleid当前所在user节点,这份数据需要是集群内可共享的,这里给出一个临时方案:使用redis缓存,节点内定时获取更新;

对于方案二,在可用user列表不变的情况下,哈希结果是固定的,roleid被分配到固定的user上,可以通过本地计算得出,从实现角度来看较方案一简洁;

  1. 节点间交互如何实现

我们希望外部节点(这里指集群内的非user节点)不必关心user的规模也不需引入user的分配等实现细节,将user当成寻常的单点节点进行交互;同样的,user之间的通信也不希望引入user分配的细节;

这时候我们实现一个代理类型的节点,暂时称之为user_proxy,user_proxy节点代理所有user节点之间、以及其他非user节点发送到user节点的消息转发工作;

比如:当login节点向roleid发送消息时,login节点将消息发送到user_proxy节点,由user_proxy节点计算得到目标agent所在的user节点,将消息进行转发;同样的,user对另一台user进行通信时,也不必关心目标agent跑在哪台user上,将消息交给user_proxy转发就可以了;

特别的,当我们从外部节点向user广播消息时,可以由user_proxy节点转发广播消息到所有user节点,这样对于外部节点来说,只是做了一次寻常的跨进程调用而已;

代理节点压力取决于user,同样需要是非单点,每个user节点开启时分配一个user_proxy代理使用。

标签:单点,玩家,proxy,skynet,id,节点,user
From: https://www.cnblogs.com/linxx-/p/18105618

相关文章

  • 关于集群节点timeline不一致的处理方式
    关于集群节点timeline不一致的处理方式本文出处:https://www.modb.pro/db/400223在PostgreSQL/MogDB/openGauss数据库日常维护过程中,如果多次对数据库进行角色切换,可能会出现timeline不一致的情况,导致备库不能正常加入到数据库集群,现在以PG为例对这些可能发生的情况进行......
  • 代码随想录第22天 | 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.
    235. 二叉搜索树的最近公共祖先 235.二叉搜索树的最近公共祖先-力扣(LeetCode)代码随想录(programmercarl.com)二叉搜索树找祖先就有点不一样了!|235.二叉搜索树的最近公共祖先_哔哩哔哩_bilibili给定一个二叉搜索树,找到该树中两个指定节点的最近公共祖先。百度百......
  • 单目图像加单点测距,求解目标位姿
    单目图像加单点测距,求解目标位附赠自动驾驶学习资料和量产经验:链接单目相机通过对极约束来求解相机运动的位姿。参考了ORBSLAM中单目实现的代码,这里用opencv来实现最简单的位姿估计。对极约束的概念可以参考我的这篇VisualSLAM--理解对极几何和约束19赞同·0评论文章......
  • KingbaseES V8R6集群运维案例之---级联备库upstream节点故障
    KingbaseESV8R6集群运维案例之---级联备库upstream节点故障案例说明:在KingbaseESV8R6集群,构建级联备库后,在其upstream的节点故障后,级联备库如何处理?适用版本:KingbaseESV8R6集群架构:案例一:一、配置集群的recovery参数(allnodes)Tips:关闭备库的aut-recovery机制......
  • 【前端】- 在使用Element UI 的el-tree组件时,从底层去研究如何去实现一键展开/关闭【t
    第一步:首先我们先去查看elementui官方文档,发现并没有提供这个方法,没办法,只能手写一个了,先给大家看看功能点击前效果:点击后效果:第二步:废话不多说直接上代码,然后我们简单解释下代码页面部分:这里是简单的数结构渲染,不多讲,$refs.Reftree获取的是el-tree的实例,具体作用请看下......
  • net core SSO 单点登录和控制器中获取Token和UserId
    netcoreSSO单点登录和控制器中获取Token和UserId在写WebApi时常常是要获取登录用户的oken和UserId的,本文就这个需求来分享一下我在实际项目中的处理代码。代码控制器中注入[ApiController]//[Authorize][ServiceFilter(typeof(LDAPPLoginFilter))][Route("/file/api/......
  • Redis Map数据结构中相同key不同的字段会分散多节点存储吗?
    目录结论说明 结论   无论是单实例Redis还是Redis集群,一个Map数据类型的key对应的所有字段和值都存储在同一台机器上。在Redis集群中,这是通过哈希槽机制来保证的,确保了对同一个key的操作不需要跨节点通信,从而提高了操作的效率。说明    Redis的Map数据类......
  • Ant Design Vue Tree 选中子节点同时半选中父级节点
    需要实现的效果:1、子菜单如果不是全部选中,一级菜单半选。2、子菜单全选,一级菜单选中。3、一级菜单选择,二级菜单全选。4、没有二级菜单,则只控制一级菜单。主要用到的属性是checked和halfCheckedKeys,通过手动控制那些菜单选中,那些半选中实现功能。**页面截图:**完整代码如......
  • KingbaseES 执行计划常见节点介绍
    KingbaseES中explain命令来查看执行计划时最常用的方式。其命令格式如下:explain[option]statement其中option为可选项,常用的是以下5种情况的组合:analyze:执行SQL并且显示实际的运行时间和其他统计信息,默认FALSE。注意:加了analyze会真正执行SQL语句verbose:显示附加信息,比如......
  • Centos7.9 部署mongodb高可用集群 3节点
    一、部署准备1.三台节点准备192.168.145.172192.168.145.173192.168.145.1742.官网地址:社区版传送门3.选择对应的版本并下载4.创建用于存放数据、日志文件和配置文件的文件夹mkdir-p/data/mongodbmkdir/var/log/mongodbmkdir/etc/mongodb5.解压安装包,配置环境......