数据库一致性

分布式事务中常见的三种解决方案

我的梦境 提交于 2020-03-05 19:11:28
一、分布式事务前奏 事务:事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 本地事务:当事务由资源管理器本地管理时被称作本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。 全局事务:当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局的事务状态和参与的资源,协同资源的一致提交回滚。 TX协议:应用或者应用服务器与事务管理器的接口。 XA协议:全局事务管理器与资源管理器的接口。XA是由X/Open组织提出的分布式事务规范。该规范主要定义了全局事务管理器和局部资源管理器之间的接口。主流的数据库产品都实现了XA接口。XA接口是一个双向的系统接口,在事务管理器以及多个资源管理器之间作为通信桥梁。之所以需要XA是因为在分布式系统中从理论上讲两台机器是无法达到一致性状态的,因此引入一个单点进行协调。由全局事务管理器管理和协调的事务可以跨越多个资源和进程。全局事务管理器一般使用XA二阶段协议与数据库进行交互。 AP:应用程序,可以理解为使用DTP(Data Tools Platform)的程序。 RM:资源管理器,这里可以是一个DBMS或者消息服务器管理系统

Etcd 与Redis 业务应用场景差异

对着背影说爱祢 提交于 2020-03-01 14:16:47
Redis特点 1. 丰富的数据类型 (string, hash, set ,zset, list 等) 2. 读写性能优异 3. 单线程原子性 4. 可持久化 aof/rdb 5. 支持pub/sub 订阅发布模式 高可用方案:哨兵机制 分布式一致性:redis主从为异步复制模式,一致性无法保证 (多节点数据一致性强依赖网络延迟) 主要适用场景:队列, 缓存,分布式session,等非强一致性需求 ----- Etcd特点 说明:分布式的,一致性的KV存储系统 分布式一致性:基于raft协议,写入数据需要多数节点应答,确认后才会将数据返回给客户端。 复制模式:基于日志复制 主要适用场景:配置管理、服务发现 易用性方面:Etcd 提供了HTTP API 总结:配置管理/服务发现 需要高可用和强一致性,从上面可以看出,Redis并不具备该特性。Redis有着优秀的并发吞吐能力,在web应用中,Redis大多数当缓存,队列使用,缓解数据库压力。 来源: CSDN 作者: pfm685757 链接: https://blog.csdn.net/pfm685757/article/details/104591043

数据库和缓存双写的一致性问题

本秂侑毒 提交于 2020-02-29 17:30:31
首先,数据库与缓存双写不可能做到强一致性,只能做到最终一致性。如果项目要求是强一致性的,那么不能使用缓存。 从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们可以对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力即可。也就是说如果数据库写成功,缓存更新失败,那么只要到达过期时间,则后面的读请求自然会从数据库中读取新值然后回填缓存。因此,接下来讨论的思路不依赖于给缓存设置过期时间这个方案。 方案一:先更新缓存,再更新数据库 这种方式肯定不行的,缓存更新成功,数据库更新失败,怎么办? 方案二:先更新数据库,再更新缓存 有一致性问题。如果线程A先更新了数据库,然后线程B更新了数据库,接下来线程B更新了缓存,最后线程A更新了缓存。按道理线程A更新缓存应该比线程B更新缓存早才对,但是因为网络等原因,B却比A更早更新了缓存,这就导致了脏数据,因此不考虑。 方案三:先删缓存,再更新数据库 也会导致不一致。比如请求A进行写操作,删除了缓存,请求B查询发现缓存不存在,去数据库查询得到旧值并将旧值写入缓存,最后请求A将新值写入数据库。上述情况就会导致不一致的情形出现。而且,如果不采用给缓存设置过期时间策略,该数据永远都是脏数据。 方案四:先更新数据库,再删除缓存 老外提出了一个缓存更新套路,名为 《Cache-Aside pattern》

如何构建批流一体数据融合平台的一致性语义保证?

