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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 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)


相关文章
|
16天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
120 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
177 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
248 13
Spring Cloud Alibaba:一站式微服务解决方案
|
18天前
|
Java 关系型数据库 Nacos
微服务SpringCloud链路追踪之Micrometer+Zipkin
SpringCloud+Openfeign远程调用,并用Mircrometer+Zipkin进行链路追踪
160 20
|
7天前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
25 1
|
18天前
|
运维 监控 Java
为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案
本文记录并复盘了生产环境中Spring Boot应用内存占用过高的问题及解决过程。系统上线初期运行正常,但随着业务量上升,多个Spring Boot应用共占用了64G内存中的大部分,导致应用假死。通过jps和jmap工具排查发现,原因是运维人员未设置JVM参数,导致默认配置下每个应用占用近12G内存。最终通过调整JVM参数、优化堆内存大小等措施解决了问题。建议在生产环境中合理设置JVM参数,避免资源浪费和性能问题。
48 3
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
38 6
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
149 5
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
62 5