开发者社区> 晓风瑟瑟> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

基于网关服务治理的研究与实践(三)微服务治理框架Spring Cloud

简介: SpringCloud是Spring官方推出的微服务治理框架,是一个基于Spring Boot框架实现的微服务架构开发工具集,其提供了完整的微服务解决方案,包括:服务治理、注册中心、配置管理、熔断器、服务路由等等。
+关注继续查看
福利推荐:阿里云、腾讯云、华为云等大品牌云产品全线2折优惠活动来袭,4核8G云服务器899元/3年,新老用户共享优惠,点击这里立即抢购>>>

3 微服务治理框架Spring Cloud

上一篇介绍了服务治理相关背景、概念及服务治理的内容和目标,及相关技术栈,本篇主要介绍服务治理框架Spring Cloud框架。

3.1 微框架Spring Boot

Spring框架是一个轻量级开源的容器框架,最初是由Rod Johnson提出,其本质是为了解决传统Java企业级应用开发中的复杂性问题。Spring框架引入了组件化的思想,采用依赖注入和面向切面编程等技术,解耦对象间的依赖关系,降低应用开发中的复杂性,快速实现企业级应用。早期的Spring框架基于XML的配置方式管理Bean,随着业务的增加,XML配置变得越来越臃肿,依赖关系也变得错综复杂,导致开发效率低下,使得应用更加难以维护和管理。

面对Spring框架XML配置和依赖管理的复杂性问题,Spring Boot应运而生。Spring Boot是基于Spring4搭建的微框架,其宗旨是为了简化Java企业级应用开发。Spring Boot遵循“约定优于配置”的思想,通过自动化配置简化现有Spring框架中XML复杂的配置和依赖关系管理。使用Spring Boot创建应用,其优点如下:

1)为基于Spring的开发提供方便快捷的入门体验。

2)开箱即用,可以更快更方便的与第三方应用、常用的组件整合及使用。

3)自动装配,提供第三方库默认配置,也可以通过修改默认值满足特定的需求。

4)提供了非功能性特征,如嵌入式服务器、安全性、健康检查、外部化配置等。

5)零配置,无多余的代码生成和XML配置。

6)简单,使编码、配置、部署及监控变得更简单,提高了开发、部署效率。

Spring Boot继承了Spring框架的核心特性及相关扩展功能,简化了对Spring已有技术的使用,无须繁杂配置即可快速构建应用程序。Spring Boot是开发单一服务框架的基础,Spring Cloud也建立于Spring Boot框架基础上,利用Spring Boot的开发便捷性简化了微服务基础设施的开发,提供了一套微服务开发工具包,用于增强基于Spring Boot创建的应用程序。图3-1展示了Spring Boot与这些框架之间的关系。

image.png

3-1 Spring与其他框架之间的关系

3.2 服务注册发现Eureka

EurekaNetflix 开源的服务注册发现组件,也是Spring Cloud的重要组件。Spring CloudNetflix Eureka模块进行了封装,用于实现服务注册与发现。Eureka本身是一个基于REST的服务,包括两个组件:Eureka ServerEureka ClientEureka Server也称为服务注册中心,支持集群模式部署,每个服务端都可以作为对方的客户端进行相互注册与发现;Eureka Client既可以作为服务提供者,也可以作为服务调用者存在,负责处理服务的注册与发现,发送心跳给Eureka 服务端。图3-2Eureka的架构图。

image.png

图3-2 Eureka架构图

3.3 客户端负载均衡Ribbon

负载均衡是分布式系统架构设计中必须要考虑的重要因素,它对系统的高并发和高可用、缓解网络压力、增加系统吞吐量,提高数据处理能力具有重要作用。负载均衡分为服务端负载均衡和客户端负载均衡。

服务端负载均衡包括软件负载均衡和硬件负载均衡两种解决方案,其中软件负载均衡是指通过在服务器的操作系统上安装具有均衡负载功能的软件,如HAProxyNGINX等,硬件负载均衡是指在服务器与网络设备之间安装的负载均衡设备,如A10F5等。它们都维护一份可用的服务端列表,通过心跳健康检查机制确保服务端列表中的服务可用性,当客户端发起请求经过服务端负载均衡时,由服务端负载均衡器选取一个可用的服务端,并转发客户端的请求。

