Spring Cloud微服务体系的组成(三)

简介: Spring Cloud微服务体系的组成(三)

四、API网关与Zuul


一、初识API网关


1.

image.png


服务对外暴露


image.png


通过网关隐藏后端服务


2.使用网关的优点


统一访问出入口,微服务对前台透明

安全、过滤、流控等API管理功能

易于监控、方便管理


二、Spring Cloud API网关


1、API网关


image.png



2、API网关产品


Netflix Zuul

Spring Cloud Gateway


3、Netflix Zuul


Zuul 是Netflix开源的一个API网关, 核心实现是Servlet

Spring Cloud内置Zuul 1.x

Zuul 1.x 核心实现是Servlet,采用同步方式通信

Zuul 2.x 基于Netty Server,提供异步通信


4、Netflix Zuul架构演化


image.png


Netflix Zuul架构演化


5、Netflix Zuul的功能


认证和安全


性能监测


动态路由


负载卸载


静态资源处理


压力测试


6、Spring Cloud Gateway


Spring Cloud Gateway,是Spring“亲儿子”


Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式

Gateway基于Spring 5.0与Spring WebFlux开发,采用Reactor响应式设计


7、Netflix Zuul使用入门

1.使用三部曲


依赖spring-cloud-starter-netflix-zuul

入口增加 @EnableZuulProxy

application.yml 增加微服务映射


2.微服务映射


zuul:
  routes:
    book-service-api: #网关别名
      path: /bs/** #映射路径
      serviceId: book-service #微服务ID
    member-service-api:
      path: /ms/**
      serviceId: member-service
    ...


8、Zuul负载均衡与服务降级


Zuul负载均衡配置
Spring Cloud Zuul内置Ribbon,与标准配置相同
@Bean #全局配置
public IRule ribbonRule(){
    return new RandomRule();
}
局部配置
book-service: #目标微服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule


9、Zuul配置服务降级


Spring Cloud Zuul内置Hystrix


服务降级实现接口:FallbackProvider


10、基于RateLimit实现网关限流


1.微服务网关流量控制


微服务网关是应用入口,必须对入口流量进行控制

RateLimit是Spring Cloud Zuul的限流组件


https://github.com/marcosbarbero/spring-cloud-zuul-ratelimit

RateLimit采用“令牌桶”算法实现限流


2.什么是令牌桶


image.png


令牌桶示意图


3.RateLimit使用步骤


依赖spring-cloud-zuul-ratelimit

配置存储组件(关系数据库、redis、缓存...)

配置限流策略


11、Zuul的执行过程


1.Zuul的执行过程


image.png


Zuul的执行过程


2.Http请求生命周期


image.png

image.png


3.Zuul内置过滤器


image.png

image.png


12、自定义过滤器


1.需要实现ZuulFilter接口


shouldFilter() - 是否启用该过滤器

filterOrder() - 设置过滤器执行次序

filterType() - 过滤器类型:pre|routing|post

run() - 过滤逻辑


2.Zuul内置过滤器


image.png


Zuul内置过滤器


3.Zuul+JWT跨域身份验证


image.png


image.png


4.自定义Zuul过滤器


package com.itlaoqi.springcloud.zuul.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class SecurityFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }
    @Override
    public int filterOrder() {
        return 6;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() throws ZuulException {
        //从RequestContext获取上下文
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String token = request.getHeader("token");
        if (token == null || token.trim().equals("")) {
            //对该请求禁止路由,也就是禁止访问下游服务
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(403);
            ctx.setResponseBody("{\"status\":403,\"message\":\"Token not found\"}");
            return null;
        }else{
            //校验Token正确性代码
            //...
            ctx.setSendZuulResponse(true);
            ctx.setResponseStatusCode(200);
            return null;
        }
    }
}


五、springCloud配置中心


一、配置中心的分类


1.Spring Cloud Config

2.携程 Apollo

3.阿里巴巴Nacos


二、微服务改造步骤


1.依赖"spring-cloud-starter-config"

2.删除application.yml,新建bootstrap.yml

3.配置"配置中心"服务地址与环境信息


三、运行时刷新配置参数


1、微服务依赖"spring-boot-starter-actuator";

2、动态刷新类上增加@RefreshScope注解

3、通过/actuator/refresh刷新配置


四、Spring-Retry重试机制


1、通过加入重试机制、提高应用启动的可靠性;

2、重试触发条件1:配置中心无法与仓库正常通信

3、重试触发条件2:微服务无法配置中心正常通信


二、服务调用(Hystrix/Ribbon/OpenFeign)


三、路由与过滤(Zuul/Spring Cloud Gateway)


四、配置中心(Spring Cloud Config)


五、消息总线(Spring Cloud Stream/Spring Cloud Bus)


六、安全控制(Spring Cloud Security)


七、链路监控(Spring Cloud Sleuth)


八、其他工具(Spring Cloud Cli/Spring Cloud Cluster)


相关文章
|
2月前
|
算法 Java 微服务
【SpringCloud(1)】初识微服务架构:创建一个简单的微服务;java与Spring与微服务;初入RestTemplate
微服务架构是What?? 微服务架构是一种架构模式,它提出将单一应用程序划分为一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。 每个服务允许在其独立的进程中,服务于服务间采用轻量级的通信机制互相协作(通常是Http协议的RESTful API或RPC协议)。 每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建
504 126
|
2月前
|
负载均衡 算法 Java
【SpringCloud(2)】微服务注册中心:Eureka、Zookeeper;CAP分析;服务注册与服务发现;单机/集群部署Eureka;连接注册中心
1. 什么是服务治理? SpringCloud封装了Netfix开发的Eureka模块来实现服务治理 在传统pc的远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册
303 0
|
3月前
|
数据可视化 Java BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
226 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
3月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
471 127
|
3月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
|
3月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
283 0
|
2月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
2月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
3月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
258 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ

热门文章

最新文章