0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

游戏公司不使用微服务架构的原因

Linux爱好者 来源:知乎 2023-12-29 11:18 次阅读

背景介绍

笔者最近去面试了家游戏公司

最近面试了一家游戏公司(满大间的,有上市)

我问他,公司有没有做微服务架构的打算及考量?

他很惊讶的说,我没听说过微服务耶,你可以解释一下吗?

我大概说了,方便测试,方便维护,方便升级,服务之间松耦合,可多语言开发,自动扩容…之类的点

然后他说游戏 server 不太需要微服务,因为要求 real time,做微服务会影响效能,分模组来开发就好了

我也不确定,但微服务不是趋势吗?特别是大公司,游戏 server 的服务应该很容易拆分吧?

回答

整理了几个不错的回答,分享一下。只能说学到了,技术也要用对场景呀!

陈宏基的回答

比如 moba 类游戏/王者荣耀/LOL,就看王者荣耀的客户端吧,想象一下。

账号系统,符文系统,英雄系统,皮肤系统,好友系统,好友之间 messaging,这些都是常规操作,如果流量足够大,当然可以用微服务的架构去做。

不过这不是这个游戏的核心,核心是 MOBA:Multiplayer online battle arena。特性是什么?

10 个人之间各种游戏事件的高速多向通讯 streaming/broadcast/multicast/pubsub 各种通讯模式

所以游戏的核心在于小规模群体之间的高速网络通信 。就是对方说的 realtime。多了一个 10ms 的延迟玩家就要骂娘了。

微服务为了把业务完美拆解,把原来的同一个进程里的模块拆分成不同的服务,显著增加额外的网络开销 。更别说什么 service mesh,各种 gateway,proxy,sidecar,简直就是担心延迟太低。

微服务基本只有 request/response 的模式。做不了 streaming?微服务通常要求应用是无状态的才能做到水平扩展。streaming 本身就是加入了状态

我可以想像,为了提高通讯的性能,一场英雄联盟游戏很可能会使用同一个服务器负责这 10 个玩家之间的通讯,这样就使得数据可以在本地交换,性能最大化 。这对客户端或者说服务端统一网关的要求是必须支持 sticky routing。假设客户端连接断了,接下来的必须重连之前的同一个服务器。微服务的 stateless,水瓶扩展要求本身就是反 sticky routing 的,因为 sticky routing 本身就是状态。

对服务端集群来说,同时有无数个王者荣耀的比赛在进行,每个都可以看成一个沙盒,每个沙盒都处于一个不同的状态:塔被推了几个了,你被杀了几次了,对面几个超神了,20 分钟到了没。这些都是长时间存在的状态,直到游戏结束,服务端才可以清理一场游戏的状态。

所以虽然不用把这些状态写进持久性存储,但是必然会在内存中存在很长时间。都是状态,反正有状态,就别想用微服务。除非你说把这些状态都移到 redis 里去,那么在服务器在信息流传输到一半还要做一个 remote request,一来一回,延迟就上升了。总之怎样都不好。(比如想象对方在 A 你的水晶,每一次 A 的操作都是一个 event,被 streaming 到服务端的沙盒中,沙盒中有一个流处理器,每次接收到一个你水晶被 A 的 event 都会计算一下你水晶爆了没。这个计算需要极快,你是不可能把你水晶生命值的数据存在远端的)

像这类游戏,都是对网络,内存,CPU 的优化需求很高,整个游戏进行过程中,几乎不存在什么 RPC call,真的需要 remote data,也应该是 prefetch,就是在游戏刚开始的时候加载好

微服务不是什么银弹,也就是方便拆解一下原来的 CRUD 应用罢了而已,一没触及高级的交互方式,二没触及分布式系统真正的难点:状态,其实没有大家想的那么有用。之所以感觉上好像微服务改变了互联网,只不过 90%的互联网应用都只是简单小规模的 CRUD 而已。