RibbonNetflix开源的客户端负载均衡工具,Spring Cloud Ribbon基于Netflix Ribbon实现,通过对Ribbon API的封装实现负载均衡,并将其集成于每个Spring Cloud构建的微服务和基础设施中。与服务端负载均衡不同,Ribbon的客户端负载均衡的每个客户端服务都维护着一份所要访问的服务清单,同样也需要心跳检查机制来维护服务端列表中服务的健康性。

Ribbon的负载均衡机制提供了若干负载均衡策略,用于在服务器列表中进行选择服务器,其内置的负载均衡策略包括:随机策略、轮询策略、重试策略、最低并发策略、可用过滤器策略、响应时间加权策略、区域权重策略。另外,Ribbon还提供了Ping机制和重试机制,Ping机制是通过定时Ping服务器的操作来检查服务器的存活状态,确保服务实例的可用性;而重试机制是为确保服务数据的一致性,当服务调用到故障的实例时,会再次尝试请求,并根据失败次数设置,尝试到所设定的失败次数后,更换实例访问,以达到通过重试解决短暂故障问题的目的。

3.4 服务容错保护Hystrix

在微服务架构中,存在着诸多的服务单元,各服务单元通过服务注册与订阅的方式互相依赖。服务之间的依赖通过远程调用的方式执行,调用过程中若存在网络延迟和服务故障,随着请求的不断增加,可能会阻塞整个调用链,使服务变得不可用,最终导致整个业务系统崩溃。为了保障整体系统的可用性,减少因服务不稳定因素出现故障的风险,可以使用熔断机制来解决这类问题。断路器模式通过快速响应失败的操作请求,缩短故障处理周期,而不是一直等到操作超时,使服务能够在正常服务时间内完成请求处理,避免因单点故障而引发系统整体的连锁故障反应。

HystrixNetflix开源的服务容错框架,该框架用于控制访问远程服务、第三方系统的服务节点,防止服务调用产生的级联故障导致系统雪崩,提供强大的容错和自我保护能力。Hystrix具备拥有熔断机制、线程和信号量隔离机制及回退机制,服务降级,请求缓存和请求合并,实时监控、报警及动态配置等服务保护功能。Spring Cloud集成了Hystrix组件,Hystrix通过超时容限和失败容错逻辑,来控制分布式系统中服务之间的交互;通过使用“舱壁模式”实现对依赖服务的线程池隔离,降低被依赖服务失效的风险,使服务本身得到完全保护,避免受到对依赖服务不可控的影响,从而提高系统的容错性和稳定性。

3.5 服务调用框架Feign

FeignNetflix提供的开源的Rest客户端工具。Spring Cloud Feign基于Netflix Feign实现,它提供了声明式、模板化的远程调用客户端的实现,并封装整合了客户端负载均衡Spring Cloud Ribbon与服务保护容错Spring Cloud Hystrix两个基础工具框架的功能,其目标在于简化Web服务客户端的开发,让Web调用更加简单。Spring Cloud Feign具备可插拔的注解支持,还支持插件式的编码器和解码器,这种可插拔的方式,可根据实际的需求进行定制化扩展和替换。

3.6 网关服务Zuul

ZuulNetflix开源的网关服务组件,是一个提供了微服务路由、负载均衡和过滤器解决方案的边缘服务框架。Zuul提供了一套过滤器机制,即将HTTP请求划分为不同的阶段,每个阶段由不同的过滤器处理,实现对微服务接口的拦截和校验。Zuul的工作原理如图3-3所示。Zuul的主要功能如下:

(1)验证与安全:对访问资源和来访者身份进行验证,拦截不符合要求的请求。

(2)追踪与监控:追踪后端服务运行数据,展示准确的请求状况。

(3)动态路由:动态的将请求转发到后端的服务实例。

(4)负载分配:根据负载类型设置相应的处理策略,放弃超出负载限制的请求。

(5)静态响应处理:提供静态类型的过滤器,直接响应部分请求,而不再将请求转发到服务内部返回响应。

(6)压力测试:逐渐增加访问集群的请求流量,从而测试集群的性能水平。

image.png

3-3 Zuul工作原理图

