- BA:Basic Available 基本可用
- “一定时间”可以适当延长
- 当举行大促时,响应时间可以适当延长
- 给部分用户返回一个降级页面
- 给部分用户直接返回一个降级页面,从而缓解服务器压力 。但要注意,返回降级页面仍然是返回明确结果 。
- 整个系统在某些不可抗力的情况下,仍然能够保证“可用性”,即一定时间内仍然能够返回一个明确的结果 。只不过“基本可用”和“高可用”的区别是:
- S:Soft State:柔性状态
- 同一数据的不同副本的状态,可以不需要实时一致 。
- E:Eventual Consisstency:最终一致性
- 同一数据的不同副本的状态,可以不需要实时一致,但一定要保证经过一定时间后仍然是一致的 。
8. 分布式事务协议下面介绍几种实现分布式事务的协议 。
8.1 两阶段提交协议 2PC
分布式系统的一个难点是如何保证架构下多个节点在进行事务性操作的时候保持一致性 。为实现这个目的,二阶段提交算法的成立基于以下假设:
- 该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts) 。且节点之间可以进行网络通信 。
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上,即使节点损坏不会导致日志数据的消失 。
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复 。
- 协调者节点向所有参与者节点询问是否可以执行提交操作(vote),并开始等待各参与者节点的响应 。
- 参与者节点执行询问发起为止的所有事务操作,并将Undo信息和Redo信息写入日志 。(注意:若成功这里其实每个参与者已经执行了事务操作)
- 各参与者节点响应协调者节点发起的询问 。如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息 。
当协调者节点从所有参与者节点获得的相应消息都为"同意"时:
- 协调者节点向所有参与者节点发出"正式提交(commit)"的请求 。
- 参与者节点正式完成操作,并释放在整个事务期间内占用的资源 。
- 参与者节点向协调者节点发送"完成"消息 。
- 协调者节点受到所有参与者节点反馈的"完成"消息后,完成事务 。
- 协调者节点向所有参与者节点发出"回滚操作(rollback)"的请求 。
- 参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源 。
- 参与者节点向协调者节点发送"回滚完成"消息 。
- 协调者节点受到所有参与者节点反馈的"回滚完成"消息后,取消事务 。
二阶段提交看起来确实能够提供原子性的操作,但是不幸的事,二阶段提交还是有几个缺点的:
- 执行过程中,所有参与节点都是事务阻塞型的 。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态 。
- 参与者发生故障 。协调者需要给每个参与者额外指定超时机制,超时后整个事务失败 。(没有多少容错机制)
- 协调者发生故障 。参与者会一直阻塞下去 。需要额外的备机进行容错 。(这个可以依赖后面要讲的Paxos协议实现HA)
- 二阶段无法解决的问题:协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了 。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交 。
推荐阅读
- 用微PE在UEFI+GPT模式下安装WIN7、WIN10
- 微服务架构下:MySQL5.7新特性--官方高可用方案MGR介绍
- Nginx 静态文件服务配置及优化
- mysql服务器在无操作超时主动断开连接的问题
- 读书显微镜 人类显微镜能看到最小的东西
- 员工离职的22个法律要点
- 微信查看步数的方法
- 微信电脑版有三个版本,你知道哪个最好用吗?
- 微信绑定了银行卡,为何会自动扣款,原来是这个设置没关闭
- 微信拍拍,怎么修改内容?只需简单四步