开发者社区 > 云原生 > 正文

对nacos及底层的机制不熟,是nacos哪里缓存问题,还是什么问题么?

有个问题想请教下各位nacos大佬,我这边有两个微服务,service-a和service-b,都注册到nacos上,service-a通过resttemplate的方式请求service-b,service-b有两个版本,现在想基于istio实现对service-b的灰度发布。现在的做法是用istio拦截service-a向nacos server端获取service-b实例列表的接口请求,把接口响应中service-b的实例ip替换成service-b服务名,因为istio需要根据服务名做灰度发布,没办法按照实例ip做灰度发布,但发现一个问题
访问service-b的请求可以一段时间内只访问灰度版本,但过一段时间就又变成两个版本随机访问了,再过一段时间又可以只访问灰度版本了,如此循环往复
打开service-a的debug日志
9f0ab1356f36ae92bcd248ef6b1f05d3.png
发现切换的时间点,上面一条是期望的,发起的请求host是服务名,下面的一条是有问题的,发起的请求host是服务实例ip
对nacos及底层的机制不熟,是nacos哪里缓存问题,还是什么问题么?

展开
收起
嘟嘟嘟嘟嘟嘟 2023-11-22 01:44:55 114 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    你的问题看起来像是由于Nacos和Istio之间的交互导致的问题。Nacos通常根据实例IP来路由请求,而Istio则依赖于服务名称来进行流量控制。因此,在你拦截并更改Nacos的响应时,可能会导致不一致的行为。

    一个可能的解决方案是在服务A和服务B之间直接使用服务名称而不是IP地址进行通信,然后在Istio中配置灰度发布策略。这将确保所有的流量都是由Istio处理的,从而避免了与Nacos的冲突。

    然而,这种方法可能需要对你的应用程序进行一些修改,以适应使用服务名称而非IP地址。

    还有另一种可能是,你在配置灰度发布的百分比时遇到了一些问题。如果你没有正确地设置这个值,那么你可能会看到流量在不同的版本之间交替变化。

    你可以检查一下你的灰度发布策略,并确保它们被正确地配置和应用。同时,你也应该继续监控你的应用程序的日志,以找出可能导致这个问题的其他潜在原因。

    2023-11-29 16:01:38
    赞同 展开评论 打赏
  • 这个问题看起来像是Istio的流量切换策略的问题。Istio默认的流量切换策略是基于百分比的比例分配,也就是说,它会根据配置的灰度比例,将请求分配到不同的版本。但是,如果请求的host是实例IP,那么Istio就无法正确地处理这种请求,因为它需要根据服务名来路由请求。

    你可以尝试以下几种解决方案:

    1. 在Istio的配置中,将流量切换策略改为基于服务的灰度发布。这样,Istio就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。

    2. 在Nacos的配置中,将实例的host设置为服务名,而不是实例IP。这样,当请求到达Nacos时,Nacos就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。

    3. 在Service-A的配置中,将请求的host设置为服务名,而不是实例IP。这样,当请求到达Service-A时,Service-A就可以根据服务名来路由请求,而不会因为实例IP的变化导致请求路由错误。

    2023-11-22 10:54:54
    赞同 展开评论 打赏
  • 没玩过istio的方式, 只玩过另一种改写LoadBalancer调用, 根据标记调用注册在nacos上不同标记的灰度服务。类似这种方式,
    https://bbs.huaweicloud.com/blogs/360671
    只是可以更加细分,不是简单的从网关直接分灰度,而是重写了nacos负载均衡策略。此回答整理自钉群“Nacos社区群4”

    2023-11-22 08:12:52
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关电子书

更多
基于英特尔 SSD 的虚拟机缓存解决SSD 立即下载
用户态高速块缓存方案 立即下载
高性能Web架构之缓存体系 立即下载