分布式环境特点
分布性
地域,区域,机房,服务器不同导致分布性
并发性
程序运行中,并发性操作很常见,比如同一个分布式系统中的多个节点,同时访问一个共享资源(数据库,分布式存储)
无序性
进程之间的消息通信,会出现顺序不一致的问题。
分布式环境面临问题
各个服务节点通信
网络本身的不可靠,因此涉及到一些的网络通信问题(每一个分布式项目都必须面临问题)。
网络分区(脑裂)
当网络发生异常情况的时候,导致分布式系统中部分节点之间网络延时不断变大,最终导致组成分布式系统所有节点中,只有部分节点能够正常通信。分布式系统出现小集群问题
三态问题
分布式架构中除了 成功,失败,超时【网络问题】
分布式事务问题
ACID(原子性,一致性,隔离性,持久性) => 事务特征
原子性: 整个事务操作过程中,所有操作要不全部成功,要不就全部失败。
一致性: 整个操作过程中所有数据操作前后保持一致
隔离性: 事务和事务之间操作是完全隔离。
持久性:事务一旦提交成功,所有数据不能更改。
分布式理论:
CAP
Consistency (一致性) :数据在多个副本中时刻保持一致。
强一致性: 同一个时刻,每一个节点中的数据都是一致的。
弱一致性(最终一致性): 允许在一小个时间段内容,各个节点上面的数据部分不一致,但是最终得到结果是一致的。(消息队列,异步方式)
Availability (可用性)
系统总能在规定时间内,处理完用户的请求。
Partition Tolerance(分区容错)【最典型的的脑裂问题】
分布式系统在遇到任何网分区故障的时候,仍然需要保证对外提供满足一致性和可用性的服务。
一个分布式系统中无法满足以上三个条件,只能满足2个
放弃P=> 将所有的数据都在一个分布式节点上面[单点故障],放弃系统扩展性问题。(分区容错在分布式系统中是必须存在的)
PA 放弃强一致性,保留数据的最终一致性,承诺一个时间让数据达到一致状态
PC 放弃可用性, 系统一旦出现故障问题,在系统故障恢复期间是无法对外提供服务的。
只针对非关系型数据库(NOSQL)
Base
Bascially Avaliable(基本可用)
允许损失部分可用性,保证核心业务可用。
Soft-State (软状态/弱性事务)
系统中存在一个中间的状态,这个中间状态不会影响系统整体可用。(使用异步方式处理)
Eventually Consistency(最终一致性)
允许在一小个时间段内容,各个节点上面的数据部分不一致,但是最终得到结果是一致的。
中心化和去中心化
中心化: 分布式系统中每一个节点按照角色分工(zk集群,leader,follower,observer)
存在最大的问题:领导出现故障,导致集群问题。
主备.(潜在问题: 领导管理能力问题)
zookeeper/etcd
去中心化: 最重要的问题是脑裂问题。