微服务架构与领域驱动设计 - 王磊
微服务架构是⼀一种架构模式,它提倡将单⼀一应⽤用程序划分成⼀一组⼩小的服 务,服务之间互相协调、互相配合,为⽤用户提供最终价值。 每个服务运⾏行行在其独⽴立的进程中,服务与服务间采⽤用轻量量级的通信机制互 相协作(通常是基于HTTP协议的RESTful API)。 每个服务都围绕着具体业务进⾏行行构建,并且能够被独⽴立的部署到⽣生产环 境、类⽣生产环境等。 以持续交付为核⼼心 基于DevOps 的演进式架构 Model • 核⼼心的领域模型,包括Entity/ValueObject/Aggregate Domain Services • 领域模型的业务逻辑 Application Services • 同应⽤用相关的接⼝口适配 User Interface • ⽤用户接⼝口相关的部分 Infrastructure • 数据相关部分:WebService/DB/File • ⽀支撑相关部分: 环境相关配置 能快速发现界限上下⽂文以及相关的聚合根等 参与⼈人员:业务⼈人员,领域专家,技术⼈人员,架构师,测试⼈人员等关键⻆角⾊色 开放空间:⾜足够的空间将业务事件流可视化,让⼈人们可以互相讨论 彩⾊色即时贴:使⽤用不不同颜⾊色标识 Alberto Brandolini 如何使⽤用Event Storming 业务流梳理理 寻找事件 寻找命令 寻找聚合 划分⼦子域&界限上下⽂文 理理解业务 发⽣生了了什什么? 通过什什么产⽣生?0 码力 | 28 页 | 1.84 MB | 1 年前3微服务的设计原则与⽣态系统 - 王磊
ThoughtWorks⾸首席咨询师 Sybase Tech Leader • 《微服务架构与实践》作者 • 《DevOps Handbook》中⽂文译者之⼀一 • 国内较早倡导和实践微服务的先⾏行行者 • 对于⾃自动化测试、持续交付、DevOps有丰富的实践经验 • ⻄西安DevOps Meetup 联合发起⼈人 关于我 议题 • 微服务架构的核⼼心 • 微服务架构设计原则 什什么是微服务架构? • 微服务架构是⼀一种架构模式,将单体应⽤用划分成⼀一组⼩小的服务,服务之间互相协作,为⽤用户提供最终价值 • 每个服务运⾏行行在其独⽴立的进程中,服务间采⽤用轻量量级的通信机制协作(通常是基于RESTful API) • 每个服务都围绕着具体业务进⾏行行构建,并且能够被独⽴立的部署到⽣生产环境、类⽣生产环境等 Microservices – the new architectural 聚合服务 - 基础服务 注册发现 为什什么要注册发现 • 服务重启/升级后的IP地址变化 • ⽔水平伸缩后服务的实例例数量量变化 • 同⼀一个结点运⾏行行多个服务(端⼝口不不同) 集中配置管理理 配置信息的管理理 50 • 与服务在同⼀一个包中 • 使⽤用隔离的配置⽂文件 • 使⽤用环境变量量管理理 配置信息管理理的挑战 51 • 动态更更新配置信息 • 多实例例间的同步0 码力 | 62 页 | 6.65 MB | 1 年前3Java Chassis通信处理详解 - 通信优化实践
服务契约(OpenAPI) 负 载 均 衡 …… 熔 断 QPS …… 跟 踪 1. RPC还是REST,传输方式决定编程模型 2. 丌同开发人员熟悉丌同的编程模型 3. RPC、REST的治理如何迚行 4. REST性能低 5. Reactive还是同步 ServiceComb的同步 仅仅是指编程模型上的同步,跟网络通信无关 因为所有场景下网络操作都是异步的 数据”这件事情 同步模式下,业务逻辑不IO逻辑分离,且根据 “隔离仓”原则,为了保证整个系统更加稳定和高 效地运行,业务逻辑本身也需要在丌同的隔离的区 域内迚行。而这些区域,就是线程池。 所以构建生产者,就需要对线程池迚行精细的管理。 下面是针对线程池的各种管理方式。 Producer-单线程池 Producer Eventloop Eventloop ……0 码力 | 17 页 | 2.22 MB | 1 年前3《Saga分布式事务解决⽅案与实践》演讲者/姜宁
后续的开发计划 微服务架构 • 微服务架构将⼀一个应⽤用分成多个相互独⽴立的服务。 • 好处是各个服务能够持续独⽴立的开发和部署。 • 难题是服务的数据需要采⽤用什什么样的⽅方式来进⾏行行存储? 多个微服务使⽤用同⼀一数据库 A B C commit rollback ⼀一个典型的微服务架构应⽤用 EdgeService Customer Service Order Service https://queue.acm.org/detail.cfm?id=1394128 TCC • Try: 尝试执⾏行行业务 • 完成所有业务检查,预留留必须的业务资源 • Confirm:确认执⾏行行业务 • 真正执⾏行行业务,不不做业务检查 • Cancel:取消执⾏行行业务 • 释放Try阶段预留留的业务资源 业务服务 try confirm cancel 通过领域建模来解决 as.html 如何应对隔离性问题 • 隔离的本质是控制并发,防⽌止并发事务操作相同资源⽽而引起结果错乱 • 在应⽤用层⾯面加⼊入逻辑锁的逻辑。 • Session层⾯面隔离来保证串串⾏行行化操作。 • 业务层⾯面采⽤用预先冻结资⾦金金的⽅方式隔离此部分资⾦金金。 • 业务操作过程中通过及时读取当前状态的⽅方式获取更更新。 Saga的实现⽅方式 • 集中式的实现⽅方式 (Orchestration-based0 码力 | 39 页 | 2.78 MB | 1 年前3《Saga分布式事务解决⽅案与实践》演讲者/姜宁
后续的开发计划 微服务架构 • 微服务架构将⼀一个应⽤用分成多个相互独⽴立的服务。 • 好处是各个服务能够持续独⽴立的开发和部署。 • 难题是服务的数据需要采⽤用什什么样的⽅方式来进⾏行行存储? 多个微服务使⽤用同⼀一数据库 A B C commit rollback ⼀一个典型的微服务架构应⽤用 EdgeService Customer Service Order Service https://queue.acm.org/detail.cfm?id=1394128 TCC • Try: 尝试执⾏行行业务 • 完成所有业务检查,预留留必须的业务资源 • Confirm:确认执⾏行行业务 • 真正执⾏行行业务,不不做业务检查 • Cancel:取消执⾏行行业务 • 释放Try阶段预留留的业务资源 业务服务 try confirm cancel 通过领域建模来解决 as.html 如何应对隔离性问题 • 隔离的本质是控制并发,防⽌止并发事务操作相同资源⽽而引起结果错乱 • 在应⽤用层⾯面加⼊入逻辑锁的逻辑。 • Session层⾯面隔离来保证串串⾏行行化操作。 • 业务层⾯面采⽤用预先冻结资⾦金金的⽅方式隔离此部分资⾦金金。 • 业务操作过程中通过及时读取当前状态的⽅方式获取更更新。 代码: https://github.com/apache0 码力 | 33 页 | 2.38 MB | 1 年前3ServiceComb 的前世今生
接口 文档 接口 文档 生成 生成 • 面向契约而不是逻辑 • 解耦服务提供者和消费者的开发顺序 • 契约定义为语言中立 • 规范化系统接口,让实现与文档的同 步成为必须 • 通过工具简化整个过程 API First 增速微服务开发 --- 工具支持 OpenAPI (Swagger) 定义 编辑器:在线编辑,语法提示, 错误检查 微服务基础治理 微服务高级治理 服 务 发 现 服 务 配 置 服 务 路 由 多 通 信 访 问 调 用 链 跟 踪 多 事 务 管 理 多 运 行 时 管 理 ServiceMesh 容 错 & 熔 断 限 流 降 级 服 务 隔 离 容 量 预 测 微 服 务 安 全 工具链生态0 码力 | 16 页 | 1.45 MB | 1 年前3微服务架构及ServiceComb实践
关注对性能的要求 举例:商品维护和下订单是2个微服务,下订单系统对性能有较高要求,所以可以考虑把商品的价格从商品维护微服务同步到订单系统,该同步动作 对性能没有要求,对事务性有要求。 常见的服务间通信模式:同(异)步通信,API组合,基于MQ的异步通信 事务性: saga, 事务性消息发布(一次仅一次),分布式事务等 很易用的服务间saga事务方案Servicecomb-Pack: https://github Redis Redis Gateway Saga同步qualification 1. 每个微服务对应自己数据层 2. 拆分经验:看业务,不看技术 3. 利用:saga, 事务性消息发布,最终一致性,同(异)步调用组合等微服务模式 [社区网站] http://servicecomb.apache.org [Github ] https://github.com/apache?q=servicecomb0 码力 | 14 页 | 2.04 MB | 1 年前3消费者云CSE微服务实践
消费者云业务服务集群规模大,单点的性能提升能够带来巨大收益 从用户体验看,端到端时延非常重要,分布式乊后带来的时延增加,是一个很大的挑戓 丌是所有业务都有苛刻的性能需求,丌同业务对性能的诉求丌同, 可以按需选择协议和传输方式,服务不传输协议、序列化方式解耦 微服务框架技术选型-成熟 微服务框架采用的技术应该是经过验证、业界主流的技术,例如网 络传输采用Netty 微服 . 最佳实践 无论Rest API,戒者RPC Highway API,统一使用Swagger YAML定义API 服务端和客户端都基于API定义,通过CSE提供的工具生成丌同语言的类库, 客户端可以丌导入服务端的类库定义,双方互相解耦 始终以在线的API定义为准,防止服务端私自修改接口代码(例如增减字段、 修改字段类型) 每日微服务流水线构建,及时发现接口丌兼容问题0 码力 | 22 页 | 1.39 MB | 1 年前3使用微服务架构快速开发万级TPS高可用电商系统
关注对性能的要求 举例:客户维护和订单是2个微服务,订单系统对性能有较高要求,所以可以考虑把购房资格信息从客户维护微服务同步到订单系统,改同步动作 对性能没有要求,对事务性有要求。 常见的服务间通信模式:同(异)步通信,API组合,基于MQ的异步通信 事务性: saga, 事务性消息发布(一次仅一次),分布式事务等 很易用的服务间saga事务方案Servicecomb ServicePack: https://github Redis Redis Gateway Saga同步qualification 1. 每个微服务对应自己数据层 2. 拆分经验:看业务,不看技术 3. 利用:saga, 事务性消息发布,最终一致性,同(异)步调用组合等微服务模式 [社区网站] http://servicecomb.apache.org [Github ] https://github.com/apache?q=servicecomb0 码力 | 15 页 | 1.46 MB | 1 年前3Service Mesh在华为公 有云的实践
Service Mesh在华为内部的技术演进 我们在构建微服务,⽽而构建微服务是困难 的 微服务架构模式引⼊入的问题 路由规则 • 引流 • ⽀支持权重 • 根据消费者信息或请求特征进⾏行引流 Consumer 0.2 Provider 1.2 Provider 1.3 80% 20% Consumer 0.1 Provider 1.2 Provider 1.3 cookie:version=0 L4 TCP L3-1 IP/Data link/Physical Chassis 这⾥里呢? Service Mesh • ⼀一种基础设施层,服务间的通信通过 Service Mesh进⾏行 • 可靠地传输复杂⺴⽹网络拓扑中服务的请 求,将服务变成现代的云原⽣生服务 • ⼀一种⺴⽹网络代理的实现,通常与业务服 务部署在⼀一起,业务服务不感知 • ⼀一种TCP/IP之上的⺴⽹网络模型 • 基于容器的分布式系统设计模式 • 容器可以共享存储与⺴⽹网络的能⼒力 应⽤用程序容器 ⽇日志同步⼯工具容器 存储卷 Sidecar优势 • 以容器作为基础打包单元,可以分给不同的团队进⾏行开发测试 • 可重⽤用 • 以容器作为错误边界,使服务能够正确推出 • 独⽴立回滚与更新 第⼆二代:HSA SideCar • 2016年,基于Java 微服务 框架开发 • 提供SOAP协议转换0 码力 | 52 页 | 4.37 MB | 1 年前3
共 17 条
- 1
- 2