集中式架构
集中式:集中式只有一个服务器或者多个服务器(只能有一个机架)组成一个整体、处理所有的业务
1.集中式优点
- 运行快
- 架构简单 – 利于维护
- 部署简单
2.集中式缺点
- 昂贵(维护集中式服务器的员工太贵了)
- 单点故障:主机一挂,所有服务都终止
- 摩尔定律:硬件越来越便宜
3.当集群扩容:
- 纵向扩容:提升服务器的性能(集中式)
- 横向扩容:提升服务器数量(分布式)
分布式服务
1.分布式系统定义:
分布式系统是由硬件和软件组分布在不同的网络计算机中(ip网段可能不一样),彼此之间仅仅通过消息传递、协调整个系统服务 — 《分布式系统与概念设计》
2.分布式特点:
- 优点
- 分布性:多台服务器可以在空间中任意分布(分布未来可以动态变化)
- 对等性:集群中有很多节点,这些节点的角色可以一样(03,04:DataNode)
- 并发性:很多台机器的多个节点可以同时操作同一个数据库(不同地点)
- 缺点
- 缺乏全局时钟:没办法保证不同节点写入顺序
- 故障总发生:硬件便宜、廉价服务器、组成逻辑性超级计算机(容易宕机–进程、机器坏了)
3.分布式相较于集中式:
- 分布式性价比高
- 处理能力更强 --内存 CPU 磁盘空间
- 可靠性更好 – 数据备份 + 重试机制
4.分布式存在的问题:
- 通信问题:网络不可用(网络分区)、网络延迟、网络传输数据丢失
- 网络分区概念:集群发生管理网络故障时,该集群中的部分主机可能无法通过管理网络与其他主机进行通信。一个集群中可能会出现多个分区。
- 节点故障:计算程序是分布式的,如果一个mapTask挂了会导致HDFS-block块丢失,需要考虑容错
5.分布式性能衡量指标:
- 吞吐性:在一定的时间内可以处理的数据量 – 只看上限
- 并发量最大处理数据量
- 系统响应延时
- 可用性:系统出现异常时,能够正确提供服务了能力
- 可扩展性:集群扩展好后,是否易于扩展(10个节点–>15),
- 扩展要考虑HDFS的负载均衡,计算程序怎么分布到新的节点
- 一致性:副本机制引发了一致性的问题(修改文件,也要改到副本,这其中存在延迟,若此时访问到副本)
- 强一致性:写操作完成后,读操作立即能读到最新的数据 -->实现:paxos算法,ZAB协议,鸽巢原理,独有机制
- 弱一致性:不承诺写操作完成后,读操作立即能读到最新的数据,也不保证多长时间后能读到 -->最没用
- 最终一致性:不考虑中间状态,在规定时间内一定能够读取到最终的数据
- 一致性有什么用?–一个节点宕机了,其他节点能读到最新数据
分布式事务
分布式事务就是指事务的资源分别位于不同的分布式系统的不同节点之上的事务;
1.产生原因
- 数据库分库分表(业务数据量达到单库单表的极限,将单库单表进行拆分)
- 业务服务化:跨应用、跨服务的操作需要分布式事务来保证数据的一致性
2.事务特征:ACID
- 原子性(Atomicity):整个事务中的所有操作,要么都成功,要么都失败,不可能部分操作成功部分操作失败;
- 一致性(Consistency):事务必须使数据库的数据从一个一致性状态变换到另外一个一致性状态。
- 隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
- 持久性(Durability):在事务成功以后,该事务对数据库所做的更改应当持久的保存在数据库中;
3. 2PC(两阶段提交协议)
两阶段提交协议(Two Phase Commitment Protocol)是分布式事务的基础协议。
在此协议中,一个事务协调器(TM, transaction manager)协调多个资源管理器(RM)的活动;
在一阶段所有资源管理器(RM)向事务管理器(TM)汇报自身活动状态
在二阶段事务管理器(TM)根据各资源管理器(RM)汇报的状态,来决定各RM是执行提交操作还是回滚操作;
a.具体操作:
- 应用程序向事务管理器(TM)提交请求,发起方分布式事务
- 一阶段,事务管理器(TM)联络所有资源管理器(RM),通知它们执行准备操作;
- 资源管理器(RM)返回准备成功,或者失败的消息给TM(响应超时算作失败);
- 二阶段,如果所有RM均准备成功,TM会通知所有RM执行提交;如果任一RM准备失败,TM会通知所有RM回滚;
通过事务管理器2阶段协调资源管理器,使所有资源管理器的状态最终都是一致的,要么全部提交,要么全部回滚
b. 2PC存在的问题:
- 数据不一致:可能会有数据不一致(一阶段成功,二阶段某一节点执行失败造成数据不一致)
- 性能不好:同步阻塞
- 单点问题:协调者挂了没了
4. 3PC(三阶段提交协议)
3PC,即三阶段提交,是2阶段提交的改进版,其将二阶段提交协议的“准备阶段”一份为二,形成了cancommit,precommit,do commit三个阶段
a.改进点:
- 添加了询问阶段—减少了资源不释放的次数(减少同步阻塞的发生范围)
- 引入超时机制。(超时提交策略,当第三阶段参与者等待协调者超时后会提交事务,解决参与者同步阻塞问题,同时能在发生单点故障时,继续达成一致)
b.存在的问题:
- 只有一个协调者
- 产生数据不一致(网络延迟 某一阶段没收到提交提示 等待超时机制发挥作用的时间段内进行查询)