先说结果:
内存注册表+多级缓存机制
之所以快就是因为Eureka在内存里维护了一个 CocurrentHashMap<String, Map<String, Lease<InstanceInfo>>> 结构的注册表,来存储各个服务(生产者、消费者)的信息,服务名称啊、服务实例的id啊、主机名、端口号什么的,然后呢同时采用多级缓存机制,消费者获取去获取生产者实例信息时,先从ReadOnlyCacheMap里面找,没有的话再从ReadWriteCacheMap里面找,如果还没有最后再从注册表里找。
注意:发生服务变更时,比如拿掉一个服务或者添加一个服务,会在内存中修改注册表的数据,同时会删掉ReadWriteCacheMap里的数据。
Eureka在内存里维护了一个叫registry的CocurrentHashMap,key就是服务的名称,例如“order-service”,value(Map<String, Lease<InstanceInfo>>)代表一个服务多个实例
Map<String, Lease<InstanceInfo>> 里的key代表服务实例的id,value是一个叫做Lease的类,它的泛型是一个叫做InstanceInfo的类。
InstanceInfo(实例信息)里面保存机器的ip地址、hostname、端口号。
Lease,里面则会维护每个服务最近一次发送心跳的时间