电子书 编程

无服务器(Serverless)系统的软件架构模式(第二版)

¥1.90 已售 0
✓ 自动发货 ✓ 永久有效 ✓ 售后保障

资源介绍

英文电子书 基于事件驱动的微服务和微前端实现创新架构设计 本书围绕无服务器系统的软件架构模式展开,探讨如何利用事件驱动的微服务和微前端实现创新,帮助软件架构师适应无服务器范式,设计灵活、可扩展且能持续交付业务价值的系统。 主要内容概览 1. 架构创新(Architecting for Innovation) 核心目标:使架构支持变化,以业务速度进行创新,实时适应和改变软件。 影响交付周期的因素: 风险缓解:传统通过放慢速度缓解风险,现需快速验证假设,在不破坏现有功能的前提下快速行动。 决策制定:传统项目式管理导致决策缓慢,需赋予团队自主权做小规模决策。 软件开发生命周期方法论:瀑布模型周期长,敏捷虽有改进但仍可能延迟发布,看板和精益方法更优。 硬件配置、部署、软件结构、测试与信心、依赖关系和团队间沟通等也会影响交付周期。 集成风格剖析:回顾了批处理集成、 spaghetti 集成、实时集成、企业应用集成、共享数据库、面向服务架构、微服务等集成风格的优缺点。 通过自治服务实现自治团队: 自治服务通过创建隔离区(bulkheads)实现弹性,各服务拥有所需资源,即使其他服务不可用也能运行。 采用异步服务间通信,限制同步通信为服务内部交互。 以事件为先,将事件视为事实,实现责任倒置,让下游服务负责对事件做出反应。 采用无服务器优先策略,实现自助服务和可处置架构。 关注数据生命周期,对抗数据引力,利用 BFF 模式等使数据在各阶段得到优化。 采用微前端,平衡各层,使自治团队能全面控制各层。 注重可观测性,优化一切,实现有机进化。 2. 定义边界与放手(Defining Boundaries and Letting Go) 从错误中学习:强调定义架构边界的重要性,避免因边界不清导致的问题。 基于成熟概念构建: 领域驱动设计:包括有界上下文、领域聚合、领域事件等概念。 SOLID 原则:单一职责原则、开放 - 封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则,这些原则在架构层面同样重要。 六边形架构:在函数级(nano)、服务级(micro)、子系统级(macro)应用六边形架构概念。 以事件为先思考:从事件风暴开始,关注动词而非名词,将事件视为事实而非短暂消息,将 API 内外颠倒,倒置调用责任,通过事件中心连接服务。 将系统划分为自治子系统:可按参与者、业务单元、业务能力、数据生命周期、遗留系统等方式划分。 创建子系统隔离区:通过独立云账户和外部领域事件实现。 剖析自治子系统:包括上下文图、微前端、事件中心、自治服务模式(Backend For Frontend、External Service Gateways、Control services)。 剖析自治服务:包括代码库、CI/CD 管道和 GitOps、测试、堆栈、持久性、三边 API(事件、API 网关、函数)、纳米架构、微架构、共享库等。 在不阻碍的情况下进行治理:通过提供自动化和横切关注点、促进稳健文化、利用四个关键团队指标(交付周期、部署频率、失败率、恢复时间)实现。 3. 驯服表现层(Taming the Presentation Tier) 表现层创新:探讨了客户端与服务器端渲染、构建时与运行时渲染、Web 与移动设备等方面的发展和权衡。 打破前端单体:可按子系统、用户活动、设备类型、版本等方式分解前端。 剖析微前端:包括主应用、索引文件、importmap 文件、微应用注册、微应用(入口文件、根组件)、微应用激活(生命周期、基于路由的激活、手动激活)、挂载点、清单部署器、应用间通信等。 为离线优先设计:包括透明度(状态指示器、发件箱、收件箱)、本地缓存(缓存代码、缓存数据读取、缓存数据写入)、实时更新(WebSocket、长轮询)。 4. 信任事实与最终一致性(Trusting Facts and Eventual Consistency) 生活在最终一致的世界:阐述了最终一致性系统的特点,包括分阶段、协作性、原子性、一致性、透明度、事实、连锁反应、并发和分区、顺序容忍和幂等性、并行性等。 发布到事件中心:事件中心包括事件总线、领域事件(事件信封、事件携带状态传输、替换、内部与外部、路由和通道拓扑)。 剖析事件溯源模式:包括系统范围的事件溯源(事件湖、永久存储、事件索引、事件重放)、事件流(时间存储、流优先事件溯源、并发控制、微事件存储)。 处理事件流:包括微批处理、选择编程范式(命令式编程、函数式反应式编程、流处理)、创建流、工作单元、过滤和多路复用、映射、连接器。 为故障设计:包括背压和速率限制、有害事件、故障事件、重新提交。 优化吞吐量:包括批处理大小函数参数、异步非阻塞 I/O、管道和多路复用、管道模式、分片、批处理和分组。 5. 将云变为数据库(Turning the Cloud into the Database) 对抗数据引力:数据引力会阻碍系统进化,受竞争需求、容量不足、难以处理的卷等因素影响。 拥抱数据生命周期:包括创建阶段、使用阶段、分析阶段、归档阶段,每个阶段有不同的存储和访问需求。 将数据库内外颠倒:利用事务日志和衍生数据。 剖析 CQRS 模式:包括系统范围的 CQRS、物化视图、入站隔离区、实时缓存、每个读者每个查询的容量。 保持数据精简:通过投影和生存时间(TTL)实现。 实现幂等性和顺序容忍:使用确定性标识符、反向乐观锁定、不可变事件触发器。 为操作性能建模数据:包括节点、边和聚合,分片和分区键,以及单表设计示例(餐厅服务、客户服务、购物车服务、交付服务)。 利用变更数据捕获:包括数据库优先事件溯源、软删除、闩锁。 6. 前端的最佳伙伴(A Best Friend for the Frontend) 关注用户活动:BFF 服务负责单一用户活动,由前端团队拥有,是解耦、自治和有弹性的。 剖析 BFF 模式:包括数据存储、API 网关、查询和命令函数、监听器函数、触发器函数。 剖析函数级纳米架构:包括模型、连接器、处理程序。 在 REST 和 GraphQL 之间选择:REST 适合某些场景,GraphQL 在特定情况下更有优势。 实现不同种类的 BFF 服务:包括 CRUD BFF 服务、值列表(Lov)BFF 服务、任务 BFF 服务、搜索 BFF 服务、动作 BFF 服务、仪表板 BFF 服务、报告 BFF 服务、归档 BFF 服务。 7. 弥合系统间差距(Bridging Intersystem Gaps) 创建防腐蚀层:包括宏观层面的端口和适配器、替换原则、外部隔离区。 剖析外部服务网关模式:包括连接性、语义转换、入口、出口、打包、独立云账户。 与第三方系统集成:包括出口(API 调用)、入口(Webhook)、异步请求响应、同步 ESG/BFF 混合。 与其他子系统集成:包括出口(上游子系统)、入口(下游子系统)。 跨云提供商集成。 与遗留系统集成:包括入口(变更数据捕获)、出口(直接 SQL、断路器)、入口(中继)。 提供开放 API 和 SPI:包括入口 API(事件、命令)、出口 SPI(Webhook)、出口 API(查询)。 解决常见数据挑战:包括幂等性、丰富数据、闩锁和交叉引用、慢速数据重新同步。 8. 用更多事件响应事件(Reacting to Events with More Events) 促进服务间协作:介绍了编排的优缺点。 剖析控制服务模式:包括收集(collect)、关联(correlate)、整理(collate)、评估(evaluate)、发出(emit)、过期(expire)。 编排业务流程:包括入口和出口事件、并行执行。 采用 Saga 模式:包括补偿事务、中止事件。 计算事件溯源快照:介绍了 ACID 2.0 和快照事件。 实现复杂事件处理(CEP)逻辑:包括决策表、缺失事件。 利用机器学习(ML)进行控制流:包括模型、预测。 其他章节 在多个区域运行(Running in Multiple Regions):包括证明多区域部署的合理性、选择区域拓扑、为区域故障转移做准备、检查区域健康、配置区域路由、跨区域复制、剖析区域故障转移、解决系统间差异、实现多区域 cron 作业。 深入保护自治子系统(Securing Autonomous Subsystems in Depth):包括共享责任模型、保护云账户、保护 CI/CD 管道、保护边界、保护前端、保护 BFF 服务、保护 ESG 服务、保护共享秘密、持续审计。 编排部署和交付(Choreographing Deployment and Delivery):包括优化持续部署的测试、关注风险缓解、实现零停机部署、在多个级别进行规划、转动 crank、剖析 CI/CD 管道。 优化可观测性(Optimizing Observability):包括快速向前失败、将可观测性内外颠倒、利用 FinOps、收集资源指标、跟踪系统事件、对工作指标发出警报、观察真实用户活动、持续调优。 不要拖延,开始实验(Don’t Delay, Start Experimenting):包括获得信任和改变文化、建立愿景、建立势头、构建架构跑道、播种和拆分团队、为产品而非项目提供资金、剖析扼杀者模式、解决事件优先问题。 书籍特点 提供了丰富的架构模式和最佳实践,涵盖无服务器系统的多个方面。 结合实例进行讲解,帮助读者理解和应用相关概念。 强调事件驱动、自治服务、微前端等现代架构理念,以适应快速变化的业务环境。 包含大量技术细节和实现方法,为软件架构师提供了全面的参考指南。 Software Architecture Patterns for Serverless Systems