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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
7月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2204 10
|
7月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
578 2
|
8月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
6月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
6月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
480 8
|
7月前
|
监控 Kubernetes Cloud Native
Spring Batch 批处理框架技术详解与实践指南
本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
751 1
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
822 6
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
426 1
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1