- EurekaClient在第一次启动的时候会全量拉去服务,这个是毫无疑问的。
- EurekaClient在之后的运行过程中是怎么来去EurekaServer里面的注册表的信息的呢?反正一共就是两个答案,一个是全量,一个是增量。每次都全量拉取,肯定是有点浪费带宽的,那么现在确定的是,每次拉取的时候都是增量拉取的。
- EurekaClient多长时间会拉取一次增量的数据库,默认的情况下是30秒拉取一次,这个参数是可以配置的,可以使用eureka.client.registry-fetch-interval-seconds=30这个配置来修改,单位是秒。
- 每次都增量拉取会不会有什么不对的地方呢?这个地方好多人都不知道的,如果你也不知道,希望你能拿起你的小本本记下来。每次增量拉取完了,需要和本地的缓存的注册表合并完了,需要和EurekaServer的注册表的信息进行一下对比,这个需要怎么对比呢,总不能一条一条来吧。每次拉取对应的增量数据的时候,EurekaServer还会返回一个全量注册表的hash数据,这个时候EurekaClient把自己本地的数据和新拉去的合并完了进行hash,然后看看这两个hash值是否一样就知道自己本地的是否和EurekaServer端的数据是不是一样的了。这个时候如果不一样就需要重新拉去一次全量的数据了。
- EurekaServer端是怎么保存自己的增量数据的呢,这个也是EurekaServer的亮点之一,EurekaServer在做增量的时候添加多级缓存,除了自己本身的注册表之外,还有readWriteCacheMap(读写缓存)和readOnlyCacheMap(只读缓存),增量的数据是根据这两个缓存来获取的。
注:readWriteCacheMap(读写缓存)和readOnlyCacheMap(只读缓存)是每一段时间会变的,这个就等下次有机会的时候再给大家讲解了。