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)


相关文章
|
29天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
53 2
|
2月前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
54 0
|
1月前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
29天前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
76 1
|
1月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
1月前
|
Java 数据库 数据安全/隐私保护
Spring 微服务提示:使用环境变量抽象数据库主机名
Spring 微服务提示:使用环境变量抽象数据库主机名
41 1
|
1月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
43 1
|
1月前
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
43 1
|
2月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
102 5
|
2月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
501 2