10、架构-从类库到服务之网关路由

目录

概述 

主要概念

网关的定义与重要性

历史背景

网关的发展与演变

技术细节

网关的职责

路由功能

过滤功能

实现网关的技术选择

四层和七层网关

性能与可用性

网络I/O模型

BFF网关

实际应用

常见的网关实现框架

常见问题及解决方案

结论


概述 

       网关(Gateway)这个词在计算机科学中,尤其是在计算机网络中 很常见,用于表示位于内部区域边缘,与外界进行交互的某个物理或 逻辑设备,譬如你家里的路由器就属于家庭内网与互联网之间的网 关

主要概念

网关的定义与重要性

网关路由在分布式系统和微服务架构中扮演着至关重要的角色。它不仅作为不同服务之间的通信桥梁,还承担着流量管理、安全控制和其他重要职能。网关的主要功能包括:

  • 路由:将外部请求路由到内部服务。网关根据预定义的规则或策略,决定如何处理和转发客户端请求。
  • 安全性:提供身份验证和授权控制。通过集成OAuth、JWT等机制,确保只有经过认证和授权的用户才能访问服务。
  • 流量管理:实现负载均衡、限流等功能。通过智能路由和流量分配,优化系统资源使用,防止单点过载。
  • 监控:记录和分析请求和响应数据。通过日志和监控系统,提供系统健康状态和性能指标。
  • 协议转换:在不同的协议之间进行转换。例如,将HTTP请求转换为HTTPS,以确保数据传输的安全性。

这些功能使网关成为微服务架构中不可或缺的一部分,简化了服务调用,增强了系统的可管理性和安全性。

历史背景

网关的发展与演变

在单体架构中,我们通常不强调网关的概念,各个单体系统通过负载均衡器实现流量分发。然而,随着微服务架构的兴起,网关的重要性显著提升。

早期的网关实现主要通过硬件负载均衡器或基于DNS的方式实现简单的流量分发。这些方法在一定程度上解决了流量分配的问题,但由于缺乏灵活性和扩展性,难以满足现代复杂应用的需求。

随着云计算和容器化技术的发展,软件定义的网关逐渐成为主流。软件定义网关不仅具备基本的路由功能,还能提供丰富的扩展功能,如动态配置、弹性伸缩和实时监控等。典型的例子包括Nginx、HAProxy、Kong、Spring Cloud Gateway和Netflix Zuul等开源网关。

这些网关解决方案随着时间的推移不断演化,逐渐集成了更多高级功能,如服务发现、分布式跟踪、断路器模式等,极大地提升了微服务架构的可维护性和可靠性。

技术细节

网关的职责

路由功能

网关的核心职责是路由。它接收来自外部的请求,并根据配置将请求转发到适当的内部服务。路由的实现可以基于多种策略,如路径匹配、负载均衡、权重分配等。

示例配置:

