SptingCloud版协作流程 | 学习笔记

简介: 快速学习SptingCloud版协作流程。

开发者学堂课程【Spring Cloud Alibaba Nacos 详解(下)SptingCloud版协作流程】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/725/detail/12933


Spring Cloud 服务协作流程 

 

内容介绍:

一、Spring Cloud 服务协作流程

二、总结

 

通过一些原生的 Spring Cloud 注解,可以快速来实现 Spring Cloud 微服务的服务发现机制,并使用 Nacos Server 作为服务发现中心,统一管理所有微服务。

 

一、Spring Cloud 服务协作流程

Spring Cloud 常见的集成方式是使用 Feign+Ribbon 技术来完成服务间远程调用及负载均衡的,

如下图:

图片.png

 

在微服务启动时,会向服务发现中心上报自身实例信息,这里 Service B 包含多个实例。      

每个实例包括:

IP 地址、端口号信息。

微服务会定期从 Nacos Server (服务发现中心)获取服务实例列表。

Service A 调用Service B 时,ribbon 组件从本地服务实例列表中查找Service B 的实例,如获取了多个实例如 Instance1Instance2。这时 ribbon 会通过用户所配置的负载均衡策略从中选择一个实例。

最终,Feign 组件会通过ribbon 选取的实例发送 http 请求。

采用 Feign+Ribbon 的整合方式,是由Feign 完成远程调用的整个流程。

Feign 集成了RibbonFeign 使用 Ribbon完成调用实例的负载均衡。

1、负载均衡的概念

Spring Cloud 服务协议流程中,Service A 通过负载均衡调用 Service B,下边来了解一下负载均衡:

负载均衡就是将用户请求(流量)通过一定的策略,分摊在多个服务实例上执行,它是系统处理高并发、缓解网络压力和进行服务端扩容的重要手段之一。它分为服务端负载均衡和客户端负载均衡。

服务器端负载均衡:

 

图片.png

 

在负载均衡器中维护一个可用的服务实例清单,当客户端请求来临时,负载均衡服务器按照某种配置好的规则(负载均衡算法)从可用服务实例清单中选取其一去处理客户端的请求,这就是服务端负载均衡。

例如 Nginx,通过 Nginx 进行负载均衡,客户端发送请求至 NginxNginx 通过负载均衡算法,在多个服务器之间选择一个进行访问。即在服务器端再进行负载均衡算法分配。

客户端服务负载均衡:

图片.png

 

Ribbon 就属于客户端负载均衡。在 ribbon 客户端会有一个服务实例地址列表,在发送请求前通过负载均衡算法选择一个服务实例,然后进行访问,这是客户端负载均衡。即在客户端就进行负载均衡算法分配。

Ribbon 是客户端负载均衡器,它的责任是从一组实例列表中挑选合适的实例,如何挑选取决于负载均衡策略。

Ribbon 核心组件 IRule 是负载均衡策略接口,它有如下实现,仅做了解:

·RoundRobinRule (默认):轮询,即按一定的顺序轮换获取实例的地址。

·RandomRule:随机,即以随机的方式获取实例的地址。

·AvailabilityFilteringRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,以及并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;

·WeightedResponseTimeRule:根据平均响应时间计算所有服务的权重,响应时间越快,服务权重越大,被选中的机率越高;

刚启动时,如果统计信息不足,则使用 RoundRobinRule策略,等统计信息足够时,会切换到 WeightedResponseTimeRule

·RetryRule:先按照RoundRobinRule 的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务;

·BestAvailableRule:会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;

·ZoneAvoidanceRule:默认规则,复合判断 server 所在区域的性能和 server 的可用性选择服务器;

可通过下面方式在 spring boot 配置文件中修改默认的负载均衡策略:

account-service 是调用的服务的名称,后面的组成部分是固定的。

2、Feign 介绍

Feign Netflix 开发的声明式、模板化的 HTTP 客户端,Feign 可以帮助我们更快捷、优雅地调用 HTTP APIFeign 的英文表意为“假装,伪装,变形”,可以理解为将 HTTP 报文请求方式伪装为简单的 java 接口调用方式。

参考第1章节的 Service A 调用 Service B 的例子,我们使用

Feign 实现这个过程,代码如下:

Service B 暴露“/service”服务端点

Feign 调用方式如下:

1)声明 Feign 客户端

2)业务调用

在业务调用时,减少了与业务无关的 http 请求相关代码的编写,使业务逻辑清晰。

分析 Feign 的优势:

·在声明 Feign 客户端之后,Feign 会根据 @FeignClient 注解使用 java 的动态代理技术生成代理类,在这里指定@FeignClient value service B,则说明这个类的远程目标为spring cloud 的服务名称为service B 的微服务。

·service B 的具体访问地址,Feign 会交由 ribbon 获取,若该服务有多个实例地址,ribbon 会采用指定的负载均衡策略选取实例。

·Feign 兼容 spring web 注解(如:@GetMapping),它会分析声明 Feign 客户端方法中的 Spring 注解,得出 Http 请求 method、参数信息以及返回信息结构。

·当业务调用 Feign 客户端方法时,会调用代理类,根据以上分析结果,由代理类完成实际的参数封装、远程 http 请求,返回结果封装等操作。

另外,若在 Spring cloud 中使用Feign,需要引入以下依赖

Feign 默认集成了 Ribbon,可以直接使用。

还需要在 spring cloud 启动类中标注 @EnableFeignClients,表明此项目开启 Feign 客户端。

 

二、总结

通过上面的学习,我们已经了解 Spring cloud 的微服务是如何协作的,通过哪些组件的配合能够完成服务间协作,我们了解了什么是负载均衡,Feign 用于服务间Http 调用,Ribbon 用于执行负载均衡算法选取访问实例,而 Ribbon 的实例列表来源是由 Spring cloud 的服务发现中心提供(当前实现为 Nacos)

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
3月前
|
监控 前端开发 测试技术
前端研发流程的深入解析:从构思到交付
前端研发流程的深入解析:从构思到交付
64 0
|
存储 数据可视化 项目管理
|
XML 运维 JavaScript
软件开发的流程
1.软件开发的相关知识 1.1软件开发的流程: 需求分析–>概要设计—>详细设计–>编码–>测试–>发布运维 1.2项目的评估
219 0
软件开发的流程
开发中基本协作规定
开发中基本协作规定
75 0
|
域名解析 架构师 开发者
职能概述及服务流程|学习笔记
快速学习职能概述及服务流程。
73 0
职能概述及服务流程|学习笔记
|
开发者
氚云丨开发课— 08 流程操作及组织机构管理| 学习笔记
快速学习氚云丨开发课— 08 流程操作及组织机构管理。
279 0
|
敏捷开发 搜索推荐 测试技术
YesDev:轻松协作每一个项目
YesDev:轻松协作每一个项目
Teambition 用简化的方式解决复杂的协作问题
Teambition是一款简单高效的协作工具。其愿景是用简化的方式解决复杂的协作问题。
309 0
Teambition 用简化的方式解决复杂的协作问题
|
机器人
阿里云RPA(机器人流程自动化)干货系列之五:业务流程梳理方法
本文是阿里云RPA(机器人流程自动化)干货系列之五,详细介绍了在开发阿里云RPA机器人应用之前对客户的业务流程进行详细、全面地梳理,并识别出流程中的关键点和换位思考点,为后续应用开发打好基础。
10590 1