一、 分布式的定义 和 集群的区别
(1) 分布式定义
分布式是将不同的业务模块部署在不同的服务器上或者同一个业务务拆分成多个子业务部署在不同的服务器上,多个子业务之间配合完成整个业务,解决高并发的问题。分布式好处在于提高子业务的效率到达提高整体业务的服务能力。从实体来看,单一服务器处理整个业务流程,如果流程简单或者是请求量不够大,那么也能支撑业务。但是当业务逐渐复杂,请求量增大,单例服务器明显不能支撑庞大的业务系统。如果使用分布式,将整体业务拆分成多个子业务,那么多个子业务之间就可以支撑整体业务系统。之所以能支撑庞大的业务,是因为分布式可以用n个服务器来支撑一个业务,相对单一服务器来说更加的高效。
分布式带来的好处是能够处理大量的请求,但是同样也附带一些问题最多的还是一致性。分布式在每个环节上都有对应的需求,比如Load Balance、DB、Cache和文件等等,并且当分布式节点之间有关联时,还得考虑之间的通讯,另外,节点非常多的时候,得有监控和管理来支撑。这样看起来,分布式是一个非常庞大的体系,只不过你可以根据具体需求进行适当地裁剪。按照最完备的分布式体系来看,可以由以下模块组成:
- 分布式任务处理服务:负责具体的业务逻辑处理
- 分布式节点注册和查询:负责管理所有分布式节点的命名和物理信息的注册与查询,是节点之间联系的桥梁
- 分布式DB:分布式结构化数据存取
- 分布式Cache:分布式缓存数据(非持久化)存取
- 分布式文件:分布式文件存取
- 网络通信:节点之间的网络数据通信
- 监控管理:搜集、监控和诊断所有节点运行状态
- 分布式编程语言:用于分布式环境下的专有编程语言,比如Elang、Scala
- 分布式算法:为解决分布式环境下一些特有问题的算法,比如解决一致性问题的Paxos算法
(2)集群的定义
集群的核心概念是多个服务器做同一个业务或者是同一整体业务的物理形态,不同于分布式的将业务拆分。抽象来看集群很像横向扩展,水平扩展到多台服务器,而分布式是纵向切割,提高切割点的性能以达到整体提升的效率。很多时候分布式的切割点包含了集群(为了达到高可用)。
二、 一致性理论
说到分布式就不得不关注分布式的一致性,这个是分布式的致命问题。而在分布式领域主要讨论的是强一致性(实时性)和最终一致性。典型的案例:
- 两阶段提交(2PC,Two-Phase-Commit)方案
- eBay时间队列方案
- TCC补偿时间
- 缓存数据最终一致性
(1)CAP理论
定理:
- 一致性(Consistency) 数据一致更新,所有数据变动都是同步更新的
- 可用性(Avalibility) 分布式事务能一直保持可用状态。当用户发送一个请求之后,服务器在有限时间返回数据
- 分区容忍性(Partition Tolerance) 可靠性
(2)Base理论
核心思想:
- 基本可用(BasicallyAvailable):指分布式系统在出现故障时,允许损失部分的可用性来保证核心可用。
- 软状态(SoftState):指允许分布式系统存在中间状态,该中间状态不会影响到系统的整体可用性。
- 最终一致性(EventualConsistency):指分布式系统中的所有副本数据经过一定时间后,最终能够达到一致的状态。
三、一致性模型
数据的一致性模型可以分成以下 3 类:
- 强一致性:数据更新成功后,任意时刻所有副本中的数据都是一致的,一般采用同步的方式实现。
- 弱一致性:数据更新成功后,系统不承诺立即可以读到最新写入的值,也不承诺具体多久之后可以读到。
- 最终一致性:弱一致性的一种形式,数据更新成功后,系统不承诺立即可以返回最新写入的值,但是保证最终会返回上一次更新操作的值。
https://en.wikipedia.org/wiki/Quorum(distributedcomputing)
- 同步阻塞。
- 数据不一致。
- 单点问题。
- 增加超时机制。
- 两阶段之间插入准备阶段。
Paxos:https://en.wikipedia.org/wiki/Paxos(computerscience)
Raft:https://raft.github.io/
- 服务调用链必须被记录下来。
- 每个服务提供者都需要提供一组业务逻辑相反的操作,互为补偿,同时回滚操作要保证幂等。
- 必须按失败原因执行不同的回滚策略。
要解决该场景下缓存和数据库数据不一致的问题我们有以下两种解决方案:
为缓存数据设置过期时间。当缓存中数据过期后,业务系统会从数据库中获取数据,并将新值放入缓存。这个过期时间就是系统可以达到最终一致的容忍时间。更新数据库数据后同时清除缓存数据。数据库数据更新后,同步删除缓存中数据,使得下次对商品详情的获取直接从数据库中获取,并同步到缓存。
参考链接:https://mp.weixin.qq.com/s/QMRTQEnE8BdNYHOKR0tkoA