云采用框架-停写不停读切换方案

时间:2025-02-12 15:03:01

停写不停读切换方案

停写不停读,主要指切换期间,为了追求较好的用户体验,保持一部分读的服务不停服,保持在线可使用状态;为了保持数据一致性,写的服务仍然采用停服方式进行切换。从业务对外体验上,多数用户感知不到停服的影响,比如某购物平台,用户仍然可以浏览商品,但是不能下单,下单时可友好的提示:系统正在升级中,预计凌晨4点恢复,请您稍后重试下单等。

  1. 四种停写不停读切换方案对比

停写不停读切换有4种方案可以选择:

表1 四种停写不停读切换方式

方案

操作方式

适用场景

操作复杂程度

改造工作量

网关拦截

接入层,服务网关拦截写请求,放通读请求

入口统一,有统一网关,网关具有拦截能力,并对拦截的接口能配置友好的提示。

简单

无需改造

停止写服务,读服务不停

写服务或对应接口shutdown,读服务或对应接口保持alive

应用层服务已做读写分离场景,每个服务只进行单独的读操作或写操作,没有同时进行读写的服务

简单

无需改造

应用层先做读写分离改造,然后停止写服务,读不停

应用层修改代码,拆分读写服务

应用层服务没有读写分离的场景

复杂

中间件层/数据层直接回收写权限

中间件层/数据层设置业务账号只读,收回写权限

直接回收写权限,业务系统会报错,需要做相关轻微改造处理这些报错

简单

轻微改造

  • 网关拦截
    服务网关(Gatekeeper、Zuul、Kong等),拦截写请求,放通读请求;例如Gatekeeper网关可以拦截POST请求,只放通GET请求。这可以通过在Gatekeeper网关上配置规则来实现。可以设置一个规则,只允许GET请求通过,拒绝POST请求。
    图1 网关拦截方案
  • 写服务关停

    应用层服务已做读写分离的场景,直接关停写服务或对应接口下线shutdown,读服务或对应接口保持在线,从而达到业务只读不写的效果。

    图2 写服务关停方案
  • 应用改造

    应用代码进行读写分离改造,改造后再按照8.4.3.3写服务关停方案实施,实现只读不写的效果。

    图3 应用改造方案
  • 中间件层/数据层配置只读

    中间件层和数据层收回业务账号写权限,不允许服务写中间件层/数据层的操作。

    图4 中间件和数据只读方案
support.huaweicloud.com/usermanual-caf/caf_01_0144.html