查看原文
其他

面试官:你了解的网关有哪些?

The following article is from 面试鸭 Author 编程导航-小白条

引言:在微服务项目中,网关是必不可少的一个部分,在 SpringCloud 全家桶中 SpringCloudGateWay 是重要组成部分,但只了解一种网关,或者说只实践过一种网关,却没有把网关知识做一个整理,这是不健全的,这是技术选型的一部分,需要好好打造,本期文章就来详细介绍一下网关方面的知识。

题目

面试官:你了解的网关有哪些?详细讲讲?

推荐解析

网关的作用是什么?

1)路由转发

2)负载均衡(Ribbon)

3)统一鉴权(权限处理)

4)跨域处理(CORS)

5)统一业务处理(类似 AOP 抽取统一逻辑,缓存等等)

6)访问权限控制(黑白名单)

7)发布控制(灰度发布)

8)流量染色(未经过网关的,不加特殊请求头,在下游服务直接拒绝)

9)接口保护(限流,信息脱敏,降级(熔断),超时时间,重试服务)

10)统一日志

11)统一文档处理(结合 knife4j)

流量网关与服务网关的区别

流量网关(Nginx)提供是全局性的,和业务无关的策略,比如 HTTPS 证书,Web 防火墙,全局流量监控等等。

微服务网关(Spring Cloud GateWay) 是与业务息息相关的,提供业务级别的某种策略,权限校验,统一业务抽取等等,相对来说要跟细致针对某一业务。

常见的网关有哪些?

Spring Cloud Gateway

官网地址:https://spring.io/projects/spring-cloud-gateway/

为了替换掉 Zuul 1,因此产生了 SpringCloud GateWay,Spring Cloud GateWay 是基于 SpringWebFlux 的,使用 Reactor 库实现响应式编程,基于 Netty 实现了 NIO。

Spring Cloud GateWay 的 RPS(每秒请求数)是 Zuul1 的 1.6 倍。

Zuul1 是基于 Servlet 的,阻塞 IO,不支持长连接,因此 WebSocket 这种直接就不支持,性能比较差。

Zuul2 是升级版,基于 Netty 非阻塞和支持长连接,但由于升天问题,没有去让 Spring Cloud 集成, Zuul 维护这块也比较尴尬,因此一般都会直接选择 SpringCloud GateWay。

OpenResty

官网地址:https://openresty.org/en/

OpenResty 基于 Nginx,采用 C 语言开发,因此学习成本比较高,总体来说需要用 C+Lua 脚本才可以扩展网关的功能,自定义路由规则、过滤器等等。

Kong

官网地址:https://konghq.com/products/kong-gateway

基于 OpenResty(Nginx+Lua)的网关系统

重要组件

1)Kong Server:基于 Nginx 的服务器。

2)Apache Cassandra:存储数据

3)Kong DashBoard:UI 管理工具。

优势:可以用 Go、Java Script、Python 等语言进行开发插件。

APISIX

APISIX 是一个开源的云原生微服务API网关,它由 Apache APISIX 社区维护和推动。作为一个高性能、可扩展、可插拔的网关,APISIX 提供了丰富的功能和灵活的配置选项,可以帮助开发人员在微服务架构中实现流量控制、访问控制、路由转发、负载均衡、限流、熔断、服务发现等功能。

1)高性能:APISIX 采用基于 Nginx 的架构,利用 Nginx 的高性能和高并发处理能力,能够处理大规模的请求流量。

2)可扩展性:APISIX 支持动态加载插件,用户可以根据自己的需求选择合适的插件来扩展网关的功能,例如自定义认证、限流策略等。

3)高度灵活的配置:APISIX 提供了易于使用和理解的 YAML 配置文件格式,使得开发人员可以轻松配置和管理 API 网关的各种功能。

4)多种路由策略:APISIX 支持多种路由策略,包括基于路径、域名、请求头、请求方法等的路由规则,可以根据不同的规则将请求转发到不同的后端服务。

5)强大的插件生态系统:APISIX 拥有丰富的插件生态系统,包括认证插件、限流插件、熔断插件、日志插件等,可以根据具体需求选择合适的插件来增强网关的功能。