对方没有听说过微服务完全没有问题,因为这本身就不是什么高深的概念,反而对方听你一说一下就知道微服务不适合游戏,说明对方理解能力很强,对游戏系统设计也了解足够深。

陈宏基的回答:

https://www.zhihu.com/question/359630395/answer/954452799

一位匿名用户的回答

看来是是最近被 微服务洗脑了, 个人感觉正常微服务,一个服务必须有 3 个以上工程师单独维护,才真真把微服务盘起来。

而且微服务现在最多就是 HTTP 这种协议跑,很占性能的,就算是走 TCP HTTP2 远远不如单体性能,尤其是微服务做业务分叉调用的时候怎么划分,数据事件一致性 是非常头痛的一件事。

微服务用的广是 WEB 方面 而且工程师多,业务变来变多,而且它几乎是自己玩自己的。这种场景就非常适合。实时性不需要那么高那种

我知道很多人,把微服务魔化了,别人要 100 层功力,而你只学到了 1 层。然后就硬搬上来跟别人说这很牛逼

我看过那么多博客,技术文,唯独就微软官方那一篇 微服务技术写的最好,明确的告诉你这种架构适合什么样的场景跟团队,什么样的场景不要用,而不是一些文章无脑吹

脱离业务的技术架构,就是为了框架而架构,就是没事给自己搬石头砸脚跟

对于开发者来说,自己去研究研究新技术是值的非常推崇的。但是不考虑实际情况,那就是魔怔了。

为啥有这种感触,因为我是受害人。所以奉劝各位 什么样的团队项目底子业务 就选择最合适自己的架构,不要盲目去跟风,更不要盲目的去对比大厂云云云,你的业务跟团队是别人的零头都不够。别人的 HR 团队可能都比你技术团队人数多。

架构分的越单元化,那么需要的人数是翻倍起来维护的,不然你就会发现为什么这个架构我用起来这么啰嗦。不是别人的架构不够好,是你的团队还不需要

有小伙伴想找微软的微服务架构链接 我放一下:

https://learn.microsoft.com/zh-cn/dotnet/architecture/microservices/multi-container-microservice-net-applications/microservice-application-design

liulilte 的回答

...游戏服务器都是几乎都是带大量状态的,我就问你一个致命问题,游戏里面本来在同个进程内,内存直接可以访问到,走微服务就可能这个服务不在本机设备上面,那就需要走网络传输过去,那么你考虑过延迟问题吗?有考虑过如果连接挂掉?

每个微服务跨本机都是一个 RPC 调用,这东西是不可靠的,如果你要可靠行啊,你准备约定一个接口调用多少毫秒超时重传?200/500?(这就存在两个情况:对面已经处理,对面没有处理,但实际上是同一个调用请求)

如果玩家只是放一个技能,需要投射状态呢,因为断开重传等几百毫秒响应,那么玩家体验是啥。

固然,我们可以使用协程,C++也可以,那么编码复杂度有考虑过吗?而且大量的异步编程在游戏服务器上面是很困难的,也就意味着需要更多的游戏服务器开发人员,而且还得要求开发人员的综合素质不能太差。

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1262

    浏览量

    69441
  • 服务器
    +关注

    关注

    12

    文章

    9123

    浏览量

    85324
  • HTTP
    +关注

    关注

    0

    文章

    504

    浏览量

    31194
  • 微服务架构
    +关注

    关注

    0

    文章

    25

    浏览量

    2959

