微服务场景下的数据一致性解决方案 - 殷湘和平统一 微服务场景下的数据一致性解决方案 殷湘 华为PaaS微服务架构师 开源能力中心 大纲 •离 数据一致性的起因 •合 数据一致性的解决方案 •断 方案选择建议 离 数据一致性的起因 单体应用 • 单体应用由于所有模块(A/B/C)使用同一个数据库 • 数据一致性通过数据库事务保证 A B C commit rollback 微服务场景 MySQL MongoDB MongoDB Cassandra 数据一致性无法完全通过数据库保证 离 独立进程 独立部署 独立技术 独立团队 合 数据一致性的解决方案 T1 T2 T3 C2 C1 • 1987年Hector & Kenneth 发表论文 Sagas • Saga = Long Live Transaction (LLT) • LLT = T1 + T2 + T3 + ... + Tn • 每个本地事务Tx 有对应的补偿 Saga transact transact transact B C A Saga compensate compensate 和平统一 减少业务代码集成/运维难度 剥离业务与数据一致性复杂度 和平:低侵入 让运维监控更加简单 可视化事务、调用链 统一:集中式 无状态、可集群、可分片 Event Sourcing架构 高可用 系统架构 – 基于图形 requests0 码力 | 31 页 | 4.28 MB | 1 年前3
张波-虎牙直播在微服务改造中的实践虎牙基础保障部中间件团队负责人 2019.8.11 Service Mesh Meetup #6 广州站 微服务改造事项 DNS-F在数据 库场景的落地 名字服务在负 载均衡场景的 落地 DNS-F在微服 务场景的落地 应用层探活 数据库故障 恢复时间长 服务故障牵 引慢,流量 接入生效时 间长 DNS生效慢 内部服务无 就近接入能 力 服务性能下 降流量不摘 除 实 接 入 能 力 异 常 摘 除 能 力 dmx dns-f app nacos M S write read DNS-F在数据库场景的落地 背景 在数据库服务切换时效率低,依赖 业务方修改配置,时效不确定,通 常需要10分钟以上; 目标 数据库切换秒级生效; 技术特点-DNS-F M S S S M1.mysql S1.mysql S2.mysql S3.mysql 级生效,新扩容服务主动拉取全量 配置,流量接入时长缩短3分钟+ 配置名字服务 配置IP方式 服务端下发文件更新配置,更新配 置生效时间长,由于需要预先知道 负责均衡集群的机器信息,扩缩容 需要等元信息同步以后才能接入流 量,扩容流量接入时间长 负载均衡节点对接名字服务 虎牙负载均衡部署的机器一台机器上可能存在数百的配置,每次节点生效需要重新 reload配置,且节点新增或删除需人工上系统操作配置,配置生效对服务会有中断0 码力 | 27 页 | 1.03 MB | 1 年前3
ServiceComb java SDK详解Producer 透明RPC JAX-RS SpringMVC 以契约为核心,贯穿始终 • 开发模式(业务代码)、治理、传输三方解耦,互不感知 • 以高性能的Reactive为基础,同时兼容传统的同步开发模式,且支持传统的Servlet传输 LoadBalance …… QPS Trace …… QPS 架构 Common Swagger Generator Invocation endpoints endpoints endpoints Endpoint RESTful Highway All ...... 微服务调用-consumer 透明RPC: 同步、异步声明,可以分开进行,也可以在同一个接口中声明 interface Schema { String hello(String name); } interface Schema { C hello") CompletableFuturehelloReactive(String name); } RestTemplate AsyncRestTemplate 微服务调用-同步consumer Consumer Eventloop connection Queue/Buffer consumer thread synchronize invoke Handlers 0 码力 | 21 页 | 1.15 MB | 1 年前3
ServiceComb在华为消费者云的亿级用户微服务实践 微服务API设计:支持Swagger API规范 开发方式:支持透明RPC、Spring MVC风格的微服务开发 编程模型:同时支持同步、异步的编程模型 性能:支持原生的Reactive模式(EventLoop),相比于传 统的同步服务调用,性能更高(吞吐量N倍+提升、时延降低 为原来的50%-) 轻量级、易集成:可以方便的与Spring MVC、Tomcat等 已 Motan LB 内置LB: 客户端负载均 衡 外置LB: Nginx、 Ribbon SLB 注册中心 配置服务: Zookeeper etcd 缓存方案: Redis 数据库方案: DB + MQ 服务治理 服务治理: 超时、流控、 降级等 运维KPI: ELK Zabbix 调用链: zipkin 选择ServiceComb的原因: 实践- 业务熟悉的模式,可以更好的重用已有代码和开发经验,提升重构 效率 实践-同步和异步 Website: http://servicecomb.incubator.apache.org/ Gitter: https://gitter.im/ServiceCombUsers/Lobby 不一刀切,根据业务实际需要选择同步或者异步微服务调用 微服务消费端 业务 线程 池 异步 I/O线 程池0 码力 | 15 页 | 1.15 MB | 1 年前3
反应式微服务框架ServiceComb设计思想&mdash等待一个互斥信号或监视器(例如同步的代码块) n 执行一个长时间数据库操作并等待其结果 n 执行一个复杂的计算,占用了可感知的时长 n 在循环语句中长时间逗留 10000TPS=0.1ms处理一个请求 如果利⽤多核? ServiceComb 采⽤Vert.x的背景 3 Vert.x vs webflux 同步 Reactive ServiceComb同步线程模型 ServiceComb嵌套同步线程模型 橙色箭头走完后,对本线程的占用即完 成了,不会阻塞等待应答,该线程可以 处理其他任务 p 当收到远端应答后,由网络数据驱动开 始走红色箭头的应答流程 p 只要有任务,线程就不会停止,会一直 执行任务,可以充分利用cpu资源,也 不会产生多余的线程切换,去无谓地消 耗cpu。 压测数据 系统: Ubuntu 18.04.1 CPU: 4vCPU Intel(R) Xeon(R) CPU E5- E5- 2680 v4 @ 2.40GHz 内存: 8GB 测试代码:https://github.com/GuoYL123/ReactiveBenchmark 调优后的压测数据 n 寻找拐点 n 调整consumer/producer参数(网络线程/业务线程等),提升处理能力 n 重新调整测试驱动压力(加大或减小),重复前面步骤 n 输出最终性能拐点时的各项参数,包括TPS/时延/CPU/带宽等等0 码力 | 33 页 | 5.68 MB | 1 年前3
微服务架构及ServiceComb实践q=servicecomb Demo简介 从一个简单的天气预报微服务应用谈起 • Weathermapweb:界面服务 nodeJS • Fusionweather:汇聚服务,为前台界面提供数据 • Forecast:预报天气 • Weather:当前天气 • http://wyfrs4z7zxumdjp9.zizipo.cn-east- 2.huaweicse.com/#!?city=shenzhen 返回当前天气 数据库 API 任务 内容 getWeatherTask 从OpenWeatherMap定期 查询天气数据 定时任务 [社区网站] http://servicecomb.apache.org [Github ] https://github.com/apache?q=servicecomb 最简单的微服务 – 微服务的基本组件 组件 • 1个服务(应用+数据库) • 服务注册中心 • 每个微服务有自己的数据库(层) • 服务架构应用的质量很大程度取决于服务的拆分的高内聚,低耦合,不了解服务间通信,无法做出高质量的拆分。 不同的业务,涉及的不同的服务间通信有不同的要求 1. 关注事务性要求(ACID) 2. 关注对性能的要求 举例:商品维护和下订单是2个微服务,下订单系统对性能有较高要求,所以可以考虑把商品的价格从商品维护微服务同步到订单系统,该同步动作 对性能没有要求,对事务性有要求。0 码力 | 14 页 | 2.04 MB | 1 年前3
使用微服务架构快速开发万级TPS高可用电商系统房资格的对应信息(验资,诚意金等) id, customer_id, sale_id, comments 1…..* 接口 内容 customers CRUD qualifications CRUD 数据库 API git clone https://github.com/apache/servciecomb-samples cd servicecomb-samples/houserush/script/docker http://servicecomb.apache.org [Github ] https://github.com/apache?q=servicecomb 最简单的微服务 组件 • 1个服务(应用+数据库) • 服务注册中心 a) https://github.com/apache/servicecomb-center 服务注册中心 b) 核心服务注册表 |---服务名---|---服务实例U • 每个微服务有自己的数据库(层) • 服务架构应用的质量很大程度取决于服务的拆分的高内聚,低耦合,不了解服务间通信,无法做出高质量的拆分。 不同的业务,涉及的不同的服务间通信有不同的要求 1. 关注事务性要求(ACID) 2. 关注对性能的要求 举例:客户维护和订单是2个微服务,订单系统对性能有较高要求,所以可以考虑把购房资格信息从客户维护微服务同步到订单系统,改同步动作 对性能没有要求,对事务性有要求。0 码力 | 15 页 | 1.46 MB | 1 年前3
Apache ServiceComb 微服务创新项目解读使能多微服 务技术栈开 发的微服务 应用之间协 同工作和共 同治理 使能满足第三 方认证被广泛 采纳的趋势下 认证鉴权的性 能和安全的要 求 帮助企业用 户达成业务 模型和数据 集成标准统 一 通过易于理 解的数据和 入口,管理 复杂的分布 式系统配置 多语言运行环境 服务中心异构通信 微服务鉴权 分布式系统配置中心 微服务契约工具 Apache ServiceComb [Website] 发布契约 ServiceComb 契约开发工具 开发微服务 测试微服务 客户+集成商 软件提供商 部署微服务 契约仓库 微服务 运行环 境 验收微服务 协同实现基于契约(API)的数据、服务标准化管控 划分微服务 (含依赖关系) 定义契约 (接口和模型) 发布契约 微服务 运行环 境 验收微服务 基于OpenAPI规范 全新微服务开发 遗留应用微服务化改造 Maven Syncer是一个多服务中心的同步工具,对应用程序透明。专为大型微服务架构设计,实现不同的微服务技术栈实现的微服 务业务可以进行数据通信,未来可支持跨云的数据通信支持 • 项目地址:https://github.com/apache/servicecomb-service-center/tree/master/syncer Syncer - 融合异构、多服务中心的同步工具 gossip 协议0 码力 | 13 页 | 1.24 MB | 1 年前3
微服务创新新品发布使能多微服 务技术栈开 发的微服务 应用之间协 同工作和共 同治理 使能满足第三 方认证被广泛 采纳的趋势下 认证鉴权的性 能和安全的要 求 帮助企业用 户达成业务 模型和数据 集成标准统 一 通过易于理 解的数据和 入口,管理 复杂的分布 式系统配置 分布式系统配置中心 服务中心异构通信 多语言运行环境 微服务鉴权 微服务契约工具 Apache ServiceComb 面对用户痛点持续创新 ServiceComb 契约开发工具 开发微服务 测试微服务 客户+集成商 软件开发商 部署微服务 契约仓库 微服务 运行环 境 验收微服务 协同企业遗留系统微服务化快速改造,实现基于契约的数据、服务标准化管控 微服务契约工具 https://github.com/apache/servicecomb-toolkit ServiceComb toolkit 提供契约、代码、文档相互转换和 Etcd(raft) 服务实例数据通道 Syncer集群间的消息通 道 Syncer Leader Eureka/Consule /Istio/K8S… Register Instances Discover https://github.com/apache/servicecomb-service-center/tree/master/syncer Syncer是一个多服务中心的同步工具,专为大型0 码力 | 12 页 | 2.96 MB | 1 年前3
微服务的设计原则与⽣态系统 - 王磊Conference 2017.4 https://www.continuousdelivery.com/ • 缩短交付周期 • 降低发布⻛风险 • 质量量内嵌 组织协同 环境管理理 数据管理理 松耦合架构 反馈验证 持续集成/部署 内建质量量 微服务架构是松耦合架构机制的⼀一种实现 为什什么基于DevOps? ● Communication ● Automation “去”中⼼心化 • ⾃自动化“⼀一切” 去“中⼼心化” - ⽤用合适的技术解决问题 数据库作为集成点 去“中⼼心化” - 业务持有数据 ⽤用户会话 Redis 会话服务 上下⽂文 购物⻋车 购物⻋车 产品数据 Mongo 产品服务 上下⽂文 上下⽂文 Redis 去“中⼼心化” - 业务持有数据 去“中⼼心化” - 智能服务⽽而⾮非智能总线 去“中⼼心化” - 智能服务⽽而⾮非智能总线 集中配置 基础设施 接⼊入层 业务层 - 聚合服务 - 基础服务 • ⾯面向对象设计(名词/动词) • 可重⽤用的逻辑 • 资源密集型部分 • 领域驱动设计 • 数据访问⽅方式 服务设计与拆分 44 Node.js Java 基础服务实现 聚合服务实现 Proxy Chained Shared Cache Asynchronous Messaging0 码力 | 62 页 | 6.65 MB | 1 年前3
共 42 条
- 1
- 2
- 3
- 4
- 5













