全文地址 zhuanlan.zhihu.com/p/260753536
技术背景
skynet 和 kbengine 都是国内知名的分布式游戏服务器引擎。
在游戏服务器架构转向分布式技术过程中都吸引了大量的游戏公司和程序员。
这两个引擎的特点是都是分布式结构。所不同的是 skynet 支持线程模式而 kbengine 只支持多进程模式。
游戏服务器最初大部分都是 C 或 C++开发的。因为游戏服务器对性能要求非常的高。属于 CPU 密集型服务器。
但 C 或C++最大的问题就是软件崩溃。随着功能的增加,软件的膨胀。导致崩溃的问题越来越难解决。所以崩溃问题严重限制了服务端软件的规模。
与互联网软件要求不同的是,因为游戏服务器对性能的极高要求。导致了互联网软件可以牺牲部分性能使用 java 来解决崩溃问题。因为解决了崩溃问题互联网服务器规模得以进一步的增加。这部分性能的损失互联网服务器又通过分布式的方法进行了弥补
游戏服务器虽然有强烈意愿转向分布式以获得更多功能,但大部分公司无力承担分布式架构的高技术成本。因为传统的 java 分布式架构的代价极高。需要大量开发人员进行维护。
分布式的技术发展路线可以总结如下。由C语言转向脚本语言以避免崩溃问题。没有了崩溃问题就可以引入更多的开发人员。而更多的开发人员和分布式结构抵消了脚本语言带来的性能下降,并带来了更多的功能。更多的功能给公司带来了很好的收益。
但游戏公司和互联网公司完全不同。游戏属于功能密集型的软件。游戏公司养不起哪么多的开发人员来维护哪么多的分布式功能。互联网公司的一个功能可以好几个开发人员来维护。而游戏公司的一个程序要维护好几个游戏功能。这种差异导致了分布式技术在游戏公司推广困难。
在这样的背景下诞生了 skynet 和 kbengine 两个比较成功的服务器引擎。
1
sryanyuan 2020-10-12 10:11:04 +08:00
啥时候 c/c++最大的问题变成崩溃了,感觉像所有 c/c++写的软件都会定期崩溃一样。难道不应该表述成 写出可靠性高的软件要求高,成本高,并且崩溃问题定位解决比较困难
|
2
floyda 2020-10-12 10:33:39 +08:00
TDengine 了解一下~
|
5
livepps 2020-10-12 11:04:54 +08:00
我们项目用 c++,几百个服,每个服十几个进程,一年所有服务器崩溃的次数加起来,小于 10 次,这个在游戏服务端,还是可以接受的,有稳定的底层框架,在上面做业务功能,除非水平太差,不然很少会出现崩溃的情况。
|
6
gantleman OP @livepps 从统计学的角度看, 一个软件能不能发展成屎山取决于 3 个因素。
1,功能的数量。 2,开发人员的数量。 3,功能和人员变化的频率。 贵公司的软件没有变成屎山只是因为数量还不够多,频率还不够快。 |
7
jmc891205 2020-10-12 12:24:25 +08:00
看来用 Rust 另起炉灶在游戏服务器开发领域很有潜力
|
8
floyda 2020-10-12 21:17:47 +08:00
Rust 跑得起来就很难崩, 除非你在 unsafe 里面乱搞 (¬◡¬)
|
9
dabaibai 2020-10-16 23:12:23 +08:00 via Android
服务器自己写安心
|
11
pluswu1986 2020-11-25 09:38:08 +08:00 via Android
rust 这写逻辑不是失了智嘛
|
12
guyeu 2020-12-12 18:13:50 +08:00
其实不太能理解游戏服务器对性能要求非常高这种结论是怎么来的。。。对客户端来说,绝大多数 RTT 都在网络传输上,无论服务器实现成什么样,也就是响应时间增减几毫秒的问题,当然可能有个别业务特别耗时,但不会影响玩家的整体体验。因此,为啥非得上 C++呢。。。Java+ZGC 可以把暂停时间控制在 10ms 以内,大多数时候不超过 2ms 。。
|