我做不到CAP

业务提了一个需求:我们系统很重要,服务不能中断。

我们现在的系统,是两套应用程序连接一套主从数据库,蓝绿环境部署步骤为:

1. 新版本代码部署到绿环境;

2. 绿环境连接从库;

3. 从库和主库脱离主从关系;

4. 生产流量指向绿环境;

5. 当天绿环境单节点运行,凌晨完成主从数据同步,再次建立主从关系;(此时原从库成为现主库);

业务说,不行,你晚上主从数据同步要停机,不能满足我服务不中断的需求。

但这很难满足。无论生产流量指向蓝环境还是绿环境,两个环境必然存在数据差异,想要抹平这个差异,只能保证一致性或可用性:

  • 保证一致性,是指当次数据操作马上同步到两个环境,涉及数据通信存在的时间差,则整体响应性能下降,亦即保证不了可用性;
  • 保证可用性,是指当次数据操作马上响应,那也只是存到了单节点,其他节点数据和这个节点数据不一样,亦即保证不了一致性;

我们要A还是要C?Web业务系统面向用户,用户可等不了平台慢吞吞响应,我们可以优先保障可用性,也会引发一些问题:

1. 数据不一致引起的问题。蓝绿环境数据差异,极端情况存在用户数据不一致、订单数据不一致等情况,这种情况的解决办法包括:

  • 可以联合业务优化业务流程;
  • 也可以谈一些可接受的数据丢弃;
  • 异常情况作日志保存,后续异步重试;
  • 确实搞不了的重要业务数据,那就要舍弃可用性保障一致性了,也就是保存慢一点;

2. 为保障一致性引起的临时停机。绿环境在流量切换当晚会和蓝环境数据库作数据同步,重新建立主从关系,这个过程需要停机,也是某程度上的为保证一致性牺牲可用性。

但最重要的是什么?是研发和业务的沟通。一来要阐述需求无法直接满足的原因,二来要联合业务改业务流程,做部分流程的重新设计。这些过程都极容易消磨业务人员的耐心,反之,开发团队了解这个原则却和可能不容易和业务人员说通,也在消磨开发团队的耐心。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值