skynet redis mysql_skynet游戏服务器框架分享

news/2024/9/6 6:09:54 标签: skynet redis mysql

分享下我之前做的服务器框架;  游戏在线最高3万;  物理机I7的3台阿里云分服;性能及其强劲;

框架: 底层基于比较流行的skynet,基础采用c语言,脚本lua,部分服务golang;

Skynet: 是一个基于C跟lua的开源服务端并发框架,这个框架是单进程多线程Actor模型。所以他对于机器的性能压榨是很高的。

特点:

1. 性能: 底层采用了多线程+多luastate+协程, 性能优秀

2. 简单: 采用了actor模型,并发无锁,上层coding无感知

3. 沙盒: 利用多线程中lua coroutine的应付IO密集型的优秀能力; 也用lua沙盒做到了环境的软隔离;

缺点:

未引入分布式的zookeeper协调控制,采用了world的单点模型,容灾性较差,服务发现也比较原始;

1d6d13b0d85e973188576ef872bae98d.png

前端:

proxy:

代理层; 独立进程部署, 主要由原生的go编写;

用来兼容接收多种socket  以便支持 tcp,udp, websocket;

负责桥梁搭建:

第一条:  client->proxy->gate;

第二条: client->proxy->ms service

gate:

网关层; 独立服务, 支持横向扩展,主要是进行client-proxy-gate之间的

连接管理;  与所有game进程直连;  也与ms service的网关相连

逻辑层:

game service:

游戏逻辑服务, 支持横向扩展; 主要是处理基于有状态的相关模块:如战斗,技能,副本等;

ms service:

微服务模块; 抽象出 微服务gate,接收其他服务直连,转发相关消息至微服务集群;

主要分担gate的连接压力,并且分担逻辑方面game service的相关压力

处理模块: 客户端配置获取, 签到, 活动, 小红点, 邮件, 聊天, 工会, 开关等等此类 无状态的逻辑;

30217c83302151d7f8c912a35fc7958d.png

7a163541cc2aa503739dfbdd40242e60.png

world service:

顶层世界服务模块; 与几乎所有的service进行连接;

主要是管理所有的服务,玩家状态等等; 以及做一些广播,组播; 也提供热更的对外接口; 也提供一些简单的业务逻辑: 诸如全服boss等;  会有slave保证高可用;

数据层:

825514b8a5f3caed17bbc7d8760c3ea8.png

DB service:

数据层; 主要负责与redis进行直连;  也与mysql进行直连;

每个game service会定时将data的更新发送到DB service; ms service 则会根据业务情况决定是否直接找DB service进行数据交换还是 找game service进行数据交换;

redis:

采用了哨兵集群模式,开启 AOF

mysql:

作用有二:

1: 冷备, 回档

2: 提供一些简单的关系型查询;一般是对实时性不敏感的需求;

append data service:

数据记录; 主要是追加模式写数据更新到db的记录; 便于查档,归档;

DB daemon service:

独立进程,进行redis的"脏数据"写入到mysql中,并且写入成功后追加到append data中;  可以配置 以事务和批量的模式进行写入;

辅助层:

rabbit mq:

------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------

底层核心:

?code=0ac5ed1fe1ff2ab1b9b9e6b509cfb911_8f118824ce50c961_boxcnfIxXXga4zDrRZhdoj0CUIb_ePO8YexA1uQh3gtVrH7USjQtl4qvRuqQ

?code=208fdbaf161237138da74e5e394e1ddb_8f118824ce50c961_boxcnAoNXyJ6KIagjcwJtZpVPDc_RgNjhZHtJi7rYasJaEED6x60bYXYzijD


http://www.niftyadmin.cn/n/1292974.html

相关文章

使用存储过程将Oracle数据批量导出为多个csv文件

数据库有如下表结构: user_info ( user_id NUMBER primary key,user_name VARCHAR2(200) NOT NULL, user_age VARCHAR2(80),create_date DATE,create_order NUMBER ) 现在有100万条记录,要求每1000条记录导出为一个csv文…

清华大学计算机秦凌霄,海南25名考生获得北大清华自主招生入选资格

2017年普通高校特殊类型招生考生名单公示北大清华自主招生25人次获入选资格南国都市报7月4日讯(记者 黄婷)3日,省考试局对2017年普通高校特殊类型招生考生名单进行公示,共25人次获得北大、清华自主招生入选资格。2017年取得高校自主招生入选资格考生名单…

企业如何选择合适的信息化管理系统?这篇文章告诉你

一、什么是信息化管理系统 信息化这个词近年来已经说“烂”了,在这个信息化快速发展的时代,企业信息化管理系统已经成为了企业发展的必要条件之一。 信息化管理系统是指通过计算机和信息技术来支持和优化企业的管理活动的一种系统。它将信息技术与管理…

详细设计 英文_工业产品设计快题高分解析

点击上方蓝字关注“土著设计”公众号,获取更多资讯对于想要考工业设计研究生的同学来说,在考场上用有限的时间交出一份满意的快题答卷是取得高分必不可少的环节,那么什么样的快题试卷才能获取阅卷老师的青睐呢?下面的这些要素是土…

pandas 空字符串与na区别_pandas 读取文件时把'NA'字符串读作空值,但是这个并不是真的空值,怎么解决?...

问:pandas 读取文件时把NA字符串读作空值,但是这个并不是真的空值,怎么解决?答:pandas 读取文本的时候会默认将如下字符串作为空值处理:‘’, ‘#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’…

邮箱echage服务器,一些EXCHANGE命令

1.获取所有邮箱使用情况,按大小排序输出到磁盘Get-Mailbox | Get-Mailboxstatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,{label"TotalItemSize(KB)";expression{$_.TotalItemSize.Value.ToKB()}},ItemCount >d:\1.csv2.通过用…

python执行cmd命令行报错捕捉_Python程序在命令行执行提示 ModuleNotFoundError: No module named 'XXX' 解决方法...

在Pycharm等IDE中执行Python程序,默认设置启动路径为项目根目录,所以直接执行是没有问题的。但是在cmd命令行窗口中执行程序,所在路径是Python的搜索路径,如果涉及到import引用就会报类似 ImportError: No module named xxx 这样的…

svn项目服务器地址,svn服务器项目的地址

svn服务器项目的地址 内容精选换一换虚拟IP地址用于为网卡提供第二个IP地址,同时支持与多个弹性云服务器的网卡绑定,从而实现多个弹性云服务器之间的高可用性。该接口用于解绑定弹性云服务器网卡的虚拟IP地址。解绑后,网卡不会被删除&#xf…