总结

Java 开发语言,肯定是首先 SpringCloud 全家桶的 Spring Cloud GateWay,生态良好,而且成熟稳定。性能相对稳定,但高性能还是选 Kong 之类的,但相对学习成本就高,需要有一个技术大牛去领导技术团队。

APISIX 是用 etcd 做配置中心的(编程导航星球最新一期的手写 RPC 教程中有教过)不存在单点问题。

APISIX 支持热更新,Kong 不支持。

性能上, APISIX > Kong。

其他补充

鱼聪明 AI 的回答:

鱼聪明 AI 地址:https://www.yucongming.com/

网关(Gateway)是位于客户端和后端服务之间的中间层,用于处理和转发请求、提供安全性、控制访问、监控和管理流量等功能。它起到了连接客户端和后端服务的桥梁作用,可以有效地管理和控制请求的流量,并提供一致的接口和安全性保障。

常见的具体网关有以下几种,它们的优缺点和使用场景如下:

  1. Nginx:
  • 优点:高性能、高并发处理能力;支持反向代理、负载均衡、静态文件服务等功能;灵活配置和易于扩展。
  • 缺点:不支持动态路由和动态配置;缺乏专门的API管理功能。
  • 使用场景:静态文件服务、反向代理、负载均衡。
  • Kong:
    • 优点:基于Nginx构建,具有高性能和高可扩展性;支持插件化开发,提供丰富的功能扩展;支持动态路由、流量控制、认证授权等功能。
    • 缺点:部分高级功能需要付费使用。
    • 使用场景:API管理、流量控制、认证授权。
  • APISIX:
    • 优点:基于Nginx构建,具有高性能和高可扩展性;支持插件化开发,提供丰富的功能扩展;支持动态路由、流量控制、认证授权等功能。
    • 缺点:相对较新的项目,社区生态相对较小。
    • 使用场景:API管理、流量控制、认证授权。
  • Spring Cloud Gateway:
    • 优点:基于Spring Cloud构建,与Spring生态紧密集成;支持动态路由、过滤器、负载均衡等功能;提供了可视化的管理界面。
    • 缺点:相对较重量级,对于小型项目可能过于复杂。
    • 使用场景:微服务架构、API管理、动态路由。
  • Istio:
    • 优点:基于Envoy构建,具有高性能和高可扩展性;提供了强大的流量管理、安全性和可观察性功能;支持动态路由、负载均衡、熔断等。
    • 缺点:相对复杂,对于小型项目可能过于臃肿。
    • 使用场景:微服务架构、流量管理、安全性保护。

    根据具体需求和场景,选择合适的网关非常重要。如果需要简单的反向代理和负载均衡功能,Nginx 是一个不错的选择。如果需要更丰富的API管理和流量控制功能,Kong 和 APISIX 是比较适合的选项。而对于基于 Spring 生态或 Istio 的项目,Spring Cloud Gateway 和 Istio 提供了更全面的功能和集成能力。

    欢迎交流

    在阅读完本文后,你应该对网关的作用和常见的网关有了一定的了解,具体网关的实践是需要深入打磨的,需要自己去参考官网文档进行手动的实践,在文末我将提出三个问题,欢迎小伙伴在评论区进行回答!

    1)如何保证网关的高可用性和性能?

    2)在使用网关时,应该考虑哪些因素?

    3)网关如何处理大规模的流量和高并发请求?有哪些优化策略和技术可以应用?

    点燃求职热情!每周持续更新,海量面试题等你挑战!赶紧关注面试鸭公众号,轻松备战春招和暑期实习!


    往期推荐

    面试官:Redis 持久化机制你都不了解吗?。。

    面试官:Redis 的跳表你了解多少?。。

    面试官问我 Atomiclnteger 原理是什么、怎么用 CAS 在代码中,我一顿猛烈输出

    Redis 三种高效缓存读写策略你了解吗?

    没懂 synchronized 底层如何实现和锁的升降级,被面试官暴打一顿

    别再被面试官吓到了,让我带你了解 synchronized 和 ReentrantLock 的区别

    继续滑动看下一个
    向上滑动看下一个

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存