不羁岁月 提交于 2020-02-29 10:17:52
作者:陈肃 整理:周奇,Apache Flink 社区志愿者 本文根据陈肃老师在 Apache Kafka x Flink Meetup 深圳站的分享整理而成,文章首先将从数据融合角度,谈一下 DataPipeline 对批流一体架构的看法,以及如何设计和使用一个基础框架。其次,数据的一致性是进行数据融合时最基础的问题。如果数据无法实现一致,即使同步再快,支持的功能再丰富,都没有意义。 另外,DataPipeline 目前使用的基础框架为 Kafka Connect。为实现一致性的语义保证,我们做了一些额外工作,希望对大家有一定的参考意义。 最后,会提一些我们在应用 Kafka Connect 框架时,遇到的一些现实的工程问题,以及应对方法。尽管大家的场景、环境和数据量级不同,但也有可能会遇到这些问题。希望对大家的工作有所帮助。 一、批流一体架构 批和流是数据融合的两种应用形态 下图来自 Flink 官网。传统的数据融合通常基于批模式。在批的模式下,我们会通过一些周期性运行的 ETL JOB,将数据从关系型数据库、文件存储向下游的目标数据库进行同步,中间可能有各种类型的转换。 另一种是 Data Pipeline 模式。与批模式相比相比, 其最核心的区别是将批量变为实时:输入的数据不再是周期性的去获取,而是源源不断的来自于数据库的日志、消息队列的消息。进而通过一个实时计算引擎

Zookeeper知识梳理

丶灬走出姿态 提交于 2020-02-27 13:23:31
转载自: https://hadyang.github.io/interview/docs/architecture/distributed/zk/ 分布式应用 分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定任务。通常来说, 对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成 。 通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为 集群 ,而在集群中运行的每台机器被称为 节点 。 分布式应用的优点 可靠性:单个或几个系统的故障不会使整个系统出现故障。 可扩展性:可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间。 透明性:隐藏系统的复杂性,并将其显示为单个实体/应用程序。 分布式应用的挑战 竞争条件:两个或多个机器尝试执行特定任务,实际上只需在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。 死锁:两个或多个操作等待彼此无限期完成。 不一致:数据的部分失败。 ZooKeeper基础 Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据

Dream_Spark-----Spark 定制版:004~Spark Streaming事务处理彻底掌握

て烟熏妆下的殇ゞ 提交于 2020-02-26 22:56:41
Spark 定制版:004~Spark Streaming事务处理彻底掌握 本讲内容: a. Exactly Once b. 输出不重复 注:本讲内容基于 Spark 1.6.1版本(在2016年5月来说是Spark最新版本)讲解。 上节回顾: 上节课 通过案例透视了Spark Streaming Job 架构 和运行机,并结合源码进行了详细解说;同时也了解了Spark Streaming Job的容错机制,包括 Executor 与 Driver两方面的容错机制。 也就是说Job的事务处理,主要是在Executor 与 Driver两个应用中展开 开讲 首先,我们必须知道什么是事务及其一致性? 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。 一致性(consistency)。事务必须是使 数据库 从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交

精选文章推荐汇总-2018.03.13

China☆狼群 提交于 2020-02-26 03:49:12
springboot1.5.9 + mybatis + layui + shir搭建后台权限管理系统 作者:wyait 简介:业务场景 spring boot + mybatis后台管理系统框架; layUI前端界面; shiro权限控制,ehCache缓存; 老司机带你在MySQL领域“大吉大利,晚上吃鸡” 作者:superZS 简介:本章介绍MySQL官方推荐的一款高可用集群方案MySQL Group Replication。简称:MGR(组复制)。它是官方推出的一种基于Paxos协议的状态机复制,彻底解决了基于传统的异步复制和半同步复制中数据一致性问题无法保证的情况。也让MySQL数据库涉及的领域更广,彻底拥有了打开互联网金融行业的大门。2016年12月 MySQL Group Replication推出了第一个GA版本发布在MySQL5.7.17中。但目前直接投入到生产环境中使用,风险还是比较大。建议等其越来越成熟之后,我们再真正投入使用。 对HashMap的思考及手写实现 作者:zfz_linux_boy 简介:HashMap是Java中常用的集合,而且HashMap的一些思想,对于我们平时解决业务上的一些问题,在思路上有帮助,基于此,本篇博客将分析HashMap底层设计思想,并手写一个迷你版的HashMap! 分布式服务化系统一致性的“最佳实干” 作者

还没弄懂分布式场景下数据一致性问题?一文教你轻松解决!

