最近时间线上又起了一场不大不小的论战,做互联网的人觉得游戏服务端发展很慢,同时互联网技术日新月异,似乎觉得互联网技术领先了游戏后端技术十年,这个结论显然是武断的,几位朋友也已经驳斥的很充分了,游戏服务端的同学实属没必要和这个互联网的人一般见识,本来就此打住也还挺好。
但最近两天事情似乎正在悄悄起变化,时间线上一直看到不停的有人跳出来,清一色的全在说互联网简单,什么做个电商不过就是 CRUD 的话也出来了,看的我也大跌眼镜,过犹不及吧。
今天更是又刷到有几位不管不顾就说什么游戏服务端领先互联网十年什么的,似乎这又要成为了另外一个极端了,那么有几点情况是不是也请正视一下:
1)游戏服务端足够复杂,但是发展太慢,祖传代码修修补补跑个十多年的不要太多。能用固然是好事,但没有新观念的引入,导致可用性和开发效率一直没有太多提升。
2)各自闭门造车,没有形成行业标准与合力,这个项目的代码,很难在另一个项目共享,相互之间缺少支持和协同。
3)互联网后端随便拎出一个服务来(包括各种 C/C++ 基建)大概率都没有游戏服务端复杂,但最近十年日新月异,形成了很强的互相组合互相增强的态势。
我上面指的是互联网基建项目,不是互联网 CRUD,互联网近十年的发展,让其整体可用性,效能,开发效率,都上了很多个台阶,不应一味忽视。
如果继续觉得游戏服务端领先互联网十年可以直接右转了,开放心态的话我也可以多聊一些(点击下方 more 阅读更多):
举个例子,音视频领域的基建,并不比游戏服务端简单:
1)一路高清视频 720-1080p 的,差不多每秒钟 2MB/s 的数据量,同时在线 100w 的,整个网络每秒钟至少有 2T/s 的数据量在跑着,不但不分服,而且玩家遍布世界每个角落,还要不卡不掉不延迟,这个数据量比起游戏的消息要大好几个数量级吧?在把这 2T/s 数据安排明白妥当的同时,还得保证延迟不能超过 500ms,超过就没法玩了。
2)一个房间的人数少的是 2-4 人,多的上千人,遍布 4-5 个国家,你一屏幕打开,可以同时看到 50 个人的视频,虽然是小窗口,但是你拉住任意小窗口,快速拉大到全屏,看不到明显的清晰度梯度切换带来的抖动,如何实现呢?
3)全球上百个机房协同工作,组成一张很大的网络,一会这个机房出问题,一会那里线路阻塞了,能做到动态自如的切换,让用户几乎感觉不到,也不容易吧?
4)更新无需停机,停服,即便一个 1000 人的房间后面的服务器更新,可能你都感觉不出来,视频的房间也算是有状态的,这种平滑的切换,不算简单吧?
5)弱网情况下,开着车接着视频,不停切换基站,60% 的丢包情况下,虽然会卡一些,但如果要保证基础可用,也还是有点技术含量的吧。
6)服务端跑视频编码器,即便有现成开源的也需要自己花大力气二次开发,编码器方面的积累,你不搞个四五年,你入不了手吧?这方面的知识日新月异,每年都有新标准,更新比游戏快多了。
7)后端图象增强,允许带宽不足用户发送比较差的视频,增强成比较清晰的视频,这个 AI 增强技术,比 DLSS 1/2 复杂好几个台阶。
8)即便不是实时通信,点播,看着简单,也有很多挑战的地方,比如你客户端看短视频,不停的手指往上滑,连续划十个,不卡,秒出,丝滑切换,光这一点数据量有多大?客户端该怎么管理资源?服务端从接入服务,调度服务,到 CDN 和传输协议,要做多少项优化呢?
9)这么大的实时资源吞吐量,如何做高可用和成本优化呢?
说两个比较有意思的技术:
最新的 LCEVC 编码技术(Low Complexity Enhancement Video Codec),允许使用一个比较差的编码器,比如 x264,先把视频分辨率缩小几倍,比如 1080p 的视频缩小到 240p ,然后送给比较差的编码器去编码,剩下的残差,送给 LCEVC 去编码:
最终解码时,先用 264 解出一个 240p 的视频,放大到 1080p,然后补上 LCEVC 编码的残差部分,会得到比同样码率用 265 编码器编码出来的效果更好的视频质量。
挺有意思的吧,特别是对应各种高清视频,还有个优势是本身就抗丢包,带宽不足了,把带宽丢一半,还能解出一个清晰度一般的视频来,天生适合远距离传输高质量视频。好是好,但这 LCEVC 有专利,你能不能实现个类似的呢?搭配 AV1/2 搞个更清晰更适合传输的东西出来呢?
再举个例子,IM 技术
上亿的用户同时在线,比如 tg 这样的:
1)超大型分布式对象模型,全球接入,多地机房级别容灾,随时下线一两个机房没问题,
2)更新不停服。
3)一夜不登陆新消息几千,突然登录不像国内某些 IM 一样卡界面,卡网络,历史消息随便翻(不会像国内某些 IM,只保存最近几天的),而且你有兴趣可以一直翻到几年前的,中途不卡。
4)多个设备随便登录,不丢消息,不丢历史,不会说昨天的消息被 ipad 收了,手机后登录就看不到。
5)10万人的房间,每人说一句话怎么处理?一次服务器广播应该如何做?
6)给所有在线的中国区用户推一条消息,这个广播要怎么做?
7)像 tg 一样随时随处随意上传 1-2GB 的文件(不像国内某些 IM 限制 70-100MB),供全球各地群友下载,并永久保存(tg 至今至少保存了 7/8 年,没删除过),这背后的存储基建如何安排如何建设呢?
8)连续按住说话语音片 30 秒一个别人同步播放多条连续语音片没有停顿怎么做呢?
还可以举很多:
新浪微博:虽然当个服务都很简单,都是无状态的,要能流畅使用,整体架构也不简单吧?
在线文档:协同办公,老板在视频里说一句,各团队请登记你们的 xxx,然后公司里 200 个人一起编辑同一个 excel,你设一个函数,我做一次替换,保持同步,不比游戏同步低级吧?
。。。。
似乎例子也够了,先说这么多吧。。。
–
结论:
都有 crud,用自己领域复杂的东西去比较别人表层的东西没意义,其次,多点开放心态,别一天到晚谁吧谁秒了,谁又把谁按在地下摩擦,成天一副秒天秒地秒空气的样子,只会让人固步自封。
文中提到的音视频领域的基建和 im 技术的问题挺有意思的,请问有没有推荐的相关开源项目可以参考和学习的?
web 和 game 各有难度,只是 web 侧基建更加开放,game 侧的开源较少,和商业有关。
而且 web 侧开源的基建商业版本只能说逆天,吸收了大量开源社区反馈打造的系统更为完善和复杂和通用
game 侧现在也有不少用 web 侧的东西实现一些功能
那种张嘴闭嘴就武断的说A比B咋样咋样的人,多看一眼都算你输
其实crud和sql body为啥要和别人撕逼,重要的是原因是因为没有技术壁垒,容易被替换,说白了类似于搬砖,思考一下一个抖音需要几万人维护吗?其中说到的基础设施音视频、feed流需要几万人维护吗,这部分应该几百人就行了,而大部分人都是做crud和sql body,所以为啥撕逼懂了吧!互联网大部分都是搬砖确实是实话,能搬砖的原因是因为互联网存在红利!
都鳖说了,php是世界上最好的语言,lol