当前位置: 首页 > article >正文

微服务面试题:服务网关和链路追踪

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

微服务面试题:服务网关和链路追踪

1. 服务网关

1.1 什么是 API 网关?

API 网关(API Gateway)是一种中间层服务器,用于集中管理、保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口来管理和控制 API 的访问。

在这里插入图片描述

API 网关的主要功能包括:

  1. 路由转发:API 网关根据请求的 URL 路径或其他标识,将请求路由到相应的后端服务。通过配置路由规则,可以灵活地将请求分发给不同的后端服务。
  2. 负载均衡:API 网关可以在后端服务之间实现负载均衡,将请求平均分发到多个实例上,提高系统的吞吐量和可扩展性。
  3. 安全认证与授权:API 网关可以集中处理身份验证和授权,确保只有经过身份验证的客户端才能访问后端服务。它可以与身份提供者(如 OAuth、OpenID Connect)集成,进行用户认证和授权操作。
  4. 缓存:API 网关可以缓存后端服务的响应,减少对后端服务的请求次数,提高系统性能和响应速度。
  5. 监控与日志:API 网关可以收集和记录请求的指标和日志,提供实时监控和分析,帮助开发人员和运维人员进行故障排查和性能优化。
  6. 数据转换与协议转换:API 网关可以在客户端和后端服务之间进行数据格式转换和协议转换,如将请求从 HTTP 转换为 WebSocket,或将请求的参数进行格式转换,以满足后端服务的需求。
  7. API 版本管理:API 网关可以管理不同版本的 API,允许同时存在多个 API 版本,并通过路由规则将请求正确地路由到相应的 API 版本上。

……

通过使用 API 网关,可以简化前端与后端服务的交互,提供统一的接口和安全性保障,同时也方便了服务治理和监控。它是构建微服务架构和实现 API 管理的重要组件之一。

1.2 SpringCloud 可以选择哪些 API 网关?

使用 SpringCloud 开发,可以采用以下的 API 网关选型:

  1. Netflix Zuul(已停止更新):Netflix Zuul 是 Spring Cloud 早期版本中提供的默认 API 网关。它基于 Servlet 技术栈,可以进行路由、过滤、负载均衡等功能。然而,自 2020 年 12 月起,Netflix 宣布停止对 Zuul 1 的维护,转而支持新的 API 网关项目。
  2. Spring Cloud Gateway:Spring Cloud Gateway 是 Spring Cloud 官方推荐的 API 网关,取代了 Netflix Zuul。它基于非阻塞的 WebFlux 框架,充分利用了响应式编程的优势,并提供了路由、过滤、断路器、限流等特性。Spring Cloud Gateway 还支持与 Spring Cloud 的其他组件集成,如服务发现、负载均衡等。
  3. Kong:Kong 是一个独立的、云原生的 API 网关和服务管理平台,可以与 Spring Cloud 集成。Kong 基于 Nginx,提供了强大的路由、认证、授权、监控和扩展能力。它支持多种插件和扩展,可满足不同的 API 管理需求。
  4. APISIX:APISIX 基于 Nginx 和 Lua 开发,它具有强大的路由、流量控制、插件扩展等功能。APISIX 支持灵活的配置方式,可以根据需求进行动态路由、负载均衡和限流等操作。

……

1.3 Spring Cloud Gateway 核心概念?

在这里插入图片描述

在 Spring Cloud Gateway 里,有三个关键组件:

  • Route(路由):路由是 Spring Cloud Gateway 的基本构建块,它定义了请求的匹配规则和转发目标。通过配置路由,可以将请求映射到后端的服务实例或 URL 上。路由规则可以根据请求的路径、方法、请求头等条件进行匹配,并指定转发的目标 URI。
  • Predicate(断言):断言用于匹配请求的条件,如果请求满足断言的条件,则会应用所配置的过滤器。Spring Cloud Gateway 提供了多种内置的断言,如 Path(路径匹配)、Method(请求方法匹配)、Header(请求头匹配)等,同时也支持自定义断言。
  • Filter(过滤器):过滤器用于对请求进行处理和转换,可以修改请求、响应以及执行其他自定义逻辑。Spring Cloud Gateway 提供了多个内置的过滤器,如请求转发、请求重试、请求限流等。同时也支持自定义过滤器,可以根据需求编写自己的过滤器逻辑。