原文标题:为什么游戏公司不使用微服务架构

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    微服务架构和CQRS架构基本概念介绍

    微服务架构现在很热,到处可以看到各大互联网公司微服务实践的分享总结。但是,我今天的分享和微服务没有关系,希望可以带给大家一些新的东西。如果
    发表于 05-22 09:03

    微服务架构与实践摘要

    本文主要类容是对微服务架构与实践摘要解析。微服务架构中的 “微” 体现了其核心要素,即服务的微型化,就是每个
    的头像 发表于 02-07 16:57 6129次阅读
    <b class='flag-5'>微服务</b><b class='flag-5'>架构</b>与实践摘要

    微服务优势_微服务架构的好处与不足

    微服务是用一组小服务的方式来构建一个应用,服务独立运行在不同的进程中,服务之间通过轻量的通讯机制(如RESTful接口)来交互,并且服务可以
    发表于 02-23 11:24 4393次阅读

    什么是微服务架构_微服务架构的优缺点及应用

    什么是微服务架构 简单地说,微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型
    的头像 发表于 06-02 10:03 1.7w次阅读
    什么是<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>_<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的优缺点及应用

    微服务架构有哪些_微服务架构设计模式

    小伙伴们知道常用的微服务架构框架有哪些吗?上回我们介绍了一些常用的微服务架构设计模式,这次我们就来了解一下一些常用的微服务
    的头像 发表于 05-17 17:06 2.9w次阅读
    <b class='flag-5'>微服务</b><b class='flag-5'>架构</b>有哪些_<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>设计模式

    微服务架构的特点_微服务架构适用场景

     微服务架构是一项在云中部署应用和服务的新技术。
    的头像 发表于 05-17 17:28 5131次阅读

    微服务软件架构应用研究综述

    自2014年,微服务架构概念经Martin Flower提出以来,受到广泛关注,为更好了解微服务架构风格,本文首先分析、梳理了软件架构的发展
    发表于 05-26 09:26 2次下载

    王者荣耀为什么不使微服务架构

    微服务为了把业务完美拆解,把原来的同一个进程里的模块拆分成不同的服务,显著增加额外的网络开销。更别说什么service mesh,各种gateway,proxy,sidecar,简直就是担心延迟太低。
    的头像 发表于 12-12 15:46 479次阅读

    微服务架构中的服务之间如何互相调用呢?

    微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关
    的头像 发表于 01-31 09:46 2193次阅读

    什么是微服务架构

    在Medium,我们的技术堆栈始于2012年的单片Node.js应用程序。我们已经构建了几个卫星服务,但我们还没有制定一个系统地采用微服务架构的策略。随着系统变得越来越复杂并且团队不断发展,我们在2018年初转向了
    的头像 发表于 02-24 11:15 1335次阅读
    什么是<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>?

    从分层架构微服务架构介绍(五)

    本文要介绍的是 服务架构 (Service-Based Architecture, SBA )。 SBA 可以看成是单体架构微服务架构
    的头像 发表于 05-10 17:02 841次阅读
    从分层<b class='flag-5'>架构</b>到<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>介绍(五)

    springcloud微服务架构

    Spring Cloud是一个开源的微服务架构框架,它提供了一系列工具和组件,用于构建和管理分布式系统中的微服务。它基于Spring框架,旨在通过简化开发过程和降低系统复杂性来帮助开发人员构建弹性
    的头像 发表于 11-23 09:24 1318次阅读

    docker微服务架构实战

    随着云计算和容器化技术的快速发展,微服务架构在软件开发领域中变得越来越流行。微服务架构将一个大型的软件应用拆分成多个小型的、独立部署的服务
    的头像 发表于 11-23 09:26 644次阅读

    设计微服务架构的原则

    微服务是一种软件架构策略,有利于改善整体性能和可扩展性。你可能会想,我的团队需不需要采用微服务,设计微服务架构有哪些原则?本文会给你一些灵感
    的头像 发表于 11-26 08:05 585次阅读
    设计<b class='flag-5'>微服务</b><b class='flag-5'>架构</b>的原则

    微服务架构与容器云的关系与区别

    微服务架构与容器云密切相关又有所区别。微服务将大型应用拆分为小型、独立的服务,而容器云基于容器技术,为微服务提供构建、发布和运行的平台。区别
    的头像 发表于 10-21 17:28 211次阅读