微服务场景下的数据一致性解决方案 - 殷湘和平统一 # 微服务场景下的数据一致性解决方案 殷湘 华为PaaS微服务架构师 开源能力中心  ## 大纲 • 离 数据一致性的起因 • 合 数据一致性的解决方案 • 断 方案选择建议 ## 离 数据一致性的起因 ![Image] jpg) ## 单体应用 • 单体应用由于所有模块(A/B/C)使用同一个数据库 • 数据一致性通过数据库事务保证  ## 微服务场景 ## 数据一致性无法完全通过数据库保证 离 独立进程  独立部署 独立技术 独立团队 MongoDB Cassandra ## 合 数据一致性的解决方案 ## Saga • 1987年Hector & Kenneth 发表论文 Sagas • Saga = Long Live Transaction (LLT) • LLT0 码力 | 31 页 | 4.28 MB | 2 年前3
Redis 多数据中心双向同步 祝辰Redis 方便的多种数据结构类型对于储存这种数据比较方便. 同时由于供应商是在全球分布的特性,就更需要一个能够多点写入的 Redis 集群, 支持海外站点和国内站点同时进行读写;并解决因此可能出现的数据一致性问题。  ## Data Replication0 码力 | 45 页 | 1.74 MB | 2 年前3
2.1.1 Golang主动式内存缓存的优化探索之路千万级内存对象,GC严重耗时,如何解决? - 复杂的查询场景,内存数据如何高效组织? • 主动式内存缓存,如何保证数据实时性? - 数据太多,内存不够用,如何进行存储扩展? ## 第二部分 难点攻克 ## “ ## 数据一致性如何保证? ## 一 致性 同步、更新  框架优势 ● 业务代码与框架代码分离,聚焦业务开发 ● 缓存接入成本低,无需关注内部的管理,开箱即用 ● 提供灵活的查询、过滤、排序、分页等接口,为查询业务赋能 ● 开发者无需关注缓存与数据库的数据一致性,框架层面有保障 ● 框架提供脚手架,框架代码自动生成,减少心智负担 ● 海量数据可扩展,接入冷热数据交换策略,只需简单配置 ● 海量数据存储,不会触发GC扫描,服务性能无压力 ● 单元测试高覆盖,稳定有保障0 码力 | 48 页 | 6.06 MB | 2 年前3
从百度文件系统看大型分布式系统设计中的定式与创新ts/3/c/4/f/3c4f4472bd39b0f6c3c7a33b7fca45de/p8_1.jpg) ## 设计一个分布式系统要考虑的 • 数据与计算的分片 · 分区故障容忍 · 数据一致性 · 系统扩展性 · 延迟与吞吐 • 成本与资源利用率 ## 数据与计算的分片 ## · 哈希分片 - 简单、均衡 - 扩容复杂、易用性差 - 一致性哈希、虚拟节点 ## • 按范围、数据量分0 码力 | 24 页 | 937.45 KB | 2 年前3
Apache ShardingSphere 中文文档 5.1.1片和读写分离联合使用,能够更加有效的提升系统性能。 #### 4.5.2 挑战 读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题。这包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。并且,读写分离也带来了与数据分片同样的问题,它同样会使得应用开发和运维人员对数据库的操作和运维变得更加复杂。下图展现了将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。 高可用是现代系统的最基本诉求,作为系统基石的数据库,对于高可用的要求也是必不可少的。 在存算分离的分布式数据库体系中,存储节点和计算节点的高可用方案是不同的。对于有状态的存储节点来说,需要其自身具备数据一致性同步、探活、主节点选举等能力;对于无状态的计算节点来说,需要感知存储节点的变化的同时,还需要独立架设负载均衡器,并具备服务发现和请求分发的能力。 Apache ShardingSphere 自身 |output|数据写入配置| |stream\_channel|数据通道配置| |completion\_detector|作业完成检测算法配置| |data\_consistency\_checker|数据一致性校验算法配置| 示例 Sharding Table Rule SHOW SHARDING TABLE RULES mysql> SHOW SHARDING TABLE RULES; +0 码力 | 409 页 | 4.47 MB | 2 年前3
Apache ShardingSphere 中文文档 5.1.2片和读写分离联合使用,能够更加有效的提升系统性能。 #### 4.5.2 挑战 读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题。这包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。并且,读写分离也带来了与数据分片同样的问题,它同样会使得应用开发和运维人员对数据库的操作和运维变得更加复杂。下图展现了将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。 高可用是现代系统的最基本诉求,作为系统基石的数据库,对于高可用的要求也是必不可少的。 在存算分离的分布式数据库体系中,存储节点和计算节点的高可用方案是不同的。对于有状态的存储节点来说,需要其自身具备数据一致性同步、探活、主节点选举等能力;对于无状态的计算节点来说,需要感知存储节点的变化的同时,还需要独立架设负载均衡器,并具备服务发现和请求分发的能力。 Apache ShardingSphere 自身 |output|数据写入配置| |stream\_channel|数据通道配置| |completion\_detector|作业完成检测算法配置| |data\_consistency\_checker|数据一致性校验算法配置| 示例 Sharding Table Rule SHOW SHARDING TABLE RULES mysql> SHOW SHARDING TABLE RULES; +----------------+0 码力 | 446 页 | 4.67 MB | 2 年前3
Apache ShardingSphere 中文文档 5.1.0片和读写分离联合使用,能够更加有效的提升系统性能。 #### 4.5.2 挑战 读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题。这包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。并且,读写分离也带来了与数据分片同样的问题,它同样会使得应用开发和运维人员对数据库的操作和运维变得更加复杂。下图展现了将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。 高可用是现代系统的最基本诉求,作为系统基石的数据库,对于高可用的要求也是必不可少的。 在存算分离的分布式数据库体系中,存储节点和计算节点的高可用方案是不同的。对于有状态的存储节点来说,需要其自身具备数据一致性同步、探活、主节点选举等能力;对于无状态的计算节点来说,需要感知存储节点的变化的同时,还需要独立架设负载均衡器,并具备服务发现和请求分发的能力。 Apache ShardingSphere 自身 |output|数据写入配置| |stream\_channel|数据通道配置| |completion\_detector|作业完成检测算法配置| |data\_consistency\_checker|数据一致性校验算法配置| 示例 Sharding Table Rule SHOW SHARDING TABLE RULES mysql> SHOW SHARDING TABLE RULES; +----------------+0 码力 | 406 页 | 4.40 MB | 2 年前3
Nacos架构&原理
的架构,主要目的是为了解决集中化和互联网化所带来的架构扩展性和面对海量用户请求的技术挑战。这里面其中有一个关键点是软负载。因为整个分布式架构需要有一个软负载来协作各个节点之间的服务在线离线状态、数据一致性、以及动态配置数据的推送。这里面最简单的需求就是将一个配置准时的推送到不同的节点。即便如此简单需求,随着业务规模变大也会变得非常复杂。如何能将数据准确的在3秒钟之内推送到每一个计算节点,这是当时提 之间的数据一致性以及数据同步,而要解决这个问题,就不得不引入共识算法,通过算法来保障各个节点之间的数据的一致性。 ## 为什么 Nacos 选择了 Raft 以及 Distro 为什么 Nacos 会在单个集群中同时运行 CP 协议以及 AP 协议呢?这其实要从 Nacos 的场景出发的:Nacos 是一个集服务注册发现以及配置管理于一体的组件,因此对于集群下,各个节点之间的数据一致性保障问题,需要拆分成两个方面 己的代码模块中去显示的处理一致性协议的读写请求逻辑,以及需要自己去实现一个对接一致性协议的存储,这其实是不好的,服务发现以及配置模块,更多应该专注于数据的使用以及计算,而非数据怎么存储、怎么保障数据一致性,数据存储以及多节点一致的问题应该交由存储层来保证。为了进一步降低一致性协议出现在服务注册发现以及配置管理两个模块的频次以及尽可能让一致性协议只在内核模块中感知,Nacos这里又做了另一份工作——数据存储抽象。0 码力 | 326 页 | 12.83 MB | 1 年前3
Apache ShardingSphere 中文文档 5.0.0片和读写分离联合使用,能够更加有效的提升系统性能。 #### 4.4.2 挑战 读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题。这包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。并且,读写分离也带来了与数据分片同样的问题,它同样会使得应用开发和运维人员对数据库的操作和运维变得更加复杂。下图展现了将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。 size= # 工作线程数量,默认值:CPU 核数 spring.shardingsphere.props.check.table.metadata.enabled= # 是否在启动时检查分表元数据一致性,默认值:false ## 数据分片 ## 配置项说明 spring.shardingsphere.datasource.names= # 数据源名称,多数据源以逗号分隔 spring.shardingsphere size= # 工作线程数量,默认值:CPU 核数 sharding.jdbc.config.props.check.table.metadata.enabled= # 是否在启动时检查分表元数据一致性,默认值:false ## 数据治理 ## 配置项说明 ## # 省略数据源、数据分片和读写分离配置 sharding.jdbc.config.sharding.orchestration0 码力 | 385 页 | 4.26 MB | 2 年前3
Apache ShardingSphere 中文文档 5.3.2三种模式中,选择适合自己的分布式事务解决方案。 ## ShardingSphere XA 事务使用场景 对于 XA 事务,提供了分布式环境下,对数据强一致性的保证。但是由于存在同步阻塞问题,对性能会有一定影响。适用于对数据一致性要求非常高且对并发性能要求不是很高的业务场景。 ## ShardingSphere BASE 事务使用场景 对于 BASE 事务,提供了分布式环境下,对数据最终一致性的保证。由于在整个事务过程中,不会像 ShardingSphere LOCAL 事务使用场景 对于 LOCAL 事务,在分布式环境下,不保证各个数据库节点之间数据的一致性和隔离性,需要业务方自行处理可能出现的不一致问题。适用于用户希望自行处理分布式环境下数据一致性问题的业务场景。 #### 8.2.6 相关参考 • 分布式事务的 YAML 配置 #### 8.2.7 核心概念 ## X A 协议 XA 协议最早的分布式事务模型是由 X/Open 国际联盟提出的 分片和读写分离联合使用,能够更加有效的提升系统性能。 #### 8.3.2 挑战 读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题。这包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。并且,读写分离也带来了与数据分片同样的问题,它同样会使得应用开发和运维人员对数据库的操作和运维变得更加复杂。下图展现了将数据分片与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。0 码力 | 508 页 | 4.44 MB | 2 年前3
共 100 条
- 1
- 2
- 3
- 4
- 5
- 6
- 10













