服务故障自动恢复
达达对服务器 crash 自动重启表示过反对。但鹅厂有种服务故障快速拉起的传统。
一开始我以为是两种大相径庭的观点,为此很困惑。 后来又觉得这两套不同的技术体系会有殊途同归之处。
『故障快速拉起』或者说『服务故障自动恢复』。 本质上意图是提高服务可用性。
达达不喜欢 crash 自动重启,但他的框架有很好的异常管理。 我想:
- 意图与目的上 1) 进程内异常捕获与恢复 和 2) 外部重启 crash 的服务进程 两者是相同的
- 具体操作上,判断 1) crash 是否能自动重启解决 与 2)异常是否可捕获恢复 两者也没有本质区别
同一个目的,有两种看起来截然不同的手段,我大概想了以下原因:
技术特点:
达达的游戏框架对可恢复的异常有充分管理进程本身不会轻易crash,除非遇到致命错误。
鹅厂常用 C++ 。 业务逻辑产生的异常未必容易捕获, 但 共享内存+无状态进程+快速重启进程+接入层重试 同样能做一些异常恢复。
其实发现两套不同的实践都达到了类似的目的。
规模:
在开发规模很大 (比如很多人月、特性、LOC) 的情况下, 无状态服务 可能 是一个比达达那套框架更容易实施方案。
组织架构:
达达是 CTO ,同时兼顾开发和运维职责。 他的程序在设计的时候就有考虑运维简单与可用性。
接入腾讯的游戏厂商和腾讯互娱运维是天然的 dev 与 op 分离。 程序能 crash 后快速拉起是让运维很舒服的事情,但 开发商未必有动力。