1. 为什么游戏公司不使用微服务架构?
一句话解释,因为游戏最重要的是实时性,要求 real time,做微服务会影响效能,分模组来开发就好了。
虽然微服务有很多好处,方便测试,方便维护,方便升级,服务之间松耦合,可多语言开发,自动扩容…之类的点,但是这些优点都是牺牲的时效性,服务间通过网络来交互。
每种技术都有应用场景,技术服务于应用场景,而不是应用场景服务技术。任何技术都一样,能不用就不用,引入新的技术就会带来新的问题。便捷不会单独存在,万物守恒。
高赞回答1
比如 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 个玩家之间的通讯,这样就使得数据可以在本地交换,性能最大化 。这对客户端或者说服务端统一网