首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多服务器发布时旧数据适配问题

记录一次大版本上线后回滚的案例

一 问题

一个大版本的迭代,保存到Redis中的缓存数据实体类增加了一些属性,就用了一个子类继承旧实体类。获取缓存数据时可以通过Redis的class类型判断是新数据,如果不是,就用旧实体类序列化,代码如下:

旧的实体类

新的实体类

从Redis获取数据,适配旧数据

业务流程:

以上流程如果只是 OldEntity 转 NewEntity 是没有问题的,但是我们线上服务器是多台,发布的时候是一台台发布的,这个时候就会存在一个没有想到的情况。旧数据 OldEntity 在新发布的应用上被转化为新数据模型 NewEntity 后被保存在Redis,下一个中间点更新事件的请求打到了还没来得及发布的服务器上,这时旧版本的应用获取缓存时将 NewEntity 转 OldEntity 模型,转化失败,返回 null。导致线上报错预警。

发布部分服务器后的业务流程:

二 解决方案

不新建实体类,在旧的实体类模型上增加新属性:

获取缓存后判断新增属性值是否为空,以此判断是否是旧应用保存的数据:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190118G1EDI500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券