一、回顾分布式特点
1.集中式特点
一台或多台计算机组成中心接节点,所有的数据都存在中心节点上。Client端只负责数据的展示,Server处理数据的存储和处理。显而易见,优点是结构简单容易部署,无需考虑服务多个节点部署,更不用考虑节点之间的协调。缺点是系统性能以来中心节点的性能,无法水平扩展。
2.分布式特点
对等:各个节点没有主次之分
分布:在空间上随意分布,水平扩展,比如我们sinai随意再lf和dx随意添加机器
并发:对等的节点可能并发访问访问共享资源,如同时访问redis,db,或一个接口
缺乏全局的时钟:因为分布和对等性,你不知道两个事件发生的前后顺序
故障不固定:很依赖节点之间的通信,因为网路分区或通信异常会导致机器状态不一致
3.分布式问题
通信异常:网路光纤,路由,DNS各种因素导致网络太不可靠了。。。面临重要的两个方面是丢包和包的延迟
网络分区:整个集群只有一部分之间能正常通信,实际上我们美团服务治理中,SG_agent为部署在各服务节点,通过与服务注册路由中心进行通信,实际承担服务注册、服务发现、动态路由解析、负载均衡等功能及
调用统计上报的应用代理程序。
三态:成功,失败,超时
节点故障:一个分布式集群必须支持异常的节点的摘除,节点的扩容等,比如我们的thrift的server 端节点必须能有服务注册、服务发现等功能
4.数据库的事务ACID
ACID各个字母代表什么意思就不用提了,A(原子性,只有成功和失败状态),C(一致性),I(隔离性,各个事物都有自己的数据空间),D(持久性,commit事务的后状态必须是永久的)
经常听到数据库事务的四层隔离,自己画一个图就清楚了:
为什么涉及到各种级别呢?是为了保证数据的一致性和完整性,级别越高并发性能差,我们数据库一般都设为第二种授权读,避免脏读有保证较好的并发性能,程序中可主动采用悲观锁和乐观锁来控制,即使我们不用看mysql的源码什么的,我们也可以用锁的原理,实现四层隔离,具体mysql怎么实现的还待深入看看,其实是通过行锁、区间锁等实现的乐观锁和悲观锁实现的,四种隔离是这些锁的组合运用。
5.分布式事务的强一致性CAP
C:一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的 ;
A:可用性,服务必须是24小时可用可访问;
P:分区容错性,出现网络分区故障时,仍然保证一致性很可用性,除非整个集群都down掉;
CAP定理:一个分布式系统无法同时满足CAP要求,只能满足其中的两项。