当同一个项目部署多个节点,或者多个项目部署在不同的jvm实例上,因为没办法共享内存。那共享项目的配置参数就成了一个问题,当然解决的办法很多,一起读数据库,一起读redis/memcahed,读本地缓存,修改的时候再一个个去触发。这些方案或多或少都会有效率或者时效性比较低的问题。
可能是被人问多了几次,我觉得用zk来实现这种配置中心的方案也是很方便的,不怕效率问题的,就实时去读zk。兼顾效率和时效性的就有了下面这种实现。
每个项目的本地缓存初始化会主动去读取zk集群中相关配置,同时会监听对应配置的改变,及时修改本地的内容。而我们的项目每次只需要读取其中的本地缓存中的配置即可。本项目内,缓存配置的读写采用了本地读写锁。而跨项目之间的配置的写和更新,则采用了zk实现的分布式读写锁。具体的实现,可以看https://github.com/linsongze/consistent_config