有一次,我和一家分布式数据库厂商的内核研发人员交流,谈到他们产品在可观测性方面的不足。他的观点很直接:分布式数据库太复杂了,不能像运维 Oracle 那样去运维它。对他们这些搞内核开发的人来说,终极目标是让数据库实现完全自治——让内置的自愈机制自动处理问题,无需运维人员介入分析。因为产品复杂度极高,运维人员面对稍微复杂些的故障,很可能束手无策。
这个观点,从某个角度看确实有道理。分布式数据库的复杂度的确呈指数级增长,单纯依靠传统的监控手段去发现问题并快速定位根因,挑战巨大。看看最近一些大型系统故障,恢复时间动辄数小时,也从侧面印证了这一点。听说某次金融系统故障,仅仅为了定位一个看似不复杂的问题,就花了近2个小时。这与金融机构常提的“1-5-10”目标(一分钟发现、五分钟定位、十分钟恢复)相比,简直是天壤之别。在这些对稳定性要求极高的业务场景里,似乎单纯依靠 数据库运维 人员是不够靠谱的,提升数据库自身的健壮性和自愈能力,才是根本。
但是,世界上存在100%可靠的数据库吗?答案显然是否定的。数据库内核开发者的水平再高,也无法穷尽成千上万的用户场景;架构设计再精妙,也很难保证对所有非预期状况都游刃有余。数百人的研发团队里,也难保不引入一个隐蔽的BUG。回顾一些国产分布式数据库出现过的大型运营故障,原因大致可归为两类:一类是产品本身存在的缺陷或BUG,另一类则是一些未被预料到的负载行为,触发了某种资源瓶颈。
所以,无论数据库产品本身的技术水平多高、复杂度如何,想要真正“用好”它,可观测性仍然是不可或缺的一环。希望数据库运行完全不依赖于人工运维,仅凭内核自身提供保障——这个理想很美好,但目前来看还很难实现,未来能否彻底达成也未可知。实际上,数据库的自治能力与 可观测性 并非对立的两极,前者恰恰高度依赖于后者。数据库内核要想实现高度自治,能够自我感知内部状态与问题,其底层也必须建立在强大的可观测性之上。
因此,更务实的路径或许是双线并行:在持续提升数据库自治能力的同时,大力加强其可观测性。这样,运维人员才能随时洞察数据库内核中潜在的隐患。这么做的好处是双向的:既可以根据观测到的数据,提前对数据库的薄弱环节进行优化;也能在系统真正发生故障时,大幅加速问题的定位与解决。这条由 Oracle 等传统数据库验证过的、将深度可观测性与健壮性相结合的道路,在今天依然具有很高的参考价值。
你对数据库自治与运维的关系有何看法?欢迎在云栈社区与我们交流探讨。
|