Spring Cloud Zuul基于Netflix Zuul进行了进一步的封装整合,用于实现API服务网关,提供了认证鉴权、动态路由、请求转发、熔断保护、安全过滤等功能。

Spring Cloud ZuulSpring Cloud Eureka进行了整合,其自身也作为一个应用注册到了Eureka服务中,并通过Eureka获取其它服务实例的信息,依此来实现动态路由的功能。Spring Cloud Zuul提供了诸多默认的核心过滤器,这些过滤器在网关服务启动时被自动加载和启用,也可以根据业务需要自定义实现过滤器。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring Cloud 应用 Proxyless Mesh 模式探索与实践
本文通过一个 Demo 演示了 SpringCloud 应用通过接入MSE服务治理之后,无需修改任意代码就能具备 Proxyless Mesh的能力,当前 MSE 服务治理支持还有些限制,在持续补充完善中。
0 0
Spring Cloud 应用 Proxyless Mesh 模式探索与实践
本文通过一个 Demo 演示了 SpringCloud 应用通过接入MSE服务治理之后,无需修改任意代码就能具备 Proxyless Mesh的能力,当前 MSE 服务治理支持还有些限制,在持续补充完善中。当前 MSE 服务治理 Proxyless 模式支持基础的服务发现能力以及 DestinationRule 的 Subset 能力,我们可以配合 MSE 流量治理实现 Mesh 架构下的全链路灰度、标签路由等治理能力。
0 0
微服务开发平台 Spring Cloud Blade 部署实践
本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前端框架用于快速搭建企业级的 SaaS 多租户微服务平台。
0 0
Spring AOP注解的学习与实践
使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
0 0
大规模 Spring Cloud 微服务无损上下线探索与实践
软件迭代过程中,除了风险控制,在微服务领域还有一个常见的问题就是应用上下线过程中的流量治理,目的也比较明确,确保应用在发布、扩缩容、重启等场景时,不会损失任何业务流量损失。无损下线技术正是在这样的背景下应运而生的,他解决了变更过程中的业务流量损失问题,也是流量治理体系中非常重要的一个环节。无损下线功能有效地保证我们业务流量的平滑,提升了微服务开发的幸福度。
0 0
Spring 加强版 ORM 框架 spring-data-jpa 入门与实践
前言 伴随着 Java 诞生与发展,目前 Java 界涌现出了五花八门的数据访问技术,有一些名词甚至达到了耳熟能详的程度,包括 JDBC、JTA、JPA、ORM、MyBatis 等等,这篇介绍的是 Spring Data 项目中的 spring-data-jpa 框架,了解其他相关技术可以查阅我前面的文章。
0 0
Spring 加强版 ORM 框架 spring-data-jdbc 入门与实践
前言 Spring 为了支持以统一的方式访问不同类型的数据库,提供了一个 Spring Data 框架,这个框架根据不同的数据库访问技术划分了不同的模块。上篇 《Spring 加强版 ORM 框架 Spring Data 入门》 介绍了不同模块遵循的通用规范,这篇我们来介绍下基于 JDBC 技术实现的 spring-data-jdbc 模块。
0 0
大规模 Spring Cloud 微服务无损上下线探索与实践
软件迭代过程中,除了风险控制,在微服务领域还有一个常见的问题就是应用上下线过程中的流量治理,目的也比较明确,确保应用在发布、扩缩容、重启等场景时,不会损失任何业务流量损失。无损下线技术正是在这样的背景下应运而生的,他解决了变更过程中的业务流量损失问题,也是流量治理体系中非常重要的一个环节。无损下线功能有效地保证我们业务流量的平滑,提升了微服务开发的幸福度。
0 0
spring MVC实践需要注意的地方
spring MVC实践需要注意的地方
0 0
玩“公主焊接”,顺便学习学习数据库关系映射与Spring Boot中MyBatis(SSM框架)的级联操作(bushi)
玩“公主焊接”,顺便学习学习数据库关系映射与Spring Boot中MyBatis(SSM框架)的级联操作(bushi)
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
电商网站需求分析和架构设计Spring Boot2.6入门
立即下载
云上Docker的Spring Cloud微服务应用实践分享
立即下载
Spring Boot 2.6.0电商网站开发实战
立即下载


http://www.vxiaotou.com