Skip to content

3)服务网关

🌱 第 1 题(基础认知)

Q1:什么是服务网关(API Gateway)?它的作用是什么?

📝 标准答案:

服务网关(API Gateway) 是一种反向代理服务,它在客户端与多个后端服务之间充当中介,负责接收客户端请求并将其转发到相应的微服务。服务网关是微服务架构中一个非常关键的组件,通常位于客户端与微服务之间。

主要作用:

  1. 路由请求:根据请求的 URL 或其他条件将请求转发给相应的微服务。
  2. 聚合服务:将多个后端服务的响应合并成一个统一的响应返回给客户端。
  3. 认证与授权:对请求进行认证,保证只有合法的请求能够访问服务。
  4. 负载均衡:将请求均匀地分发到多个后端服务实例。
  5. 限流与熔断:防止服务过载,保护系统的稳定性。
  6. 监控与日志记录:对流量进行监控、记录日志,便于后期分析。

🌿 第 2 题(架构设计)

Q2:服务网关通常应该如何与微服务架构集成?它与负载均衡和服务发现有何关系?

📝 标准答案:

服务网关通常位于客户端与微服务之间,充当所有外部请求的入口。它需要与负载均衡服务发现系统集成,以实现高效的请求转发和流量管理。

  1. 与负载均衡集成:服务网关会根据负载均衡策略(如轮询、加权等)将请求转发到多个微服务实例中。常见的做法是将负载均衡作为网关的一部分,或者由网关代理的负载均衡来完成请求分配。

  2. 与服务发现集成:服务网关通常需要与服务发现机制(如 Nacos、Consul)配合使用。通过服务发现,网关可以动态获取微服务的实例信息,避免硬编码微服务的 IP 地址和端口。当微服务的实例发生变化时,网关能够实时更新目标服务地址。

  3. 集成架构:网关可以通过配置文件或注册中心自动发现微服务地址,在请求时将请求转发到合适的服务实例。网关可以充当负载均衡器,将请求分发到可用的服务实例。

🌳 第 3 题(常见技术实现)

Q3:常见的服务网关技术有哪些?你对其中某一种有何看法或经验?

📝 标准答案:

常见的服务网关技术有:

  1. Nginx:通常作为反向代理服务器,用于路由请求、负载均衡、SSL 终止等。Nginx 可以结合 Lua 插件扩展为 API 网关功能,但它本身不提供深度的微服务支持。

  2. Kong:基于 Nginx 构建的 API 网关,支持高度可扩展的插件系统,提供认证、限流、日志、监控、负载均衡等功能。Kong 也可以通过与服务发现集成,实现动态路由。

  3. Zuul:由 Netflix 开发的 API 网关,支持动态路由、负载均衡、过滤器等功能。Zuul 与 Spring Cloud 紧密集成,适用于微服务架构。

  4. API Gateway(AWS):由 AWS 提供的完全托管型 API 网关服务,提供高可用的 RESTful API 服务,并且能够直接与 AWS 云服务集成,支持高并发的请求处理。

  5. Spring Cloud Gateway:基于 Spring WebFlux 实现的 API 网关,提供路由、负载均衡、限流、过滤器等功能。特别适合与 Spring Cloud 生态系统结合使用。

🌲 第 4 题(高可用性与扩展性)

Q4:如何确保服务网关的高可用性和扩展性?

📝 标准答案:

确保服务网关的高可用性和扩展性是微服务架构中的一个关键问题。

  1. 高可用性:

    • 多实例部署:通过在多个服务器上部署服务网关的多个实例,保证单点故障不会影响整个系统的可用性。
    • 负载均衡:结合负载均衡器(如 Nginx、HAProxy),将流量分配到不同的网关实例,避免流量过载。
    • 健康检查与自动化恢复:监控服务网关的健康状况,一旦发现某个实例故障,自动将流量切换到健康的实例。
    • 异地多活部署:将服务网关部署在不同的地理位置,保证在一个区域故障时,其他区域可以继续服务。
  2. 扩展性:

    • 水平扩展:通过增加服务网关的实例数量,确保可以处理更多的请求。
    • 无状态设计:服务网关通常是无状态的,可以轻松进行横向扩展。所有的状态信息应该存储在外部系统中,如 Redis 或数据库。
    • 微服务拆分:在业务复杂时,服务网关可以根据业务模块进行拆分,形成多个子网关,分别负责不同的路由和功能。

🪵 第 5 题(安全性)

Q5:如何确保服务网关的安全性?有哪些常见的安全措施?

📝 标准答案:

服务网关是微服务架构中暴露给外部的入口,确保它的安全性至关重要。常见的安全措施有:

  1. 身份认证与授权:

    • OAuth2.0、JWT:服务网关通常使用 OAuth2.0 和 JWT(JSON Web Token)来进行用户身份认证和授权。网关会验证请求中的 token,确保只有授权的用户才能访问后端服务。
    • API Key:某些情况下,可以通过 API Key 的方式来验证调用者的身份。
  2. 访问控制:

    • 使用 IP 白名单黑名单,限制特定 IP 的访问权限。
    • 对敏感接口进行访问控制,防止未授权的用户访问。
  3. 限流与防止 DDoS 攻击:

    • 使用限流技术,限制每个用户或每个 IP 地址的请求次数,避免恶意用户发送大量请求。
    • 速率限制熔断机制能够有效应对突发流量,防止 DDoS 攻击。
  4. SSL/TLS 加密:

    • 对外部与服务网关之间的通信使用 HTTPS 加密,确保数据在传输过程中不会被窃取。
  5. 日志审计与监控:

    • 通过日志记录用户请求,便于事后追踪和审计。
    • 实时监控 API 请求,及时发现潜在的安全威胁。

总结:

通过这五个问题,我们可以全面了解应聘者对 服务网关 的理解和经验,包括其基础知识、架构设计、技术实现、高可用性、扩展性和安全性等方面的能力。