状态同步, 前进, 失调和再同步

参与状态同步的,可以是一个进程,或一个多进程的模组,或者是一个系统都可以; 抽象的讲,一个进程,甚至一个线程也是一个系统,是内部各组成部分的协作;

状态同步涉及的整个流程不只涉及参与的各方角色, 还包括用以服务个角色执行的系统环境, 比如操作系统的资源.以及另外一个重要角色-用以影响状态进行的环境条件, 比如网络传输的通断, 带宽, 延时, 误包率等等, 抽象说来,就是操作系统资源限制以外的硬件和软件服务环境;

1, 同步

双方的同步都是从初始稳定态开始, 同步到完成是至少但不限于1个阶段的,而每一个阶段由1个以上的步骤完成; 阶段的定义是说, 要么完成了这一阶段的同步,要么没有完成, 是原子的; 前一个阶段是下一个阶段的必要条件, 只有完成了上一个阶段, 才可能开始下一个阶段的同步; 阶段的心跳正常才能证明这个状态是维持的, 并且如果当前阶段的心跳正常, 则可以认定前一个阶段的状态维持是正常的;

参与同步双方的转台退出, 则是从最后一个阶段开始, 将维持行为传递回上一个阶段; 直到回到初始稳定态; 同样, 如果是某个阶段的同步或者心跳维持出现了错误,比如因为坏境变化引起心跳不再可维持, 则同样将检测和维持心跳的行为传递给上一个阶段;

环境对状态同步的破坏程度由其引起的状态回滚的阶段个数决定, 比如像断网这种行为,就是全阶段的;但比如像低带宽这种行为, 可能就只影响了一个阶段, 比如,TCP依然是连接的状态,但是传输的速率已经不能满足TCP所服务的协议的行为所在阶段;

2, 前进

状态的前进, 意思是是说在各阶段都同步顺利的情况下,完成了最后一个阶段的状态同步后开始了生产行为, 生产行为没完成一个单位的数据的生产, 就是一个状态的进步;  生产行为是多样的, 算法执行的各个步骤, 或者一个视频播放行为, 或者任何一个服务行为,只要产生了数据, 或者叫做记录, 就是状态上的进步; 本质上就是在参与同步的负责生产的一方完成了一个单位的生产; 这个单位的生产也是原子的, 在具体的一角色能,要么是生成了,要么就是没有生成;

那么, 那么这个状态进步会影响的就是再同步时的结果状态,也就是说,生产过程中, 一个同步心跳被破坏了,这是很常发生的情况, 那么再次同步的时候, 不仅每个阶段要进行,最后一个阶段的工作还包括检查生产进行的进步情况,举个例子,比如在一个下载时的续传,或者是再次登录时会显示之前的记录等等;

3,失调

状态的失调,是程序设计时针对的关键部分; 同时,失调并不只是只的是状态同步好后,维持心跳阶段出现的环境条件变化引起的失调, 它指任何同步阶段出现的失调行为; 比如TCP建立连接的三次握手, 释放连接时的四次挥手等的;

一旦失调的条件发生, 同步每一方的行为都应该是能通过排除错误的消息, 通过超时的感知而能够回滚到上一个阶段, 上一个阶段同样的逻辑进行处理; 比如,一个进程, 它通过序号机制, 校验机制,超时机制维持心跳和任务,一旦出错,能回滚到上一个阶段,它进入稳定态应该是进入一种只接收特定消息的状态, 这样就是将因为超时而已经撤销机制后, 后来又达到的消息排除掉不处理; 这就是直到回滚到一个只确定接收某一个中特定消息的稳定态;

原则就是, 要等消息那就是没有超时, 一旦超时就撤销机制, 交给上一阶段处理, 严格落实超时的语义机制; 所以, 最基本的要能够进入稳定态, 等待新的同步触发, 不能出现不可控的,比如消耗资源等行为;

一个角色的失调可能产生的影响还不只是同步的对方,还可能对系统造成影响,因为它占用了系统的资源, 比如tcp 频繁建立和退出连接是TIME_WAIT引起的linux系统的tw阈值到上限的问题; 还有三次握手中途终端在等待期占用的系统资源等,比如

syn flood 攻击中提到的问题;

4, 再同步

转态的再同步依赖的框架的设计;框架的设计一方面是让内部各组件能够应对各种失调条件时回到稳定状态,等待新的同步触发的发生; 另一方面, 就是对外接条件感知,也就是像操作系统的的中断系统那样, 担负起感知外部条件变化,而能够起到产生同步触发条件的作用;所以, 操作系统的整体原理,扩大了其实和维护整个转态同步系统的原理是一样的; 总体说来,重点就是,外部感知系统正常工作, 但感知只是一种发生, 接下来的触发后的行为, 一个阶段一个阶段的执行,并且能够检测状态的前进数据,每一步失败了都能够根据失调条件回滚到恰当的等待的阶段,并且还能从这个阶段的心跳行为的维持和外部触发条件来一起决定进一步同步还是进一步回滚的最初稳定状态来等待外部触发条件;假如各阶段同步和前进数据同步完成,那么,,定义好生产的原子单元, 完成一个单元的生产才是实现一个状态的前进, 知道本次状态全部完成结束, 或者再出现失调并等待新的触发;

扩展一下, 外部感知并且产生中断模块, 消费中断生产的结果然后进行调度的模块,再加上各种被调度的但状态设计良好的组件,这三个异步协作模组就是一个状态同步系统的灵魂架构, 从操作系统到大的网络同步应用; 当然, 每一个模块下细分会有更多的不可缺少的角色,比如网络应用中, message broker就好比计算机中bus的作用, 没有bus,似乎中断模块也无法构成; 任何一个角色的组成中,又可以看到这三种作用的组件的存在;  但某些条件下, 一个功能也可能缩减, 比如上述我们提到的感知心跳的功能,这个某些网络应用中没有特意分配资源做这样的事情,只有在传输时通过超时来判断;

这除了对我们在设计系统上的帮助, 也给了我们调查问题的思路上的帮助, 这是最重要的, 其实再复杂的系统, 任何一个同步行为都是两个角色之间的行为, 但具体实现上可能中间加入了1或多层的异步机制,但不管经过多少异步机制, 都要是能确认收到同步对方的消息才算一个同步,并且在和异步机制的接口的编程中,要同时考虑异步机制的行为和真正同步对方的行为造成的真实结果状态; 大而复杂的网络应用中, 只是从分时上对不同的对方进行状态同步而已, 可以看做不同阶段的同步编程了不同的对象, 耗时越长的同步越靠后, 同时服务的客户也越少, 耗时越短的越靠前, 服务更多客户; 然后在资源分配上可以根据地理或其他等因素做分配, 比如天猫的双11等的一些具体的秒杀等的部署上;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值