携程的Apoll已经开源。
configService:配置的获取接口,配置的推送接口
client:客户端使用的配置拉取功能
adminService:提供配置的管理功能
portal:前端界面
Client如何感知配置更新过?
客户端主动?服务端主动?
客户端主动
项目启动的时候,一个线程每隔5s会发送一个http长链接,有更新立即返回,code为200。没更新则线程进行挂起60s,如果60s到了,则返回code码为304。
问题:为什么在长链接里,不直接返回结果,而是返回200让客户端重新获取?
实时性的基础上,保持设计尽量简单。
总结:
- 主要是通过客户端应用发起一个长连接去
Apollo ConfigServer端,如果Apollo ConfigServer端有配置更改会告诉应用端有配置修改,让客户端立马去拉取全量的配置,并且把配置更新到本地缓存,并且还会异步去更新本地文件缓存。 - 客户端还有一个默认
5min执行一次的定时任务,去拉取全量的配置。拉回配置之后也是对比本地缓存和远程是否一致,如果不一致则更新本地进程缓存为远程的,同时还去异步更新下本地文件。
服务端主动
如果服务端主动,那么受到客户端服务稳定先的限制,摒弃这种做法。