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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: SpringCloud是Spring官方推出的微服务治理框架,是一个基于Spring Boot框架实现的微服务架构开发工具集,其提供了完整的微服务解决方案,包括:服务治理、注册中心、配置管理、熔断器、服务路由等等。

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提供了诸多默认的核心过滤器,这些过滤器在网关服务启动时被自动加载和启用,也可以根据业务需要自定义实现过滤器。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
17天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
121 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
5天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
98 7
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
249 13
Spring Cloud Alibaba:一站式微服务解决方案
|
23天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
91 3
|
1月前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
59 14
|
1月前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
67 8
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
150 5
|
1月前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
85 2
|
2月前
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
65 5
|
2月前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
57 5