Serverless架构通过一系列策略和工具来保障系统稳定性,主要包括以下几个方面:
-
故障预防:
- 架构治理与升级:通过region化改造、UT(单元测试)覆盖、E2E(端到端)覆盖、故障演练等方式对平台进行架构治理与升级,保证后端服务的高可靠和高可用。
- 依赖治理:针对agent、镜像、IaaS层依赖等相关产品进行依赖治理,收敛因关联上下游出问题所导致的连锁故障。
-
故障发现:
- 诊断引擎:建设SAE诊断引擎,以外部视角实时监听并消费各类数据源,经过模式诊断和根因定界流程产出事件告警,先于用户主动发现异常问题。
- 运行时可用性探针:在真实用户环境下对实例运行时进行无差别的检测,保证应用内部的运行环境符合期望,并通过统一告警中心完成事件流转,实现问题高效触达。
-
故障定位:
- 运维平台建设:完善SAE运维平台建设,提升内部运维效率,完善根因定界能力,便于区分问题边界与原因。
- 风险量化与容错设计:通过风险量化、容错设计、质量验证、可观测、事件中心、诊断等一系列产品化手段帮助用户闭环化解决自身问题。
-
故障恢复:
- 自动故障转移:自动检测和隔离故障函数实例,支持多数据中心部署,实现异地容灾。
- 多AZ容灾部署:通过简单设置即可实现多AZ(Availability Zone)容灾部署,支持副本自动重启和恢复,在系统发生故障时自动切换至健康节点。
-
性能优化:
- 优化函数大小和部署频率:通过优化函数代码并采用函数拆分技术来减少函数大小,从而降低成本。
- 避免冷启动和缩短冷启动时间:通过预热机制、使用保留并发实例等方法来减少冷启动时间和成本。
- 监控性能指标并优化资源分配:利用云服务提供商提供的监控工具或第三方工具,持续收集和分析关键性能指标数据,以优化资源分配。
-
容错机制:
- 原子性保证:通过AFT(Atomicity for Fault Tolerance)系统保证事务的原子性,确保事务的所有操作要么全部成功,要么全部失败。
- 冗余实例和错误处理:在函数实例出现故障时,通过冗余实例和错误处理机制自动触发故障转移,以保持可用性。
通过上述方法和技术,Serverless架构能够有效地保障系统稳定性,同时提供高可靠性和容错性,满足不断变化的业务需求。