我们再来看下 Spring Cloud Gateway 的具体工作流程:

SpringCloud工作流程图-来源官方文档

又有两个比较重要的概念:

  • Gateway Handler(网关处理器):网关处理器是 Spring Cloud Gateway 的核心组件,负责将请求转发到匹配的路由上。它根据路由配置和断言条件进行路由匹配,选择合适的路由进行请求转发。网关处理器还会依次应用配置的过滤器链,对请求进行处理和转换。
  • Gateway Filter Chain(网关过滤器链):网关过滤器链由一系列过滤器组成,按照配置的顺序依次执行。每个过滤器可以在请求前、请求后或请求发生错误时进行处理。过滤器链的执行过程可以修改请求、响应以及执行其他自定义逻辑。

2. 链路追踪

2.1 为什么要用微服务链路追踪?

在微服务中,有的山下游可能有十几个服务,如果某一环出了问题,排查起来非常困难,所以,就需要进行链路追踪,来帮助排查问题。

SkyWalking界面

通过链路追踪,可以可视化地追踪请求从一个微服务到另一个微服务的调用情况。除了排查问题,链路追踪黑还可以帮助优化性能,可视化依赖关系、服务监控和告警。

2.2 SpringCloud 可以选择哪些微服务链路追踪方案?

Spring Cloud 提供了多种选择的微服务链路追踪方案。以下是一些常用的方案:

  1. Zipkin:Zipkin 是一个开源的分布式实时追踪系统,由 Twitter 开发并贡献给开源社区。Spring Cloud Sleuth 提供了与 Zipkin 的集成,可以通过在微服务中添加相应的依赖和配置,将追踪信息发送到 Zipkin 服务器,并通过 Zipkin UI 进行可视化展示和查询。

Zipkin界面

  1. Jaeger:Jaeger 是 Uber 开源的分布式追踪系统,也被纳入了 CNCF(云原生计算基金会)的维护。通过使用 Spring Cloud Sleuth 和 Jaeger 客户端库,可以将追踪信息发送到 Jaeger 并进行可视化展示和查询。
  2. SkyWalking:Apache SkyWalking 是一款开源的应用性能监控与分析系统,提供了对 Java、.NET 和 Node.js 等语言的支持。它可以与 Spring Cloud Sleuth 集成,将追踪数据发送到 SkyWalking 服务器进行可视化展示和分析。

SkyWalking示例界面

  1. Pinpoint:Pinpoint 是 Naver 开源的分布式应用性能监控系统,支持 Java 和 .NET。它提供了与 Spring Cloud Sleuth 的集成,可以将追踪数据发送到 Pinpoint 服务器,并通过其 UI 进行分析和监控。

Pinpoint示意图

这些方案都可以与 Spring Cloud Sleuth 进行集成,Spring Cloud SleuthSpring Cloud 中的一个组件,提供了在微服务调用时生成追踪信息的能力。


http://www.kler.cn/a/578143.html

相关文章:

  • 运行OpenManus项目(使用Conda)
  • 高效运行 QwQ-32B + 错误修复
  • java项目springboot 项目启动不了解决方案
  • 服务器配置完成后如何启动或者终止java后端,相关运行文件如下:
  • 大白话react第十八章
  • openharmory-鸿蒙生态设备之间文件互传发现、接入认证和文件传输
  • 用java如何利用jieba进行分词
  • STM32旋转编码器驱动详解:方向判断、卡死处理与代码分析 | 零基础入门STM32第四十八步
  • 算法系列之深度优先搜索寻找妖怪和尚过河问题的所有方式
  • 自执行函数(Self-Invoking Function)
  • Vue2使用jsts,将wkt转为geojson
  • 计算机网络篇:基础知识总结与基于长期主义的内容更新
  • 【问题解决】Jenkins使用File的exists()方法判断文件存在,一直提示不存在的问题
  • webshell一些上传心得
  • 代理IP与反爬技术的博弈
  • mysql经典试题共34题
  • UDP协议和报文格式
  • Redis | 哨兵 Sentinel
  • Java高频面试之集合-07
  • LeetCode 90: 子集 II