简介
转载于:不断演进的基础技术组件降低用户复杂系统构建之路——亚马逊 CTO Werner 的20年经验总结。
re:Invent24 最后一场 Keynote 聚焦 Werner 的分享,原本猜测会更多谈生成式 AI,但现场更多从 Werner 不可思议的 20年亚马逊职业生涯开始谈系统复杂性和如何遵循一系列架构原则,赢得系统层面的简化!
经验不可复制,“坚持简单明了的原则” 是今天比较困难的事情,但可以使得我们明锐观察到系统的复杂性信号,不断迭代系统架构,满足未来系统的持续可控和简化。
1. 复杂度系统与Werner T-Shirt
每年更换不同T恤的传统已经成为 Werner 演讲的一个独特标志,在 2024 re:Invent 大会上穿的是一件黑色T恤,图案设计与他演讲的主题 “Tesler’s Law” 和复杂性(Complexity)关联,“Complexity can neither be created nor destroyed, only moved somewhere else“ 特斯勒定律又称”复杂性守恒定律”,主要应用于软件工程领域,它表明,在一个系统中,复杂性不会凭空消失,只能从系统的一个部分转移到另一个部分。
警惕系统复杂度的七大信号:
- 1: 功能开发交付变慢
- 2: 频繁的故障等事件升级处理
- 3: 费时的调试
- 4: 代码基础库膨胀
- 5: 不一致的模式
- 6: 到处都是依赖关系
- 7: 无差别的低价值任务
2. 复杂系统构建六大原则
随着功能需求不断变化,用户的增长,系统客观上会变得越来越复杂,如何应对不断熵增的系统复杂性呢?Werner 总结了六条亚马逊大规模系统构建的实践经验原则,解决复杂系统挑战需要坚持这些原则:
- No.1 - 可持续演进架构是不可或缺的需求
- No.2 - 拆分复杂系统,基于领域的高内聚模块+良好定义的 API 接口
- No.3 - 匹配技术架构和组织架构,构建全职能小团队,挑战现状和鼓励主人翁精神
- No.4 - 单元化架构,复杂系统中必须控制影响范围
- No.5 - *设计可预测行为系统,消除不确定性影响*
- No.6 - 自动化处理复杂任务,除非依赖人为高度决策
第十三次登台 re:Invent 舞台,从去年的俭约架构,Werner 又回归复杂系统架构原则,对于架构师而言,是非常兴奋的,这不是 Werner 第一次谈这些原则,《亚马逊 CTO 12年 re:Invent 架构课》,之前的大会上 Werner 也不断在强调这些朴素的原则如何帮助我们持续进化我们的系统架构;
2.1 可持续演进架构是不可或缺的需求
可持续演进架构是什么样子的?Werner 提到了 2006年发布的 Amazon S3 从6个微服务到今天超300个微服务,2008年的网络基础组件 Blackfoot 和 2016年的 Nitro 系统;
如何构建可演进系统?Werner 强调了11个原则:
- 基于业务领域建模 (Modeled on business concepts)
- 隐藏内部细节 (Hidden internal details)
- 细粒度接口 (Fine-grained interfaces)
- 智能的服务节点 (Smart endpoints)
- 去中心化 (Decentralized)
- 独立部署 (Independently deployable)
- 自动化 (Automated)
- 云原生设计原则 (Cloud native design principles)
- 故障隔离 (Isolate failure)
- 高度可观察 (Highly observable)
- 多重范式 (Multiple paradigms)
温水煮青蛙,非常形象的比喻,很多系统没有进化的原因是,感知不到温水慢慢升温的信号和威胁,最终与沸腾的热水“融为一体”。
2.2 拆分复杂系统
当出现复杂度威胁信号的时候,有的时候不得不重构或重写系统的基础组件,Werner 引用了 CloudWatch 的案例,因为招聘不到足够的精英的 C语言工程师,继续完善越来越复杂的 CloudWatch 产品,团队决定重构系统,拆解到更小的单元,用 RUST 语言重写;
2.3 匹配技术架构和组织架构
这在 DevOps 和亚马逊微服务转型的故事里面讲了很多,Werner 邀请了 Amazon S3 团队来分享,Amazon S3 诞生于 2006年,团队很常见的一个挑战是,18年后的今天还有什么可以做的吗?另外,由于对数据持久性的敬畏,如何保障新的变更不会带来额外的风险?
最危险的一句话就是“我们以前一直就是这么做的”
领导者需要关注建设主人翁精神的团队,而主人翁精神需要充分授权和紧迫感,哪怕最好的团队也会惯性变得迟钝;
2.4 单元化架构
单元化架构在国内也有很多讨论,最大的优势是,单元(Cell)是一个独立自治的模块,在复杂系统中,是可管理最小单位和控制故障影响范围的有效手段;
2.5 设计可预测行为系统
Werner 在这个环节列举了负载均衡配置下发和Route53健康检查两个例子,可以参考《“反俭约”架构,可靠先行》了解具体的背景、挑战和架构方法;
2.6 自动化处理复杂任务
这是整场涉及到 GenAI 智能体的部分,列举了 安全事件处理和技术支持 Ticket 处理流程的自动化案例;
3. 原子钟简化跨区域强一致性数据库的实现
最大的惊喜就是 AWS 将原子钟服务这两年实现了 Amazon DynamoDB 和 Amazon Aurora 的跨区域分布式事务,强一致性 NoSQL 和 SQL 数据库,详情请参考去年的几篇文章: