微服务网关选型与网关常用使用案例-用网关实现客户端刷新本地缓存的方案选型

253 阅读3分钟

一、为什么我们需要客户端即时刷新本地缓存

        为了避免线上舆情问题,一个产品需要能快速下掉某些功能,立刻刷新某些资源的能力。 比如说客户端会请求A接口,A接口返回后台运营配置的消息。如果后台运营配置错了,同时在客户端本地这个接口客户端缓存了数据,缓存时间比较长,是一天,如果运营配置了一些错误的信息,想立刻更正。那么就可以用下面的方案去实现一个快速通知客户端的能力。

  • 需要建立能及时下线掉线上某些功能的能力(包括有客户端缓存的情况、客户端不需要与服务端交互的功能)
  • .需要建立能及时刷新客户端缓存的能力

二、如何实现

方案1 ETAG

助手ETAG方案设计.png

方案2 在网关上配置通用返回体

        在网关上配置,拦截每个请求,使任意接口的response header中下发ICG: [0,1,-1,0,1] 这样的开关字符串。

        第一位代表A接口,第二位代表B接口以此类推,0代表改接口不能走缓存,需要直接请求,1代表,缓存没过期就可以继续用缓存, -1代表该功能紧急下线不再使用。

        每个接口都会在response header中返回这串开关字符串,只要用户还有接口网络请求,就能及时下线某些功能的缓存或者停用该功能。

方案3 定时请求配置接口

        为了防止用户的客户端始终没有触发与服务端通信的情况,我们需要客户端有一个定时器来定时查询服务端配置接口。

配置接口需要哪些必要元素?

元素描述
[String]configVersion配置的版本号,目的是为了方便比较,客户端会将这个值存到本地;与网关头部给的版本号比较,这样客户端就可以知道是否需要刷新配置数据
[String]modulesId多个模块的编码,为了节省传输的数据量,通过这个字段就可以知道客户端需要的配置模块以及版本
[boolean]incremental增量的配置,还是全量的配置
[obj] configList每个模块配置项的值

每个配置项要有什么元素(configList)

元素描述
[String]module配置模块,如net网络配置,download下载配置
[String]protoclVersion配置模块的版本号
[KV对]moduleConfigs配置的KV对(可能是全部的KV,也可能只是增量的KV)

方案4 客户端使用预测模型预测具体时间请求配置接口

        客户端本地写一个简单的预测模型,在预测模型预测的时间点请求配置接口。

方案5 PUSH透传主动通知用户

        搭建push能力,发送push通知给客户端,在紧急情况下能立刻处理问题。

总结

        建议使用方案2+方案3,方案3在前期也不需要过早的设计完整的配置接口,如果仅仅只是要满足快速下掉某些功能,立刻刷新某些资源的能力,在网关上配置只要客户端访问/config接口即返回200即可。/config本身也是一个接口,也会携带response header中的ICG字段。