首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧云-如何获得分布式弹簧应用的重试、负载平衡和断路器的好处

弹簧云-如何获得分布式弹簧应用的重试、负载平衡和断路器的好处
EN

Stack Overflow用户
提问于 2015-08-09 05:00:23
回答 1查看 5.3K关注 0票数 7

我希望在spring-cloud-Eureka支持的微服务应用程序中提供以下特性。

1)负载平衡--如果一个服务有3个节点,它们之间就应该进行负载平衡。

2)重试逻辑--如果其中一个节点没有响应,那么在返回到另一个节点之前,应该对一定数量的节点进行重试(例如: 3.应该是可配置的)。

(3)断路器--如果由于某种原因,所有3个业务节点都存在访问db和抛出异常或未响应的问题,则在业务恢复后,电路应打开、退出方法调用和电路自动关闭。

看了很多Spring云的例子,我发现

1) RestTemplate将在选项1方面有所帮助。但是,当RestTemplate访问一个服务实例时,如果节点失败,它会尝试其他两个节点吗?

2) Hystix将有助于断路器选项(以上3)。但是,如果只有一个节点没有响应,它会在打开电路和调用回退方法之前尝试其他节点吗?一旦服务恢复,它会自动关闭电路吗?

3)如何利用春云获取retryLogic?我确实知道@Retryable注释。但是,在以下情况下,它会有帮助吗?用一个节点重试3次,失败后,在断路器启动之前,尝试下一个节点3次,最后一个节点3次。

我看到所有这些配置都可以在春云中使用。但很难理解如何为所有这些有效的解决方案进行配置。

以下是提出的建议:

代码语言:javascript
复制
@HystrixCommand
@Retryable
public Object doSomething() {
   // use your RestTemplate here
}

但我不完全知道这是否能帮助我解决我上面提到的所有微妙之处。

我确实看到有一个@FeignClient。但是,从这个博客中,我了解到它为HTTP请求提供了一个高级特性。它是否有助于重试和断路器和负载平衡的所有一体?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2015-09-08 18:09:59

我确实看到了一个@FeignClient。它是否有助于重试和断路器和负载平衡的所有一体?

如果您使用的是完整的spring云堆栈,它实际上解决了您提到的所有问题。

此场景中的netflix组件在spring中如下所示:

Eureka -服务注册中心

让我们动态注册您的服务,这样您只需要修复应用程序中的一个主机(eureka)。

丝带负载平衡器

它可以为您提供循环的负载平衡,但是您可以实现自己的@RibbonClient (即使是特定的服务),并设计您的自定义负载平衡(例如,基于eureka元数据)。负载平衡发生在客户端。

冒充- Http客户端

使用@FeignClient,您可以快速地为您开发其他服务(或基础设施之外的服务)。它与丝带和eureka集成在一起,因此您可以引用您的服务@FeignClient(yourServiceNameInEureka),您最终得到的是一个客户机,它使用首选逻辑在注册的实例之间进行负载平衡。如果使用spring,则可以使用熟悉的@RequestMapping注释来描述所使用的端点。

型高压断路器

默认情况下,假装客户端将使用hystrix,每个请求都将被包装在hystrix命令中。当然,您可以手工创建hytrix命令,并根据您的需要配置它们。

您必须配置一些才能使这些系统正常工作(实际上,您的配置上只需要几个@Enable注释)。

我强烈建议阅读所提供的spring文档,因为它以相当快的速度完成了您的几乎所有方面。

http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31901054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档