金丝雀发布
XXX项目的金丝雀发布
2017年下半年《XXX》项目新版本上线多次出现意料之外的问题,原因是测试环境环境和线上环境终究有差别,测试环境测试没问题,但并不能保证生产环境没问题。当时的解决方案是申请一台服务器,将其部署的跟生产环境一样,用相同的配置中心,相同的数据库…..,然后在路由层,针对内部一个特定的域名做映射,这样达到只有我们内部可以可以对其访问,这样测试先在这个环境的测试,无问题再发布。这其实就是金丝雀发布。我们也可以利用 feature toggle 实现,还更简单廉价,不需要路由层内部域名映射 (麻烦,要找运维),也不需要申请新的服务器(麻烦,要向领导申请,还要找运维)。
A/B Testing
urule与益博睿的A/B Testing
2017年年末我们调研了urule,准备用 urule 替代付费产品益博睿,替代需要个过程,不能草率,需要做A/B Testing,就是需要在线上同时跑 urule 和 益博睿,来比较它们之间的异同,确认稳妥才能全面切换到 urule。其实,用特性开关我们可以轻松实现 A/B Testing,确认稳妥后又可以轻松动态的全面切换到 urule 。
业务开关
1、《XXX》老拉新活动
2017年下半年,我们为《XXX》开发老拉新活动,这个活动上线后并是不开启状态,而是关闭状态,需要等到某个时间,比如我们活动11月份就开发完上线了,但是活动开始确要等到12月份。这种情况非常适合用基于**时间策略的特性开关
2、《XXX》与 《YYY》的联合登录
2017年下半年,我们为《XXX》开发返呗的联合登录,当时由于沟通问题,我们上线了,但是返呗那边的生产环境还没准备好,所以就出现了事故。用户一请求下单接口就出错,当时想要是有一个开关多好,直接把开关关了,切换到旧逻辑就好了。其实这种情况用特性开关就对了,我们不必等第三方上线了,我们才能上线,我们也可以随时关闭这一个功能。
3、《XXX》登录模块重构,redis切换到pg
2017年下半年,我们为《XXX》重构登录模块,当时登录的用户数据存储在redis,没有落地pg,担忧数据丢失问题,所以将其重构存储到pg数据库。这种情况也适用适用特型开关,可以用AOP-driven Toggling的方式轻松实现。
4、《XXX》app前端加解密判断
《XXX》调用后台接口需要加密,测试开发情况下不需要加解密,因此app启动会调用后端获取是否需要加解密,然后根据环境切换是否需要加解密
5、《XXX》app后台新旧APP版本兼容
《XXX》app后台那边有这样一种场景,APP新版本对某一旧接口做了较大的逻辑修改,但新逻辑不能被旧app访问到,旧app要求还是访问旧逻辑,为了实现这个,开发会在代码中引入if…else…分支,通过版本号来做判断。这一场景也可以用特性开关来做。
优雅降级/优雅接口关闭
银行提现接口停服维护,银盾需要关闭相关的接口
银行有时会进行升级维护,比如我们合作的XXX银行的提现接口停服维护了,那我们XXX这边与提现相关的一些接口就需要对其它系统优雅关闭。这种场景很适合用特性开关。