skynet 和 kbengine 的比较

2020-10-05 15:18:58 +08:00
 gantleman

全文地址 zhuanlan.zhihu.com/p/260753536

技术背景

skynet 和 kbengine 都是国内知名的分布式游戏服务器引擎。

在游戏服务器架构转向分布式技术过程中都吸引了大量的游戏公司和程序员。

这两个引擎的特点是都是分布式结构。所不同的是 skynet 支持线程模式而 kbengine 只支持多进程模式。

游戏服务器最初大部分都是 C 或 C++开发的。因为游戏服务器对性能要求非常的高。属于 CPU 密集型服务器。

但 C 或C++最大的问题就是软件崩溃。随着功能的增加,软件的膨胀。导致崩溃的问题越来越难解决。所以崩溃问题严重限制了服务端软件的规模。

与互联网软件要求不同的是,因为游戏服务器对性能的极高要求。导致了互联网软件可以牺牲部分性能使用 java 来解决崩溃问题。因为解决了崩溃问题互联网服务器规模得以进一步的增加。这部分性能的损失互联网服务器又通过分布式的方法进行了弥补

游戏服务器虽然有强烈意愿转向分布式以获得更多功能,但大部分公司无力承担分布式架构的高技术成本。因为传统的 java 分布式架构的代价极高。需要大量开发人员进行维护。

分布式的技术发展路线可以总结如下。由C语言转向脚本语言以避免崩溃问题。没有了崩溃问题就可以引入更多的开发人员。而更多的开发人员和分布式结构抵消了脚本语言带来的性能下降,并带来了更多的功能。更多的功能给公司带来了很好的收益。

但游戏公司和互联网公司完全不同。游戏属于功能密集型的软件。游戏公司养不起哪么多的开发人员来维护哪么多的分布式功能。互联网公司的一个功能可以好几个开发人员来维护。而游戏公司的一个程序要维护好几个游戏功能。这种差异导致了分布式技术在游戏公司推广困难。

在这样的背景下诞生了 skynet 和 kbengine 两个比较成功的服务器引擎。

全文地址 zhuanlan.zhihu.com/p/260753536

6726 次点击
所在节点    游戏开发
15 条回复
sryanyuan
2020-10-12 10:11:04 +08:00
啥时候 c/c++最大的问题变成崩溃了,感觉像所有 c/c++写的软件都会定期崩溃一样。难道不应该表述成 写出可靠性高的软件要求高,成本高,并且崩溃问题定位解决比较困难
floyda
2020-10-12 10:33:39 +08:00
TDengine 了解一下~
gantleman
2020-10-12 10:46:32 +08:00
@sryanyuan 查不出来的崩溃问题,可不就变成了定期崩溃。
gantleman
2020-10-12 10:46:45 +08:00
@floyda 广告?
livepps
2020-10-12 11:04:54 +08:00
我们项目用 c++,几百个服,每个服十几个进程,一年所有服务器崩溃的次数加起来,小于 10 次,这个在游戏服务端,还是可以接受的,有稳定的底层框架,在上面做业务功能,除非水平太差,不然很少会出现崩溃的情况。
gantleman
2020-10-12 12:05:25 +08:00
@livepps 从统计学的角度看, 一个软件能不能发展成屎山取决于 3 个因素。

1,功能的数量。
2,开发人员的数量。
3,功能和人员变化的频率。

贵公司的软件没有变成屎山只是因为数量还不够多,频率还不够快。
jmc891205
2020-10-12 12:24:25 +08:00
看来用 Rust 另起炉灶在游戏服务器开发领域很有潜力
floyda
2020-10-12 21:17:47 +08:00
Rust 跑得起来就很难崩, 除非你在 unsafe 里面乱搞 (¬◡¬)
dabaibai
2020-10-16 23:12:23 +08:00
服务器自己写安心
gantleman
2020-10-17 09:32:37 +08:00
@dabaibai 支持大佬
pluswu1986
2020-11-25 09:38:08 +08:00
rust 这写逻辑不是失了智嘛
guyeu
2020-12-12 18:13:50 +08:00
其实不太能理解游戏服务器对性能要求非常高这种结论是怎么来的。。。对客户端来说,绝大多数 RTT 都在网络传输上,无论服务器实现成什么样,也就是响应时间增减几毫秒的问题,当然可能有个别业务特别耗时,但不会影响玩家的整体体验。因此,为啥非得上 C++呢。。。Java+ZGC 可以把暂停时间控制在 10ms 以内,大多数时候不超过 2ms 。。
gantleman
2020-12-14 10:08:16 +08:00
@guyeu 你只考虑一个客户端,服务器是几千上万个客户端。角度不同结论不同。
guyeu
2020-12-14 16:42:10 +08:00
@gantleman emmmm 可能是我没说清楚。“游戏服务器对性能要求非常的高”这种结论一般是横向对比 web 服务器得出的,通常的逻辑链条是:游戏业务延迟敏感+连接数少运算量大 = 性能要求高 --> 要用 C++实现。我想说的是,在客户端的角度,服务器实现成什么样并没有区别,所以,没必要非得上 C++。
ddonano
2023-01-03 18:17:31 +08:00
@guyeu 目前使用了 quarkus 实现了游戏的消息同步模块,感觉使用良好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/712622

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX