作者:微信小助手
发布时间:2022-05-09T09:38:47
这篇文章主要介绍一些目前主流的几种分布式解决方案以及阿里开源的一站式分布式解决方案Seata。 文章有点长,耐心看完,看完你还不懂分布式事务,欢迎来捶我...... 文章目录如下: 分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图: 但是随着业务的复杂度提高,大家族人手不够,此时不得不招人,这样逐渐演变出了分布式服务,互相协作,每个服务负责不同的业务,架构如下图: 因此需要服务与服务之间的远程协作才能完成事务,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分 事务、创建订单减库存事务,银行转账事务等都是分布式事务。 典型的场景就是微服务架构 微服务之间通过远程调用完成事务操作。比如:订单微服务和库存微服务,下单的同时订单微服务请求库存微服务减库存。简言之:跨JVM进程产生分布式事务。 CAP原则又叫CAP定理,同时又被称作布鲁尔定理(Brewer's theorem),指的是在一个分布式系统中,不可能同时满足以下三点。 指强一致性,在写操作完成后开始的任何读操作都必须返回该值,或者后续写操作的结果。 也就是说,在一致性系统中,一旦客户端将值写入任何一台服务器并获得响应,那么之后client从其他任何服务器读取的都是刚写入的数据 一致性保证了不管向哪台服务器写入数据,其他的服务器能实时同步数据 可用性(高可用)是指:每次向未崩溃的节点发送请求,总能保证收到响应数据(允许不是最新数据) 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,也就是说,服务器A和B发送给对方的任何消息都是可以放弃的,也就是说A和B可能因为各种意外情况,导致无法成功进行同步,分布式系统要能容忍这种情况。除非整个网络环境都发生了故障。 分布式系统中,必须满足 CAP 中的 P,此时只能在 C/A 之间作出取舍。 如果选择了CA,舍弃了P,说白了就是一个单体架构。 CAP理论告诉我们只能在C、A之间选择,在分布式事务的最终解决方案中一般选择牺牲一致性来获取可用性和分区容错性。 这里的 “牺牲一致性” 并不是完全放弃数据的一致性,而是放弃强一致性而换取弱一致性。 一致性可以分为以下三种: 系统中的某个数据被成功更新后,后续任何对该数据的读取操作都将得到更新后的值。 也称为:原子一致性(Atomic Consistency)、线性一致性(Linearizable Consistency) 简言之,在任意时刻,所有节点中的数据是一样的。例如,对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。 总结: 系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。 但即使过了不一致时间窗口这段时间后,后续对该数据的读取也不一定是最新值。 所以说,可以理解为数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。 例如12306买火车票,虽然最后看到还剩下几张余票,但是只要选择购买就会提示没票了,这就是弱一致性。 是弱一致性的特殊形式,存储系统保证在没有新的更新的条件下,最终所有的访问都是最后更新的值。 不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。 简单说,就是在一段时间后,节点间的数据会最终达到一致状态。
什么是分布式事务?
什么是CAP原则?
一致性(Consistency)
可用性(Availability)
分区容忍性(Partition tolerance)
为什么只能在A和C之间做出取舍?
一致性有几种分类?
强一致性
弱一致性
最终一致性
总结