本文节选自《亿级流量网站架构核心技术》第五章 降级特技 配置中心部分。 降级开关我们需要通过配置方式来动态开启/关闭,在应用时,首先要封装一套应用层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(() - |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|