一世执手 提交于 2020-02-26 03:23:33
文章纲要 此次分享的缘由 目前分布式事务问题是怎么解决的 行业中有什么解决方案 这些解决方案分别有什么优缺点 别人是怎么做的 我们可以怎么来做 此次分享的缘由 支付重构 考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户服务。原本收到充值回调后,可以将修改订单状态和增加金币放在一个mysql事务中完成的,但是呢,因为服务拆分了,就面临着需要协调2个服务才能完成这个事务 所以就带出来,我们今天要分享和讨论的话题是: 怎么解决分布式场景下数据一致性问题,暂且用分布式事务来定义吧。 同样的问题还存在于其他的场景: 送礼: 调用支付服务:先扣送礼用户的金币,然后给主播加相应的荔枝,确认第一步成功后,播放特效,发聊天室送礼评论等复制代码 充值成功消息: 完成充值订单,发送订单完成的kafka消息,在涉及支付交易等付费接口的时候,数据一致性的问题就显得尤为重要,因为都是钱啊 目前分布式事务是怎么解决的呢? 问题肯定不是新问题,也就是目前已经有相应的解决方案了,那就看一下现在是怎么来解决这类问题的吧。 以购买基础商品成功后发送支付订单完成消息为例:假设支付下单购买基础商品,此刻已经收到支付回调,订单已经处理成功了,这个时候kafka服务故障,消息发送失败

分布式事务中常见的三种解决方案

南笙酒味 提交于 2020-02-25 00:42:39
目录 一、分布式事务前奏 二、柔性事务解决方案架构 (一)、基于可靠消息的最终一致性方案概述 (二)、TCC事务补偿型方案 (三)、最大努力通知型 三、基于可靠消息的最终一致性方案详解 (一)、消息发送一致性 (二)、保证消息一致的变通做法 (三)、常规MQ消息处理流程和特点 (四)、消息重复发送问题和业务接口幂等性设计 (五)、本地消息服务方案 (六)、独立消息服务方案 (七)、消息服务子系统的设计实现 一、分布式事务前奏 事务:事务是由一组操作构成的可靠的独立的工作单元,事务具备ACID的特性,即原子性、一致性、隔离性和持久性。 本地事务:当事务由资源管理器本地管理时被称作本地事务。本地事务的优点就是支持严格的ACID特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。 全局事务:当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局的事务状态和参与的资源,协同资源的一致提交回滚。 TX协议:应用或者应用服务器与事务管理器的接口。 XA协议:全局事务管理器与资源管理器的接口。XA是由X/Open组织提出的分布式事务规范。该规范主要定义了全局事务管理器和局部资源管理器之间的接口。主流的数据库产品都实现了XA接口。XA接口是一个双向的系统接口

[转]再见 NoSQL!

人走茶凉 提交于 2020-02-22 04:16:19
为解决大规模数据集合多重数据种类带来的挑战,NoSQL 应运而生,但现在却也遇到了诸多问题,本文作者 Rick Negrin,曾在微软工作 12 年,并在 SQL Server 团队度过大部分光阴,他提出,是时候「和 NoSQL 说再见」了! 作者 | Rick Negrin 译者 | 明明如月 责编 | 唐小引 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 以下为译文: 是时候承认我们早就知道的事实了: NoSQL 并不适合现代应用程序,我们该对它说再见了。 由于数据超过了数据库能够处理的规模,NoSQL 技术就应运而生。这种新型的数据服务的兴起解决了十年前它出现时网络和数据快速增长的问题。NoSQL 还提供了冷存储或批量访问 PB 级数据的低成本的新途径。然而,由于急于解决大数据和高并发的挑战,NoSQL 放弃了数据库的一些高性能和简单易用的核心特性。 对大数据和高并发与高性能和易用性做出的权衡是 NoSQL 在数据库领域做出的最大贡献。将大数据和成熟的关系型结构和灵活性结合到一起,从而产生了一个可伸缩的关系数据库,造就了一场变革。 关系型数据库的发展创造了一个全新的系统,可以处理几乎所有的任务,具有现代应用程序所需的可伸缩性、可靠性和可用性要求。随着从传统的工作任务(例如事务处理应用程序和业务分析)到更新的工作任务