前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Boot 微服务上容器平台的最佳实践 - 9 - Ribbon和负载均衡

Spring Boot 微服务上容器平台的最佳实践 - 9 - Ribbon和负载均衡

作者头像
东风微鸣
发布2022-04-21 14:03:07
3510
发布2022-04-21 14:03:07
举报
文章被收录于专栏:东风微鸣技术博客

前言

今天开始第九篇, 主要介绍 Ribbon和负载均衡.

Flights服务的结构与Airports服务类似,但依赖并调用Airports服务。因此,它利用Ribbon和生成的OpenShift Service实现高可用性。

Ribbon 和 负载均衡

RestTemplate 和 Ribbon

要快速且轻松地声明使用Ribbon所需的依赖项,请将以下构件(artifact)添加为Maven依赖项:

代码语言:javascript
复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

该应用程序还利用Jackson JSR 310库正确地序列化和反序列化Java 8日期对象(date objects):

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
    <version>2.8.8</version>
</dependency>

声明一个负载均衡的RestTemplate并使用注入将其分配给一个字段(field):

代码语言:javascript
复制
@LoadBalanced
@Bean
RestTemplate restTemplate()
{
 return new RestTemplate();
}

@Autowired
private RestTemplate restTemplate;

对于传出调用,只需使用restTemplate字段:

代码语言:javascript
复制
Airport[] airportArray = restTemplate.getForObject( "http://zuul/airports/airports", Airport[].class );

作为URL的主机部分提供的服务地址是通过Ribbon根据应用程序属性中提供的值解析的: (http://zuul中的zuul会被解析为: http://zuul:8080)

代码语言:javascript
复制
zuul:
  ribbon:
    listOfServers: zuul:8080

在本例中,Ribbon需要一个静态定义的服务地址列表,但是只有一个服务地址是用zuul:8080提供。Zuul使用地址的第二部分,即根web上下文(如上文的/airports/),通过静态或动态路由重定向请求,本文档后面将对此进行解释。

提供的zuul主机名其实是OpenShift的Service 名(这个Service名在OpenShift集群内是可以作为域名使用的),并解析为Service的Cluster IP地址,然后路由到内部的OpenShift负载均衡器。OpenShift Service名称是在使用oc工具创建Service时确定的,或者在使用fabric8 Maven插件部署镜像时确定的,它在service yaml文件中声明。

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: zuul
spec:
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  type: ClusterIP

再解释下, 可以这么理解, OpenShift的Service类似于硬件Load Balancer(如F5), 这个Service的Cluster IP类似于F5的VIP. 它后面会有1个或多个zuul服务. 网络流: rest请求 -> zuul -> 1个OpenShift Service -> 1个或多个zuul实例.

实际上,Ribbon并不负责负载均衡请求,而是将它们发送到OpenShift内部负载均衡器,该负载均衡器知道服务实例的副本数和失败情况,可以正确地重定向请求(对于Ribbon来说, 就是1个地址; 服务的注册和发现其实是由OpenShift的Service来实现了)。

小结

这一次, Spring 微服务的负载均衡是通过: Ribbon 和 OpenShift(或K8S)的Service来做的.

  1. Ribbon仅负责反向代理; (不负责负载均衡)
  2. OpenShift Service 负责负载均衡, 以及服务的注册和发现.
    1. 具体某一个服务的失败与否是通过K8S的Health Probe来探测的.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 东风微鸣技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Ribbon 和 负载均衡
    • RestTemplate 和 Ribbon
    • 小结
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档