SptingCloud版协作流程 | 学习笔记

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 快速学习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)

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
22天前
|
缓存 Devops jenkins
专家视角:构建可维护的测试架构与持续集成
【10月更文挑战第14天】在现代软件开发过程中,构建一个可维护且易于扩展的测试架构对于确保产品质量至关重要。本文将探讨如何设计这样的测试架构,并将单元测试无缝地融入持续集成(CI)流程之中。我们将讨论最佳实践、自动化测试部署、性能优化技巧以及如何管理和扩展日益增长的测试套件规模。
41 3
|
14天前
|
监控 数据可视化 搜索推荐
有哪些好用的流程管理工具?帮你快速搞定复杂工作流程
在职场中,流程管理是企业高效运转的核心。本文测评了五款热门流程管理工具:板栗看板、Trello、Asana、Jira 和 Notion,从功能、易用性和适用场景等方面进行全面分析,帮助你选择最适合的工具,提升团队协作和项目管理效率。
16 0
|
2月前
|
敏捷开发 测试技术 持续交付
构建高效团队:敏捷开发与远程协作的最佳实践
在快速发展的技术行业中,构建高效的开发团队至关重要。本文介绍了敏捷开发的核心原则,包括跨功能团队、迭代进展、持续改进和客户合作,并探讨了远程协作的挑战与机遇。面对沟通障碍、时区差异等挑战,企业可以通过明确沟通渠道、建立清晰工作流程、促进团队凝聚力、利用自动化工具及灵活安排工作来提升远程团队的效率。敏捷开发与远程协作相结合,不仅能提高生产力,还能增强团队的创新能力和凝聚力。
|
3月前
|
监控 架构师 项目管理
项目管理架构师的角色与职责:构建高效项目交付框架
【8月更文第7天】在当今快速变化的商业环境中,组织需要灵活高效的项目交付机制来应对不断出现的新挑战。项目管理架构师(Project Management Architect, PMA)作为一种新兴的角色,在确保项目成功交付方面扮演着至关重要的角色。本文将探讨PMA的核心职责,以及他们如何通过设计和实施项目管理流程来提高项目的可扩展性和适应性,并通过有效的项目治理来提升团队的整体表现。
156 0
|
4月前
|
敏捷开发 测试技术 项目管理
在LabVIEW项目管理中,如何确保团队之间的有效沟通和协作
在LabVIEW项目管理中,如何确保团队之间的有效沟通和协作
50 2
|
5月前
|
前端开发 Java 程序员
老程序员分享:Jeeplus框架工作流的使用实战(采购计划的制定流程)
老程序员分享:Jeeplus框架工作流的使用实战(采购计划的制定流程)
107 2
|
敏捷开发 数据可视化 项目管理
敏捷项目是如何管理的?有哪些好用的工具
Leangoo领歌是一款永久免费的专业敏捷研发管理工具,提供敏捷研发解决方案,解决研发痛点,打造成功产品。帮助团队实现需求、迭代、缺陷、任务、测试、发布等全方位研发管理。
|
XML 运维 JavaScript
软件开发的流程
1.软件开发的相关知识 1.1软件开发的流程: 需求分析–>概要设计—>详细设计–>编码–>测试–>发布运维 1.2项目的评估
259 0
软件开发的流程
|
存储 数据可视化 项目管理
|
域名解析 架构师 开发者
职能概述及服务流程|学习笔记
快速学习职能概述及服务流程。
职能概述及服务流程|学习笔记
下一篇
无影云桌面