微服务上面做一个缓存
来源:5-2 大白话剖析服务发现原理

LittleGoblin
2022-11-26
问题一:老师,这个缓存一般用哪个类来存储?Map?Redis?还是别的线程安全的集合?还是其他工具类?
问题二:微服务上做一个缓存,通过定时任务来做。以内容微服务为例,由于内容微服务的实例有多个,那么所有的内容微服务的实例都要去更新?
问题三:本地缓存的微服务的地址,这个地址是ip的形式吗?例如:http://192.168.1.1:8080/
问题四:本地缓存的地址如何和Ribbon/Feign一起使用?我以Ribbon为例描述问题,使用了Ribbon后,内容中心调用微服务的接口的代码:
UserDTO userDTO = this.restTemplate.getForObject("http://user-center/users/{userId}, UserDTO.class, userId);
这行代码的意思是:Ribbon会自动的把user-center名称转换成用户中心在nacos上面的地址,并且去进行负载均衡算法,计算出一个实例给我们请求。
那本节你提到的微服务调用是直接调用的,从本地缓存拿到想要调用的微服务的地址,不是先去请求服务发现组件再去调用的。
那整合了Ribbon后,本地缓存这个操作还需要吗?如果需要,怎么一起协作呢?
写回答
1回答
-
大目
2022-11-28
问题1:本地缓存,一个map即可
问题2:是的
问题3:可以是基于IP的,也可以是主机名的。对于spring cloud alibaba,是基于IP;如果用的spring cloud,注册中心用的eureka,那默认是基于主机名的,可以配置。
问题4:ribbon内部实现了服务发现缓存。
022022-12-15
相似问题