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

什么是API网关(API Gateway)?

1. 什么是API网关(API Gateway)?

         在微服务体系结构中,客户端可能与多个前端服务进行交互。 

        API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例如身份验证、SSL 终止和速率限制。 如果未部署网关,则客户端必须直接向前端服务发送请求。 但是,直接向客户端公开服务会造成一些潜在问题:

  • 可能需要编写复杂的客户端代码。 客户端必须跟踪多个终结点,并以弹性方式处理故障。
  • 会在客户端与后端之间造成耦合。 客户端需要知道如何分解各个服务。 因此,客户端维护和服务重构会变得更困难。
  • 单个操作可能需要调用多个服务。 这可能导致客户端和服务器之间的多次网络往返,从而显著增加了延迟时间。
  • 每个面向公众的服务必须处理身份验证、SSL 和客户端速率限制等问题。
  • 服务必须公开客户端友好的协议,例如 HTTP 或 WebSocket。 这就限制了通信协议的选择。
  • 包含公共终结点的服务是潜在的受攻击面,必须得到强化。

        网关可以通过将客户端与服务分开,来帮助解决这些问题。 网关可以执行许多不同的功能,但我们不一定需要所有这些功能。 这些功能可划分到以下设计模式:

  • 网关路由: 使用网关作为反向代理,通过第 7 层路由将请求路由到一个或多个后端服务。 网关为客户端提供单一终结点,可帮助将客户端与服务分开。
  • 网关聚合:使用网关可将多个单独请求聚合成一个请求。 当单个操作需要调用多个后端服务时,可以应用此模式。 客户端将一个请求发送到网关。 网关会将请求分派到不同的后端系统,然后聚合结果并将其发回给客户端。 这有助于减少客户端与后端之间的通信频率。
  • 网关卸载:使用网关可将单个服务的功能卸载到网关,尤其适合用于解决横切问题。 可能有效的做法是将这些功能整合到一个位置,而不是让每个服务负责实现这些功能。 对于需要专业技能才能正确实现的功能(例如身份验证和授权),这种做法尤其有效。

        下面是可卸载到网关的一些功能示例:

  • SSL 终止
  • Authentication
  • IP 允许列表或阻止列表
  • 客户端速率限制(限制)
  • 日志记录和监视
  • 响应缓存
  • Web 应用程序防火墙
  • GZIP 压缩
  • 为静态内容提供服务

2.选择网关技术

        现在的一些网关技术:traefix、Nginx、OpenResty、Kong、Zuul、Spring Cloud Gateway等。下面主要介绍traefix、Nginx、OpenResty三种网关技术。

2.1traefix

        Træfɪk 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理、负载均衡工具。它支持多种后台 (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 来自动化、动态的应用它的配置文件设置。

        重要特性:

  • 它非常快,无需安装其他依赖,通过Go语言编写的单一可执行文件;
  • 多种后台支持:Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd;
  • 支持支持Rest API、Websocket、HTTP/2、Docker镜像;
  • 监听后台变化进而自动化应用新的配置文件设置;
  • 配置文件热更新,无需重启进程;
  • 后端断路器、负载均衡、容错机制;
  • 清爽的前端页面,可监控服务指标。

 2.2Nginx

        Nginx是⼀款轻量级的Web服务器、反向代理服务器,由于它的内存占⽤少,启动极快,⾼并发能⼒强,在互联⽹项⽬中⼴泛应⽤。一般Nginx的上层还有一个负载均衡器,如LVS,对Nginx做负载均衡。

        重要特性:

  1. Nginx以事件驱动的⽅式编写,所以有⾮常好的性能;
  2. 在性能上,Nginx占⽤很少的系统资源,能⽀持更多的并发连接,达到更⾼的访问效率;
  3. 在功能上,Nginx是优秀的代理服务器和负载均衡服务器;
  4. 在安装配置上,Nginx安装简单、配置灵活;
  5. Nginx支持热部署,启动速度特别快,可以在不间断服务的情况下对软件版本或配置进行升级;nginx -s reload。

        在微服务的体系之下,Nginx被越来越多的项目所采用,作为网关来使用,配合Lua做限流、熔断等控制。

 2.3OpenResty

        OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

        OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

        OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • idea如何配置模板
  • Windows conda常用方法
  • 【2023年】云计算金砖牛刀小试3
  • HTML5元素定位
  • 【delphi】判断多显示器下,程序在那个显示器中
  • 轨迹规划-B样条
  • OpenJDK 8 安装指南
  • 828华为云征文 | 华为云Flexusx与Docker技术融合,打造个性化WizNote服务
  • 直播相关02-录制麦克风声音,QT 信号与槽,自定义信号和槽
  • 机器学习 第12章 计算学习理论
  • HTML和HTML5有什么区别
  • Note091201_OutLook签名设置
  • EE trade:5g黄金是不是纯黄金
  • Kafka的权限配置中,匹配模式
  • GPS 或数字导航之前使用什么进行导航
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 2017年终总结、随想
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • docker容器内的网络抓包
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • mac修复ab及siege安装
  • maven工程打包jar以及java jar命令的classpath使用
  • PaddlePaddle-GitHub的正确打开姿势
  • ReactNativeweexDeviceOne对比
  • use Google search engine
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 订阅Forge Viewer所有的事件
  • 服务器之间,相同帐号,实现免密钥登录
  • 搞机器学习要哪些技能
  • 漂亮刷新控件-iOS
  • 前端面试题总结
  • 如何学习JavaEE,项目又该如何做?
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​用户画像从0到100的构建思路
  • # linux 中使用 visudo 命令,怎么保存退出?
  • #### go map 底层结构 ####
  • #QT项目实战(天气预报)
  • (9)STL算法之逆转旋转
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (定时器/计数器)中断系统(详解与使用)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)hibernate配置管理
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十三)MipMap
  • (译)2019年前端性能优化清单 — 下篇
  • (转)一些感悟
  • (转载)虚函数剖析
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选