本文转载自陈皓先生的技术文章,深度解读高可用系统。从高可用基础概念、技术方案、MySQL各类高可用实现,讲解SLA可用性“几个9”的行业定义,剖析计划与非计划宕机各类诱因;指出高可用不只是技术选型,更是软件工程、运维、工程文化综合能力的体现。
在之前的文章中,我讲述了我这么多年来一直在关注的技术领域,其中我多次提到了工业级的软件。我本以为会有很多人会问我怎么定义工业级,以及如何构建高可用性软件系统,既然没有人提问,那我就来聊聊这个话题。
在各类技术讨论中,很多人只聚焦各家的技术方案,但高可用系统不单单是技术方案,还涉及大量其他维度,很多人对此理解并不全面。
高可用英文为 High Availability,目标是让软硬件计算环境实现全天候可用。设计层面需要做好三点:
看似简单,但细节充满难点。对于有状态节点,最大挑战是数据复制与一致性保障;无状态节点的冗余实现相对简单。
高可用需要结合业务做取舍:银行余额这类状态型数据,冗余必须保证强一致性;订单记录属于追加型数据,故障切换后备机直接追加写入即可。很多企业宣传的异地双活,实际上无法真正实现状态型数据的双活。
高可用设计核心原理:
下图来自Google App Engine联合创始人Ryan Barrett在Google I/O 2009演讲《Transaction Across DataCenter》。
这张图是主流高可用解决方案的基础:M/S主从、MM多主实现难度低但存在不少缺陷;2PC两阶段提交性能较差;Paxos协议能力强,但实现复杂度极高。
注:以上为软件层面方案,昂贵硬件方案本文不做探讨。
不少缓存、消息队列、开源数据库自带复制、持久化能力,具备基础高可用,但开源软件普遍很难达到高级别SLA,选型需要留意。
图片来源:MySQL High Availability Solutions。方案的“9”越多,整体实现复杂度越高:
SLA即服务等级协议 Service Level Agreement,用来量化高可用等级,也就是行业常说的“几个9”。业界主流以故障发生到恢复的不可用时长作为衡量标准。
举例:99.999%(5个9),全年只允许5.26分钟服务不可用。反观很多团队,故障处理动辄1‑3小时,完全达不到对外宣称的SLA指标。
系统可用性受软件、硬件、第三方运营商网络、外部意外事件等多重因素影响。SLA不只是技术参数,更是服务商和客户之间的契约。宕机分为无计划宕机与有计划宕机两类。
想要实现5个9,代表故障发生后必须在5分钟内完成业务恢复,仅仅依靠技术架构远远不够。高可用建立在整套工程体系之上:
更深层是对软件工程的尊重:技术态度、工程文化、管理层对工程的重视程度。评估一套系统高可用能力,不能只看技术方案,更要看企业整体工程实力。
高可用就如同汽车工业,高可靠性不是依靠零散技工修补,而是整套严谨工业化体系。很多人误以为开发网站、APP只是写代码,只有遭遇故障的时候,才会意识到工程体系的价值。
Code Review、自动化测试、自动化运维、持续集成,这些看似枯燥的流程,恰恰是工业级系统的基础。不少技术人员缺少这方面意识,这和过往项目经历息息相关。
看完本文,不妨扪心自问:你的系统,真的称得上高可用吗?


及时响应,快速服务,为您保驾续航
立即注册
公告
邮件
销售