 高可用与一致性:构建强一致性分布式数据库 TiDB-沈泰宁构建强⼀一致性分布式数据库 TiDB 沈泰宁 R & D Engineer @ PingCAP ⾃自我介绍 ⾃自我介绍 • 沈泰宁 • R&D Engineer @ PingCAP • Maintainer • rust-prometheus • grpc-rs • … ⽬目录 • What is TiDB? • How to test? What is TiDB? Single0 码力 | 45 页 | 4.63 MB | 1 年前3 高可用与一致性:构建强一致性分布式数据库 TiDB-沈泰宁构建强⼀一致性分布式数据库 TiDB 沈泰宁 R & D Engineer @ PingCAP ⾃自我介绍 ⾃自我介绍 • 沈泰宁 • R&D Engineer @ PingCAP • Maintainer • rust-prometheus • grpc-rs • … ⽬目录 • What is TiDB? • How to test? What is TiDB? Single0 码力 | 45 页 | 4.63 MB | 1 年前3
 微服务和Service Mesh 在多个行业落地实践率 生产镜像仓库 测试镜像 仓库 历史 管理 批量 导入 接口 监控 www.163yun.com 多样需求 持续集成 中台化 PaaS托管 容器化 分布式事务 服务治理 全链路压测 性能监控 注册发现 服务管理 www.163yun.com ZIP源码包 持续集成 重新开发 迭代修改 个性开发 统一模版 接口统一 注册发现 www.163yun.com 网易容器平台优势 集群规模大:30000+节点 生产检验时间长:国内首个K8S公有云容器平台稳定运行1000+天 全球首批通过K8S一致性认证 基于OVS的网络性能优化 基于Ceph的存储性能优化 多集群统一管理 www.163yun.com 某物流企业 www.163yun.com 线上 系统A API网关 Confirm 无操作 + Cancel 补偿 • 事务消息——中间件 TMC 网易分布式事务的实现机制 www.163yun.com  事务发起者、事务参与方  分支事务用事务id做幂等  生成对应分支事务记录  并行调用  定时任务兜底 红色为异常流程 Q:回滚的时候,如果分支事务记录不存在,该 怎么返回? option1:返回成功0 码力 | 39 页 | 3.06 MB | 1 年前3 微服务和Service Mesh 在多个行业落地实践率 生产镜像仓库 测试镜像 仓库 历史 管理 批量 导入 接口 监控 www.163yun.com 多样需求 持续集成 中台化 PaaS托管 容器化 分布式事务 服务治理 全链路压测 性能监控 注册发现 服务管理 www.163yun.com ZIP源码包 持续集成 重新开发 迭代修改 个性开发 统一模版 接口统一 注册发现 www.163yun.com 网易容器平台优势 集群规模大:30000+节点 生产检验时间长:国内首个K8S公有云容器平台稳定运行1000+天 全球首批通过K8S一致性认证 基于OVS的网络性能优化 基于Ceph的存储性能优化 多集群统一管理 www.163yun.com 某物流企业 www.163yun.com 线上 系统A API网关 Confirm 无操作 + Cancel 补偿 • 事务消息——中间件 TMC 网易分布式事务的实现机制 www.163yun.com  事务发起者、事务参与方  分支事务用事务id做幂等  生成对应分支事务记录  并行调用  定时任务兜底 红色为异常流程 Q:回滚的时候,如果分支事务记录不存在,该 怎么返回? option1:返回成功0 码力 | 39 页 | 3.06 MB | 1 年前3
 QCon北京2018-业务高速发展下的互联网金融系统架构演变-张现双+张现双,宜人贷研发架构师,移动后台负责人,负责 移动后台的技术研发和系统架构设计,并随着业务增长持续 不断的进行性能优化和系统架构升级。 从事过研发、运维、dba等工作,在应对互联网系统流 量、并发、安全、一致性问题等方面有一些经验。 翻译出版专著:《可伸缩架构:面向增长应用的高可用》 大纲� 01 宜人贷发展历程 02 移动后台架构演进 03 流量应对策略 04 关于监控 第一部分 移动服务C 接入层 服务A 服务B 1 2 移动服务 接入层 v2 v3 v1 重要原则 幂等、接口可重入 接口规范化(命名、类型、长度等) 分布式事务,补偿、撤销机制 接口缓存,热数据尽可能前置 DB跟随服务 代码、逻辑、结构等都要适时重构 最终架构[简版] 移动后台打散,界限趋于不明显 极大消除冗余,三级两层划分 -------Joe Armstrong 关键点 分而治之,缩小竞争面 加速资源交换,更快响应 共享资源串行操作 数据一致性(脏读,丢失更新等) 业务纵向拆分,化整为零 资源拆分,横向扩展 cache,index,partition parallel non-blocking sync、lock,cas0 码力 | 42 页 | 19.96 MB | 1 年前3 QCon北京2018-业务高速发展下的互联网金融系统架构演变-张现双+张现双,宜人贷研发架构师,移动后台负责人,负责 移动后台的技术研发和系统架构设计,并随着业务增长持续 不断的进行性能优化和系统架构升级。 从事过研发、运维、dba等工作,在应对互联网系统流 量、并发、安全、一致性问题等方面有一些经验。 翻译出版专著:《可伸缩架构:面向增长应用的高可用》 大纲� 01 宜人贷发展历程 02 移动后台架构演进 03 流量应对策略 04 关于监控 第一部分 移动服务C 接入层 服务A 服务B 1 2 移动服务 接入层 v2 v3 v1 重要原则 幂等、接口可重入 接口规范化(命名、类型、长度等) 分布式事务,补偿、撤销机制 接口缓存,热数据尽可能前置 DB跟随服务 代码、逻辑、结构等都要适时重构 最终架构[简版] 移动后台打散,界限趋于不明显 极大消除冗余,三级两层划分 -------Joe Armstrong 关键点 分而治之,缩小竞争面 加速资源交换,更快响应 共享资源串行操作 数据一致性(脏读,丢失更新等) 业务纵向拆分,化整为零 资源拆分,横向扩展 cache,index,partition parallel non-blocking sync、lock,cas0 码力 | 42 页 | 19.96 MB | 1 年前3
 海尔实时计算平台技术选型与实践CDC可选方案: • Canal Postgresql CDC 建议方案 BottledWater: • 支持postgresql 9.4及以后版本 • 几乎不影响数据库本身性能 • 事务一致性的输出 • 容错 上图摘自confluent官网 Flume适合: • 日志收集 • 日志传输 • 拦截数据 消息队列适合: • 消息持久化 • 解耦 推荐:Flume+ 消息队列 为何要引入消息队列 消息队列可选方案 • Kafka • Jafka • RocketMQ • RabbitMQ • ActiveMQ • Apollo 消息队列使用场景及选型 事务可靠性场景(ActiveMQ/RabbitMQ/RocketMQ): • 重要业务数据的异步处理 吞吐量优先场景(Kafka/RocketMQ): • 大规模数据的传输和收集 Kafka web管理界面:0 码力 | 41 页 | 3.21 MB | 1 年前3 海尔实时计算平台技术选型与实践CDC可选方案: • Canal Postgresql CDC 建议方案 BottledWater: • 支持postgresql 9.4及以后版本 • 几乎不影响数据库本身性能 • 事务一致性的输出 • 容错 上图摘自confluent官网 Flume适合: • 日志收集 • 日志传输 • 拦截数据 消息队列适合: • 消息持久化 • 解耦 推荐:Flume+ 消息队列 为何要引入消息队列 消息队列可选方案 • Kafka • Jafka • RocketMQ • RabbitMQ • ActiveMQ • Apollo 消息队列使用场景及选型 事务可靠性场景(ActiveMQ/RabbitMQ/RocketMQ): • 重要业务数据的异步处理 吞吐量优先场景(Kafka/RocketMQ): • 大规模数据的传输和收集 Kafka web管理界面:0 码力 | 41 页 | 3.21 MB | 1 年前3
 数字货币交易系统架构 Python实现 黄毅as amount from trades group by 1 2 交易系统架构设计 交易系统架构设计-设计目标 • 吞吐量5w TPS, 延迟10ms • 能睡个好觉(数据持久化,数据最终一致性,容错) • 设计简单,运维方便 交易系统架构设计-关键点 • 内存撮合服务的状态持久化和高可用 • 消息处理顺序的保证 • 异步服务之间消息传送的可靠性 • K线:实时的分组聚合操作 交易系统架构设计-redis stream • Kafka-like • 一个订阅者的情况,消息有序 • Consumer group负载均衡(不保证消息顺序) • 可以批量处理消息 • 在同一个事务中存储处理结果和更新消费offset $ redis-cli > xread block 60 count 100000 streams b{btc_usdt}o offset … 交易系统架构设计-异步任务 read_events(redis, ‘u{btc_usdt}o’, offset): result = process(events) offset = events[-1][0] with pg: # 事务 save_results(pg, results) pg.execute(‘update task_offset set offset=%s’,0 码力 | 24 页 | 799.65 KB | 1 年前3 数字货币交易系统架构 Python实现 黄毅as amount from trades group by 1 2 交易系统架构设计 交易系统架构设计-设计目标 • 吞吐量5w TPS, 延迟10ms • 能睡个好觉(数据持久化,数据最终一致性,容错) • 设计简单,运维方便 交易系统架构设计-关键点 • 内存撮合服务的状态持久化和高可用 • 消息处理顺序的保证 • 异步服务之间消息传送的可靠性 • K线:实时的分组聚合操作 交易系统架构设计-redis stream • Kafka-like • 一个订阅者的情况,消息有序 • Consumer group负载均衡(不保证消息顺序) • 可以批量处理消息 • 在同一个事务中存储处理结果和更新消费offset $ redis-cli > xread block 60 count 100000 streams b{btc_usdt}o offset … 交易系统架构设计-异步任务 read_events(redis, ‘u{btc_usdt}o’, offset): result = process(events) offset = events[-1][0] with pg: # 事务 save_results(pg, results) pg.execute(‘update task_offset set offset=%s’,0 码力 | 24 页 | 799.65 KB | 1 年前3
 领域驱动设计&中台/架构分层模型适配03 分层模型适配实例例 DDD分层参考架构 DDD分层参考架构 给⽤用户提供界⾯面,关注⽤用户交互和体验 前端应⽤用 API服务 业务领域 基础设施 为前端应⽤用提供API服务,关注事务和分布式等技术性问题 领域模型和领域逻辑,关注业务概念。 访问外界系统(调⽤用外界系统)的技术相关实现。 后台服务 前端应⽤用 分层依据: ⼲干系⼈人和技术点 DDD分层参考架构 - 前端应⽤用 为前端和第三⽅方应⽤用提供API服务,关注服务编排,事务和 分布式等 前端应⽤用 应⽤用服务 业务领域 基础设施 ⼲干系⼈人: 应⽤用开发⼈人员 诉求: 灵活易易使⽤用的API 技术点: 性能,事务,分布式,安全等⾮非功能性需求 API服务 ⼯工作内容: • 接收外部请求并响应: 如HTTP请求, 消息处理理 • 事务管理理 • 认证 • 缓存 • ⽇日志 • 异常处理理0 码力 | 39 页 | 2.54 MB | 1 年前3 领域驱动设计&中台/架构分层模型适配03 分层模型适配实例例 DDD分层参考架构 DDD分层参考架构 给⽤用户提供界⾯面,关注⽤用户交互和体验 前端应⽤用 API服务 业务领域 基础设施 为前端应⽤用提供API服务,关注事务和分布式等技术性问题 领域模型和领域逻辑,关注业务概念。 访问外界系统(调⽤用外界系统)的技术相关实现。 后台服务 前端应⽤用 分层依据: ⼲干系⼈人和技术点 DDD分层参考架构 - 前端应⽤用 为前端和第三⽅方应⽤用提供API服务,关注服务编排,事务和 分布式等 前端应⽤用 应⽤用服务 业务领域 基础设施 ⼲干系⼈人: 应⽤用开发⼈人员 诉求: 灵活易易使⽤用的API 技术点: 性能,事务,分布式,安全等⾮非功能性需求 API服务 ⼯工作内容: • 接收外部请求并响应: 如HTTP请求, 消息处理理 • 事务管理理 • 认证 • 缓存 • ⽇日志 • 异常处理理0 码力 | 39 页 | 2.54 MB | 1 年前3
 从百度文件系统看大型分布式系统设计中的定式与创新数据与计算的分片 • 分区故障容忍 • 数据一致性 • 系统扩展性 • 延迟与吞吐 • 成本与资源利用率 • … 数据与计算的分片 • 哈希分片 - 简单、均衡 - 扩容复杂、易用性差 - 一致性哈希、虚拟节点 • 按范围、数据量分 - 使用简单 - 需要管理元数据 - 中心化与去中心化 元数据管理 • 去中心化 - P2P技术 - 潜在的一致性问题 - 能管理的元数据有限 • 中心化 几十台机器突然消失 - 磁盘、单机故障 • 通过冗余应对故障 一个典型的数据处理场景 数据处理模块 数据接收模块 存储 主 从 从 1. 写入 2. 通知 3. 读取 多副本冗余 一致性问题 • 怎么定义写成功 - 3副本成功, 影响可用性 • 可以读从节点 - 刚写入的读不到 - 不一致 • 只允许读主节点 - 扩展性受限 数据处理模块 数据接收模块 存储 主 从 CAP三选二 - Consistency 一致性 - Availability 可用性 - Partition Tolerance 分区 容忍性 • 分布式系统 - 容忍网络隔离是必须的 - CP、AP Quorum机制 • Quorum写(NWR) - Write 写成功W副本 - Read 读R副本 - W+R>N,就不会丢失更新 • 一致性协议 - Paxos - Raft CAP到CAD的演变0 码力 | 24 页 | 937.45 KB | 1 年前3 从百度文件系统看大型分布式系统设计中的定式与创新数据与计算的分片 • 分区故障容忍 • 数据一致性 • 系统扩展性 • 延迟与吞吐 • 成本与资源利用率 • … 数据与计算的分片 • 哈希分片 - 简单、均衡 - 扩容复杂、易用性差 - 一致性哈希、虚拟节点 • 按范围、数据量分 - 使用简单 - 需要管理元数据 - 中心化与去中心化 元数据管理 • 去中心化 - P2P技术 - 潜在的一致性问题 - 能管理的元数据有限 • 中心化 几十台机器突然消失 - 磁盘、单机故障 • 通过冗余应对故障 一个典型的数据处理场景 数据处理模块 数据接收模块 存储 主 从 从 1. 写入 2. 通知 3. 读取 多副本冗余 一致性问题 • 怎么定义写成功 - 3副本成功, 影响可用性 • 可以读从节点 - 刚写入的读不到 - 不一致 • 只允许读主节点 - 扩展性受限 数据处理模块 数据接收模块 存储 主 从 CAP三选二 - Consistency 一致性 - Availability 可用性 - Partition Tolerance 分区 容忍性 • 分布式系统 - 容忍网络隔离是必须的 - CP、AP Quorum机制 • Quorum写(NWR) - Write 写成功W副本 - Read 读R副本 - W+R>N,就不会丢失更新 • 一致性协议 - Paxos - Raft CAP到CAD的演变0 码力 | 24 页 | 937.45 KB | 1 年前3
 高可用分布式流数据存储设计-李玥⾼高可⽤用分布式流数据存储设计 李玥 京东集团 技术架构部 架构师 ⾃自我介绍 ⾃自我介绍 李李玥 京东集团 技术架构部 架构师 负责主导设计新⼀一代京东消息中间件系统,专注于流数据的⼀一致性分发和可靠存储、分布式实时计算和⾼高可⽤用分 布式系统架构等技术领域。 从事互联⽹网研发、架构10余年年,曾在浪潮集团、当当⽹网等公司从事架构相关⼯工作。2017年年加⼊入京东,期间提升京 东商城相关系统的性能和吞吐量量数倍。 统⼀一的流数据存储平台 我们的愿景 Services Streaming Storage Data 有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性 (近乎)无限容量 我们需要什什么样的存储? WHAT Pub/Sub Powered by United Stream Store Streaming Connector Distributed Journal Files 线程模型 集群 · 架构 没有最好的架构,只有最合适的架构 取 · 舍 学会 ⽅得始终 取 舍 从实用角度出发,如何取舍? Consistency ⼀一致性 Availability 可⽤用性 Performance 性能 例⼦ ⽤用Redis给MySQL做缓存 ⼤大促限流 Complexity 复杂度 Apache ZooKeeper0 码力 | 36 页 | 6.02 MB | 1 年前3 高可用分布式流数据存储设计-李玥⾼高可⽤用分布式流数据存储设计 李玥 京东集团 技术架构部 架构师 ⾃自我介绍 ⾃自我介绍 李李玥 京东集团 技术架构部 架构师 负责主导设计新⼀一代京东消息中间件系统,专注于流数据的⼀一致性分发和可靠存储、分布式实时计算和⾼高可⽤用分 布式系统架构等技术领域。 从事互联⽹网研发、架构10余年年,曾在浪潮集团、当当⽹网等公司从事架构相关⼯工作。2017年年加⼊入京东,期间提升京 东商城相关系统的性能和吞吐量量数倍。 统⼀一的流数据存储平台 我们的愿景 Services Streaming Storage Data 有序 Append only:尾部写入,不变 顺序读取 分布式 高性能 可靠性 顺序一致性 (近乎)无限容量 我们需要什什么样的存储? WHAT Pub/Sub Powered by United Stream Store Streaming Connector Distributed Journal Files 线程模型 集群 · 架构 没有最好的架构,只有最合适的架构 取 · 舍 学会 ⽅得始终 取 舍 从实用角度出发,如何取舍? Consistency ⼀一致性 Availability 可⽤用性 Performance 性能 例⼦ ⽤用Redis给MySQL做缓存 ⼤大促限流 Complexity 复杂度 Apache ZooKeeper0 码力 | 36 页 | 6.02 MB | 1 年前3
 高性能高可用机票实时搜索系统报价数量量多,内存问题 • 报价源多,不不稳定 • 响应时间要求苛刻 • 搜索条件有热点 • 缓存报价不不准 • 尽量量⽤用原⽣生数据类型,编码 • 回数⽐比例例,异步搜索更更新 • 分批回数 • ⼀一致性哈希,负载均衡 • 供应商粒度,主动更更新 报价引擎 供应商规则 航司运价 航班舱位状态 套餐搭售 + + 低价特惠 商旅优选 头等舱 。。。 报价引擎—供应商规则 报价引擎 计算量量巨⼤大 报价引擎 索引 搜索引擎核⼼心 • 规则库 => 索引库 • 规则库写⼊入量量⼤大,集群峰值达20K TPS • 要求同步延迟很低,不不超过60s • 保持顺序⼀一致性,如果先删后插变成 先插后删,数据会不不⼀一致 • 数据最终⼀一致 • 系统⾼高可⽤用 报价引擎 — 组织索引 北北 京 | 上 海海 成 都 | 杭 州 ⼴广 州 | 郑 州 南 … SearchDB 航班数据 运价数据 cache cache cache cache PriceMerger <出发、到达、⽇日期、供应商列列表> 报价引擎 — 负载均衡 • ⼀一致性哈希 • 缓存命中率 • 热点航线均衡 • 系统⾼高可⽤用 Router PEK-SHA 高性能高可用机票实时搜索系统报价数量量多,内存问题 • 报价源多,不不稳定 • 响应时间要求苛刻 • 搜索条件有热点 • 缓存报价不不准 • 尽量量⽤用原⽣生数据类型,编码 • 回数⽐比例例,异步搜索更更新 • 分批回数 • ⼀一致性哈希,负载均衡 • 供应商粒度,主动更更新 报价引擎 供应商规则 航司运价 航班舱位状态 套餐搭售 + + 低价特惠 商旅优选 头等舱 。。。 报价引擎—供应商规则 报价引擎 计算量量巨⼤大 报价引擎 索引 搜索引擎核⼼心 • 规则库 => 索引库 • 规则库写⼊入量量⼤大,集群峰值达20K TPS • 要求同步延迟很低,不不超过60s • 保持顺序⼀一致性,如果先删后插变成 先插后删,数据会不不⼀一致 • 数据最终⼀一致 • 系统⾼高可⽤用 报价引擎 — 组织索引 北北 京 | 上 海海 成 都 | 杭 州 ⼴广 州 | 郑 州 南 … SearchDB 航班数据 运价数据 cache cache cache cache PriceMerger <出发、到达、⽇日期、供应商列列表> 报价引擎 — 负载均衡 • ⼀一致性哈希 • 缓存命中率 • 热点航线均衡 • 系统⾼高可⽤用 Router PEK-SHA- 2017-10-10 Search PEK-SHA 0 码力 | 26 页 | 1.94 MB | 1 年前3 分布式异地多活架构实践之路单点写,多点读) 非核心业务 老版本兼容服务、运营活动、配置、管 理平台、官网、论坛等 N/A 本地模式 (单点读写) 设计思路 核心业务异地多活 精准流量调度 数据同步 多元化 最终一致性 依赖关系优化 配套系统支撑 主 从 多 主 汇 聚 混 合 场景区分 封装屏蔽细节 容量合理规划 当前总体架构 合肥 北京 广州 HTTPDNS 智能DNS GSLB GSLB 专线/公网 尽可能减少数据同步 控制同步的大小 专线与公网互相容灾 环形同步路径容灾 Push无状态数据 CRSync异步同步 Service实时同步 北京IDC 合肥IDC 广州IDC 最终一致性 MQ 消息接口 消息状态库 定时补偿 MQ 监控 sdk Service 消息状态上报 调用重试/查询接口 同步消息管理服务 全局消息id生成 消息管理(预写、删除等) 重试、查询、监控接口 大纲 • 产品发展中遇到的问题 • 异地多活存在哪些技术挑战 • 讯飞输入法解决方案 • 应用实践以及经验教训 • 未来规划 未来规划 • 异地多活架构平台化 • 弹性伸缩完善 • 一致性要求较高场景 • 西部以及海外机房部署 Q & A0 码力 | 36 页 | 1.66 MB | 1 年前3 分布式异地多活架构实践之路单点写,多点读) 非核心业务 老版本兼容服务、运营活动、配置、管 理平台、官网、论坛等 N/A 本地模式 (单点读写) 设计思路 核心业务异地多活 精准流量调度 数据同步 多元化 最终一致性 依赖关系优化 配套系统支撑 主 从 多 主 汇 聚 混 合 场景区分 封装屏蔽细节 容量合理规划 当前总体架构 合肥 北京 广州 HTTPDNS 智能DNS GSLB GSLB 专线/公网 尽可能减少数据同步 控制同步的大小 专线与公网互相容灾 环形同步路径容灾 Push无状态数据 CRSync异步同步 Service实时同步 北京IDC 合肥IDC 广州IDC 最终一致性 MQ 消息接口 消息状态库 定时补偿 MQ 监控 sdk Service 消息状态上报 调用重试/查询接口 同步消息管理服务 全局消息id生成 消息管理(预写、删除等) 重试、查询、监控接口 大纲 • 产品发展中遇到的问题 • 异地多活存在哪些技术挑战 • 讯飞输入法解决方案 • 应用实践以及经验教训 • 未来规划 未来规划 • 异地多活架构平台化 • 弹性伸缩完善 • 一致性要求较高场景 • 西部以及海外机房部署 Q & A0 码力 | 36 页 | 1.66 MB | 1 年前3
共 16 条
- 1
- 2













