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