基本概念
事务
由多个计算任务构成的一组具有明确边界的工作集合。事务当中可能包括接口访问、网络通信、数据获取和处理。直播平台源码严格的事务实现应该具备具有原子性、一致性、隔离性、持久性四个特性。
原子性(Atomicity):一个事务中的任务要么全部完成,要么全部失败。没有中间状态。
隔离性(Isolation):不同事务之间的操作互不影响,并发的事务其中间状态对其他事务不可见。
持久性(Durability):事务一旦完成,则状态永久有效。
一致性(Consistency):事务涉及的资源或者数据在事务前后遵循某种约束,事务的完成或失败不会影响此状态。
分布式事务
在分布式系统中,事务的访问涉及的资源、参与计算的节点都部署在不同的节点上,这种情况下涉及到的事务称为分布式事务。
从直播平台源码整体的架构角度看,分布式事务涉及的场景可以分为两类。第一类是,事务本身只涉及单个应用,但是涉及多个数据存储,一笔交易需要访问多个数据存储才能最终完成。第二类,是事务本身涉及多个应用,同时每个应用可能连接着一个或者多个数据存储,一笔交易需要协同多个独立的应用访问多个数据存储最终才能完成。
一致性
严格地讲,一致性并不是事务本身的特性。可以看到,一致性所讨论的所谓“约束”是随着业务场景变化而变化的。
一致性的保证,除了数据库层面需要有相应的机制以外,应用层面首先需要进行相应的考虑。例如,对于典型的两个账户转账的例子,应用需要保证在同一个事物里面分别对转出账户和转入账户发起了减少和增加金额的操作,如果任何一个缺失,即使使用了事务,从业务角度看也是违反了一致性约束的。
在直播平台源码应用层面确保了业务的正确性之后,再从数据库层面进行审视。还是转账的例子,假设某一个数据库的事务支持出现了问题,在一个事务当中发生某种故障之后,发现转出账户上钱已经相应减少,而转入账户上钱并没有增加,那么很明显这里违反了业务的一致性约束。但仔细辨析后会发现,从事务本身考虑,这个场景实际上首先是违反了事务的原子性的,即应该同时完成的任务只完成了一半。所以,这个场景下面,一致性的体现实际上最终是由原子性保证的。再比如,考虑同一笔账户上同时发生的两笔转账交易,如果A事务扣减100元,B事务扣减50元,如果两个事务都提交之后,发现账户实际扣减了50元而不是150元,那么很明显也违反了业务上的一致性约束。这种情况,实际上是由事务的隔离性保证的。
所以,总的来说,直播平台源码一致性更多的是数据存储之上的业务约束保证。其描述的特性,在事务角度是分别有原子性和隔离性两种特性在不同场景下分别予以保证的。
声明:本文由云豹科技转发,如有侵权请联系作者删除