routes:account:path: /restful/accounts/**serviceId: accountstripPrefix: falsesensitiveHeaders: "*"payment:path: /restful/pay/**serviceId: paymentstripPrefix: falsesensitiveHeaders: "*"

在这段配置中,/restful/accounts/**路径的请求会被路由到名为account的服务,/restful/pay/**路径的请求会被路由到名为payment的服务。这种配置方式通过简单的YAML文件实现,极大地方便了服务路由规则的定义和管理。

过滤功能

在提供路由功能的基础上,网关还可以充当过滤器,执行以下任务:

  • 身份验证和授权:网关可以集成OAuth、JWT等认证机制,确保只有经过认证的用户才能访问服务。这不仅提升了系统的安全性,还简化了服务自身的安全逻辑。
  • 限流:通过设置请求速率限制(Rate Limiting),防止某个服务被过度访问,保护系统免受流量激增的影响。这对于防止DDoS攻击和保证系统稳定性至关重要。
  • 日志记录和监控:网关可以记录所有通过的请求和响应信息,提供详细的访问日志和性能监控数据。结合ELK(Elasticsearch、Logstash、Kibana)等日志分析工具,可以实现对系统的全面监控和快速故障排除。
  • 缓存:网关可以缓存频繁访问的请求结果,减少对后端服务的负担,提高系统的响应速度和性能。例如,对于静态内容或频繁查询的资源,缓存机制可以显著减少后端服务器的负载。

这些扩展功能使网关不仅仅是一个简单的路由器,而是一个全面的流量管理器。

实现网关的技术选择

四层和七层网关

根据工作在OSI模型的不同层次,网关可以分为四层网关和七层网关。

  • 四层网关:基于IP和TCP/UDP协议,适用于简单的流量转发,性能高但功能较少。四层网关直接操作网络包,不关心应用层协议的具体内容,通常用于需要高性能和低延迟的场景。
    • Nginx:可以配置为四层负载均衡器,处理TCP和UDP流量。
  • 七层网关:基于HTTP等高级协议,能够根据URL、Header等信息进行路由,功能强大但性能相对较低。七层网关能够解析和操作应用层数据,提供更细粒度的流量控制和管理功能。
    • Nginx:也可以作为七层负载均衡器,处理HTTP流量,提供更细粒度的控制。
    • Kong:一个强大的开源API网关,支持丰富的插件系统。
    • Spring Cloud Gateway:基于Spring生态系统,集成了很多Spring Cloud的特性。

四层网关示例:

  • 四层负载均衡器:类似银行的自助排号机,转发效率高。
  • 七层负载均衡器:类似银行大堂经理,根据客户需求进行路由,提供更细粒度的控制。

性能与可用性

网关的性能与其工作模式和实现算法密切相关。常见的工作模式包括:

  • 代理模式:网关代理客户端请求,并将其转发到后端服务。这种模式下,所有的请求和响应都通过网关,能够提供全面的监控和控制,但可能会成为性能瓶颈。
  • DSR(三角传输)模式:请求经由负载均衡器转发到后端服务,响应直接返回客户端,不经过负载均衡器。这种模式减少了负载均衡器的压力,但增加了实现的复杂性。

在选择网关实现时,应考虑以下几点:

  • 轻量化:避免过多附加功能以保证性能。尽量选择功能齐全但不冗余的网关解决方案。
  • 成熟性:选择经过长期考验的产品,如Nginx、KONG、Zuul等,这些产品在实际应用中表现稳定且具有丰富的社区支持。
  • 高可用性:在生产环境中,网关前应部署负载均衡器或等价路由器,以提高系统的可用性。通过冗余部署和自动故障转移机制,确保网关的高可用性和可靠性。

网络I/O模型

网关的性能在很大程度上取决于其网络I/O模型。常见的网络I/O模型包括:

  • 阻塞I/O:每个请求由一个线程处理,简单但不适用于高并发场景。阻塞I/O模型由于每个请求都会占用一个线程,在高并发情况下容易导致线程资源耗尽。
  • 非阻塞I/O:通过事件驱动机制处理请求,适用于高并发场景。非阻塞I/O模型不需要为每个请求分配一个独立线程,通过事件通知机制,可以高效处理大量并发请求。
  • 异步I/O:请求处理不需要等待I/O操作完成,可以提高系统的并发处理能力。异步I/O模型通过回调或Future机制,进一步优化了I/O操作的效率,适用于需要处理大量并发和长时间I/O操作的场景。

以Nginx为例,它采用了基于事件驱动的非阻塞I/O模型,能够高效处理大量并发请求。Nginx通过epoll、kqueue等高效的I/O多路复用机制,提供了卓越的性能和可扩展性。

BFF网关

BFF(Backend for Frontend)是近年来随着微服务一起兴起的概念,指的是网关不必为所有前端提供无差别的服务,而是针对不同的前端,聚合不同的服务,提供不同的接口和网络访问协议支持。

例如:

  • 针对Web端,提供基于HTTP协议的REST服务。
  • 针对移动端,提供基于更高性能协议(如gRPC)的接口。

BFF模式有助于后端服务的稳定性和前端服务的优化,提高用户体验。通过为不同前端提供专门优化的API,可以减少前端应用的复杂性和请求次数,提高响应速度和用户体验。

实际应用

常见的网关实现框架

  1. Nginx

    • 优点:成熟稳定、性能高、配置灵活。Nginx作为一个高性能的HTTP服务器和反向代理服务器,广泛应用于各类互联网服务。
    • 缺点:需要手动配置,功能扩展性相对有限。虽然Nginx支持通过第三方模块进行功能扩展,但相比于专门的API网关,扩展能力和易用性稍显不足。
  2. Kong

    • 优点:插件系统丰富,易于扩展,支持多种认证方式。Kong基于OpenResty,提供了强大的可扩展性和灵活性,通过插件系统可以方便地实现各种高级功能。
    • 缺点:需要较高的学习曲线,性能在高并发场景下需要优化。Kong的灵活性和丰富功能带来了复杂性,初次使用时需要一定的学习和配置成本。
  3. Spring Cloud Gateway

    • 优点:与Spring生态系统无缝集成,配置简单。Spring Cloud Gateway继承了Spring框架的优良传统,通过简单的配置即可实现复杂的路由和过滤逻辑,非常适合Spring生态系统中的应用。
    • 缺点:性能在某些场景下可能不如Nginx和Kong。由于Spring Cloud Gateway是基于Spring WebFlux实现的,虽然具备良好的响应式编程模型和扩展性,但在极端高并发场景下可能存在性能瓶颈。
  4. Zuul

    • 优点:Netflix开源项目,与Spring Cloud集成良好。Zuul作为Netflix开源的API网关,具有成熟的生态系统和社区支持,特别适合与Spring Cloud的集成使用。
    • 缺点:Zuul 1.x基于阻塞I/O模型,性能在高并发场景下有限。虽然Zuul 2.x引入了非阻塞I/O模型,但由于仍处于发展阶段,稳定性和功能完备性尚需进一步验证。

常见问题及解决方案

  1. 性能瓶颈:在高并发场景下,网关可能成为性能瓶颈。

    • 解决方案:使用非阻塞I/O模型或异步I/O模型的网关,合理配置线程池和连接池。通过水平扩展和负载均衡,分散网关的负载,确保系统能够应对高并发请求。
  2. 单点故障:如果网关宕机,会导致整个系统不可用。

    • 解决方案:部署多实例网关,使用负载均衡器进行流量分发,保证高可用性。通过健康检查和自动故障转移机制,确保系统在网关故障时能够快速恢复和继续服务。
  3. 安全问题:网关作为入口点,容易成为攻击目标。

    • 解决方案:实施严格的安全策略,启用身份验证和授权控制,使用WAF(Web应用防火墙)防护。通过配置防火墙和DDoS防护策略,保护系统免受恶意攻击和流量冲击。
  4. 配置复杂性:网关配置可能非常复杂,尤其是在大型系统中。

    • 解决方案:使用配置管理工具(如Consul、Spring Cloud Config),简化配置管理。通过集中配置管理和自动化部署工具,减少手工配置的错误和维护成本,提高系统的可维护性和一致性。

结论

网关路由是微服务架构中的关键技术,通过合理设计和实现网关,可以提高系统的性能和可用性,简化服务调用复杂度,并提供额外的安全和监控功能。选择适合的网关实现方案和I/O模型,可以有效应对不同的业务需求,构建可靠的大型分布式系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型零售企业总部到分公司数据发放,有没有更优化的方案?

大型零售企业在市场经济中扮演重要角色,是保证基础商品生产、流通和供给的重要一环。随着企业发展,很多大型零售企业都会在全国、乃至全球各地开设分公司,用以降低生产和运营成本,更好地提供本地化服务。 为了保证总部与分公司间信…

Linux环境---在线安装jdk

Linux环境—在线安装jdk 一、使用步骤 1.安装环境 JDK版本:1.8 1.1 建立存放软件的目录 注意:此处本人是将需要按照的软件存放在directory目录下,可根据实际情况调整接收路径。 命令如下: mkdir directory2.安装jdk 2.1 建…

解决Spark流处理产生的小文件问题

做流批一体,湖仓一体的大数据架构,常见的做法就是: 数据源->spark Streaming->ODS(数据湖)->spark streaming->DWD(数据湖)->... 那么数据源->spark Streaming->ODS&…

【Selenium+java环境配置】(超详细教程常见问题解决)

Seleniumjava环境配置 windows电脑环境搭建-chrome浏览器1. 下载chrome浏览器2. 查看chrome浏览器版本3. 下载chrome浏览器驱动4.配置系统环境变量PATH 验证环境是否搭建成功1. 创建java项目,添加pom文件中添加依赖2. 编写代码运行 常见问题&解决办法1.访问失败…

Python 脚本打包

打包 为什么要打包 当你想将Python脚本给别人用时,怎么办?Python运行依赖相关的环境,因此将脚本打包成exe,直接运行exe即可 怎么打包 本文介绍的方法是Pyinstaller Pyinstaller 安装 想要使用,必须保证该模块存…

移动端 UI 风格,魅力无限

移动端 UI 风格,打造极致体验

Django分页

1、在视图函数文件中引入‘分页器’ from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 2、给原来的罗列信息函数,添加分页功能,即按照页码,只返回部分信息。 login_required def article_list(request):article…

【因果推断python】21_匹配2

目录 匹配估计器 匹配估计器 子分类估计器在实践中用得不多(我们很快就会明白为什么,主要是因为维度诅咒这个原因),但它让我们很好地、直观地了解了因果推理估计器应该做什么,以及它应该如何控制混淆因素。这使我们能…

Yuan 2.0-M32 是一个基于 Yuan 2.0 架构的双语混合专家 (MoE) 语言模型,旨在以更少的参数和计算量实现更高的准确率

主要创新点: 注意力路由器 (Attention Router): 提出了一种新的路由器网络,考虑了专家之间的相关性,从而提高了模型的准确率。高效计算: 使用 MoE 架构,40B 总参数中仅有 3.7B 激活参数,训练计算消耗仅为同…

Python_ 爬楼梯

假设小明爬楼梯,要爬10层,每次他爬1层或者2层。爬完10层他有几种爬法。 第一层1种,1 第二层2种,2 第三层3种 111 12 21 第四层5种 1111 112 121 211 22 …

大模型创新企业集结!百度智能云千帆AI加速器Demo Day启动

新一轮技术革命风暴席卷而来,为创业带来源源不断的创新动力。过去一年,在金融、制造、交通、政务等领域,大模型正从理论到落地应用,逐步改变着行业的运作模式,成为推动行业创新和转型的关键力量。 针对生态伙伴、创业…

IDEA破解后的配置

以下所有操作都要求进入全局setting而不是某一个项目的setting 进入全局Setting File→close project 进入欢迎页面 低版本 然后点击Setting 关闭自动更新 不关闭有可能会破解失败 Appearance & Behavior->System Settings->Updates下取消Automatically chec…

Vite+Vant4中Toast轻提示等组件无法展示的问题

Vant4官方文档 在开发过程中,发现vant4部分组件展示不出,例如Toast轻提示,在使用showFailToast()方法的时候,只是弹出个小白框,并没有提示信息,查阅资料之后得出其解决方案如下: 在vite.config…

debian系统apt 国内安装源

debian系统apt 国内安装源: 国内阿里镜像源: deb http://mirrors.aliyun.com/debian stable main non-free contrib deb-src http://mirrors.aliyun.com/debian stable main non-free contrib 打开源文件位置:/etc/apt/sources.list,原来的内…

240520Scala笔记

240520Scala笔记 第 7 章 集合 7.1 集合1 数组Array 集合(Test01_ImmutableArray): package chapter07 ​ object Test01_ImmutableArray {def main(args: Array[String]): Unit {// 1. 创建数组val arr: Array[Int] new Array[Int](5)// 另一种创建方式val arr2 Array(…

eNSP学习——RIP路由协议的汇总

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、配置RIPv1协议 3、配置RIPv2自动汇总 4、配置RIPv2手动汇总 需要eNSP各种配置命令的点击链接自取:华为eNSP各种设备配置命令大全PDF版_ensp配置命令大全…

蓝桥杯物联网竞赛 比赛总结

CUBEMX配置建议: 对于CUBEMX配置来说stm32l071kbu6的引脚不算太多,功能模块相对的也不多,所以我建议直接熟练到能将所有模块烂熟于心,不用看原理图就能熟练配置下来,因为国赛看原理图去配置太花费时间 我建议学习的时…

小程序 UI 风格,赏心悦目

小程序 UI 风格,赏心悦目

数组知识点

基本概念 数组是存储一组相同类型数据的集合。 数组分为一维、多维、交错数组。 一般情况,一维数组就简称为数组。 数组的申明 变量类型[] 数组名; 只是申明了一个数组,但是并没有开房。 int[] arr1; 变量类型[] 数组名 new 变量类型[数组的长度…

英语阅读文章

0104 NASA 的月球基地 NASA Advance Lunar Construction Technology for Moon Missions Maker Faire Rome, Published Dec. 14, 2022 One step closer to the first-ever construction on the Moon NASA – National Aeronautics and Space Administration has granted ICON …