工作记录-老功能下线方案

新功能要上线,老功能该如何下线呢,下面列举一些具体方案的对比说明:

一、从兼容性上考虑:

方案名称 说明 优点 缺点
新接口完全兼容老接口

1、最好的办法,客户端无需做处理

2、需要服务端在接口数据结构设计上,要考虑到扩展性的需求,对服务端接口设计要求比较高

1、可以下线老的接口

2、数据能够最大程度和新版保持一致

新接口适配老接口

1、也是比较好的方法,客户端无需做处理

2、服务端会增加一部分工作量

1、可以下线老的接口

2、能够保证数据正确,但不保证新功能被支持

扫描二维码关注公众号,回复: 658298 查看本文章
1、需要对输出的数据结构进行转换
新接口无法适配老接口

如果老的接口不能下线,后期维护成本大

1、维护多套老接口,成本非常大,没有优点可言,可见接口设计是很重要的

二、从下线角度考虑:

方案名称 说明 优点 缺点
按比例切换老接口 如,根据userId取模,老接口以一定的百分比逐步下线    
按比例随机返回错误提示 如,访问老功能,随机出现错误提示’该接口已下线‘等等。 1、不让某个用户一直失败,但又通过一定比例通知到用户该接口即将废弃。 1、用户也可能会认为是系统问题
在一定时间段,按比例随机返回错误提示 某一个时间段内,执行方案2 1、尽量降低方案2的负面影响  

附加相关代码:

1、按比例切换

//默认会切换20%的用户
long userId = getBuyerId();
int mod = (int)userId%100+1;
int rate = Integer.parseInt(getConfigRateValue(20));//默认20%
if(mod<=rate){
	return false;
}
return true;

2、在一定时间段,随机给出错误提示

int hour = calendar.get(Calendar.HOUR_OF_DAY);
//2.check if 'hour' is in this period
String period = getConfigHourPeriod()//12-18
String[] hourPeriod = period.split("-");
int start = Integer.parseInt(hourPeriod[0]);
int end = Integer.parseInt(hourPeriod[1]);
if(hour >=start && hour<=end){
	//3.fail rates
	String failRate = getConfigFailRate()//20
	int random = (int)(Math.random()*100)+1;
	//4.rate=20%
	if(random<=Integer.parseInt(failRate)){
		return true;
	}
}
return false;

猜你喜欢

转载自mingren135.iteye.com/blog/1912799