首页 存档 技术 查看内容

降级特技之配置中心

2018-3-30 13:00 |来自: 互联网 296 0

摘要: 本文节选自《亿级流量网站架构核心技术》第五章 降级特技 配置中心部分。 降级开关我们需要通过配置方式来动态开启/关闭,在应用时,首先要封装一套应用层API方便业务逻辑使用,对于开关数据的存储如果涉及的服务器 ...

本文节选自《亿级流量网站架构核心技术》第五章 降级特技 配置中心部分。


降级开关我们需要通过配置方式来动态开启/关闭,在应用时,首先要封装一套应用层API方便业务逻辑使用,对于开关数据的存储如果涉及的服务器/系统较少,则初期可以考虑使用配置文件配置。如果涉及的服务器/系统较多,则应该使用配置中心进行配置。实现时要做到不需要修改代码,不需要重启应用可动态配置开关。


1 应用层API封装

如下是我们抽象并封装的开关API。

USER(

"用户信息",

"user.not.call.backend", "是否不调用后端服务",

"user. call.backend.rate.limit", "调用后端服务的限流",

"user.redis.expire.seconds", "redis缓存过期时间"),


里边涉及到一两个配置。

user.not.call.backend:是否回源调用后端用户服务。如果不开启,那么只会访问缓存,不会将流量打到后端。

user.call.backend.ratio:调用后端服务的限流,比如配置100,即一秒只有100个请求会打到后端服务,剩余请求如果缓存没用命中时,则直接返回空数据或错误。

user.redis.expire.seconds:后端返回的用户数据在缓存中缓存多久。


通过封装后,我们可以很简单地使用这些API。

if (Switches.USER.notCall()) {

retur nnull;

}

或者

cacheService.set(CacheKeys.getUserKey(pin), info, Switches.USER.getExpiresInSeconds());


API实现是从配置文件获取相关配置,如果没有,则返回一个默认值。

public boolean notCall() {

return DynamicConfigurer.getBoolean(callKey, false);

}

或者

public int getExpiresInSeconds() {

return DynamicConfigurer.getInt(expiresKey, DEFAULT_EXPIRES_IN_ SECONDS);

}


2 配置文件实现开关配置

使用properties文件作为配置文件,借助JDK 7 WatchService实现文件变更监听,实现代码如下所示。

static {

try {

filename= "application.properties";

resource= new ClassPathResource(filename);

//监听filename所在目录下的文件修改、删除事件

watchService = FileSystems.getDefault().newWatchService();

Paths.get(resource.getFile().getParent()).register(watchService,StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);

properties= PropertiesLoaderUtils.loadProperties(resource);

} catch(IOException e) {e.printStackTrace();}

//启动一个线程监听内容变化,并重新载入配置

Thread watchThread = new Thread(() -

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部