大数据存储:分布式系统的事务处理
当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题:
(1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。
(2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失。
于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的问题,以及来解决单点故障问题。 通常,我们会通过两种手段来扩展我们的数据服务:
(1)数据分区:就是把数据分块放在不同的服务器上(如:uid % 16,一致性哈希等)。
(2)数据镜像:让所有的服务器都有相同的数据,提供相当的服务。
对于第一种情况,我们无法解决数据丢失的问题,单台服务器出问题时,会有部分数据丢失。所以,数据服务的高可用性只能通过第二种方法来完成——数据的冗余存储(一般工业界认为比较安全的备份数应该是3份,如:Hadoop和Dynamo)。
但是,加入更多的机器,会让我们的数据服务变得很复杂,尤其是跨服务器的事务处理,也就是跨服务器的数据一致性。这个是一个很难的问题。 让我们用最经典的Use Case:“A帐号向B帐号汇钱”来说明一下,熟悉RDBMS事务的都知道从帐号A到帐号B需要6个操作:
1)从A帐号中把余额读出来。
2)对A帐号做减法操作。
3)把结果写回A帐号中。
4)从B帐号中把余额读出来。
5)对B帐号做加法操作。
6)把结果写回B帐号中。
为了数据的一致性,这6件事,要么都成功做完,要么都不成功,而且这个操作的过程中,对A、B帐号的其它访问必需锁死,所谓锁死就是要排除其它的读写操作,不然会有脏数据的问题,这就是事务。那么,我们在加入了更多的机器后,这个事情会变得复杂起来:
1)在数据分区的方案中:如果A帐号和B帐号的数据不在同一台服务器上怎么办?我们需要一个跨机器的事务处理。也就是说,如果A的扣钱成功了,但B的加钱不成功,我们还要把A的操作给回滚回去。这在跨机器的情况下,就变得比较复杂了。
2)在数据镜像的方案中:A帐号和B帐号间的汇款是可以在一台机器上完成的,但是别忘了我们有多台机器存在A帐号和B帐号的副本。如果对A帐号的汇钱有两个并发操作(要汇给B和C),这两个操作发生在不同的两台服务器上怎么办?也就是说,在数据镜像中,在不同的服务器上对同一个数据的写操作怎么保证其一致性,保证数据不冲突?
同时,我们还要考虑性能的因素,如果不考虑性能的话,事务得到保证并不困难,系统慢一点就行了。除了考虑性能外,我们还要考虑可用性,也就是说,一台机器没了,数据不丢失,服务可由别的机器继续提供。 于是,我们需要重点考虑下面的这么几个情况:
1)容灾:数据不丢、结点的Failover
2)数据的一致性:事务处理
3)性能:吞吐量 、 响应时间
前面说过,要解决数据不丢,只能通过数据冗余的方法,就算是数据分区,每个区也需要进行数据冗余处理。这就是数据副本:当出现某个节点的数据丢失时可以从副本读到,数据副本是分布式系统解决数据丢失异常的唯一手段。所以,在这篇文章中,简单起见,我们只讨论在数据冗余情况下考虑数据的一致性和性能的问题。简单说来:
1)要想让数据有高可用性,就得写多份数据。
2)写多份的问题会导致数据一致性的问题。
3)数据一致性的问题又会引发性能问题。
这就是软件开发,按下了葫芦起了瓢。
本文作者:佚名
来源:51CTO
你真的懂分布式一致性吗?从业务开发视角看分布式系统一致性 分布式的本质:利用多台机器上进行计算和存储,为了防止某些台机器发生网络延迟、节点故障等问题,就需要使用”算法或者技术“协调”多台机器来一起工作,确保系统的正确性和健壮性。 我们的业务系统与业务系统的交互:因为是集群与集群之间的互相连接,某应用A连接应用B的时候连不通了(直接tcp无法建立连接 或者连接超时),这个时候其实分区就发生了, 而因为集群的存在,这分区发生的概率非常小, 这个时候,我们是选择AP还是CP呢?这个要根据业务场景以及当前系统间交互的复杂度而定。
分布式系统中数据存储方案实践 在项目研发的过程中,对于数据存储能力的依赖无处不在,项目初期,相比系统层面的组件选型与框架设计,由于数据体量不大,在存储管理方面通常容易被轻视,当项目发展进入到中后期阶段,系统的复杂性很大程度来源于数据层面;
高并发以及分布式解决方案 最近因为公司的事情比较多,任务比较重,所以很长时间没有更新文章了。最近因为工作上的内容突击学习了很多的内容,比如今天我要讲的。
一文总结:分布式一致性技术是如何演进的? 分布式一致性(Consensus)作为分布式系统的基石,一直都是计算机系统领域的热点。近年来随着分布式系统的规模越来越大,对可用性和一致性的要求越来越高,分布式一致性的应用也越来越广泛。纵观分布式一致性在工业界的应用,从最开始的鼻祖Paxos的一统天下,到横空出世的Raft的流行,再到如今Leaderless的EPaxos开始备受关注,背后的技术是如何演进的?本文将从技术角度探讨分布式一致性在工业界的应用,并从可理解性、可用性、效率和适用场景等几个角度进行对比分析。
分布式系统常见的事务处理机制 为保障系统的可用性、可靠性以及性能,在分布式系统中,往往会设置数据冗余,即对数据进行复制。举例来说,当一个数据库的副本被破环以后,那么系统只需要转换到其他数据副本就能继续运行下去。
为什么写这篇文章? 首先,缓存由于其高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。
分布式存储系统的一致性是什么? (本文内容仅代表作者个人观点,不代表OceanBase官方。) 在分布式存储系统(包括OceanBase这样的分布式数据库)的使用中,我们经常会提到“一致性”这个词,但是这个术语1在不同的系统、不同人的心目中有不同的内涵,很容易造成混淆。 想象一个最简单的存储系统,只有一个客户端(单进程)和一个服务端(单进程服务)。客户端顺序发起读写操作,服务端也顺序处理每个请求,那么无论从服务器视角
相关文章
- 分布式系统中数据存储方案实践
- C语言解析日志,存储数据到伯克利DB 2
- Sql Server A表汇总到B表存储过程(直接赋参数用,源码)
- pandas文件读取与存储
- React通过redux-persist持久化数据存储
- 科技云报道:分布式存储取代集中式存储,还早着呢
- kubernetes 【存储】 编写CSI插件
- 《计算机组成原理》----1.5 存储程序的概念
- 【Harmony OS】【JAVA UI】鸿蒙系统中怎么使用 Parcel 进行存储数据或数据传递
- 《大数据存储:MongoDB实战指南》一1.10 小结
- 块存储、文件存储、对象存储差别
- Dropbox再曝泄密危机 亚信安全建议企业用户部署安全的私有云存储
- InnoDB 存储引擎中的锁等待
- 向vuex存储数据和获取数据-和直接调用actions.js中的异步方法
- 数据存储加密方案怎么写
- 计组 | 机器数、真值、原码、反码和补码、大端方式 and 小端方式(数据的存储方式)
- MySQL存储过程中使用SELECT …INTO语句为变量赋值
- android学习-数据存储(一)-----SQLite源码分析
- 【Harmony OS】【JAVA UI】鸿蒙系统中怎么使用Parcel进行存储数据或数据传递
- 创建Ceph crush运行图实现基于HDD和SSD磁盘实现数据冷热数据分类存储
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 发挥你数据存储专家的价值
- Futuremark推出存储基准测试
- 传说中的相关部门 靠什么来存储数据?
- HPE公司升级其闪存存储产品系列
- 应用华云对象存储服务实现网站存储的平滑迁移实践
- 实验1-Python数据采集与存储
- 1. redis如何存储树结构数据
- Redis学习03——存储字符串(String)