什么是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 等都进行一致的高性能响应。

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

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

相关文章

什么是CPU、GPU、NPU?(包懂+会)

目录 举例子 CPU:主厨 GPU:大量的厨房助理 NPU:面包机 总结 讲理论 CPU(中央处理器) GPU(图形处理单元) NPU(神经网络处理单元) 对比分析 举例子 CPU&#xff…

【网络安全】-文件下载漏洞-pikachu

文件操作漏洞包括文件上传漏洞,文件包含漏洞,文件下载漏洞。 文章目录  前言 什么是文件下载漏洞? 1.常见形式: 常见链接形式: 常见参数: 2.利用方式: 3.举例:pikachu不安全的文件…

【Qt】按钮样式--按钮内部布局(调整按钮文本和图标放置在任意位置)

要求: 有一个按钮,要求按钮的右下角显示开关,点击切换开关状态 ps:注意,要求你添加完了之后,整个按钮的点击区域不变(就是说,点击右下角的文本,也可以触发按钮的点击事件…

CentOS7 使用yum报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOS7 使用yum报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 CentOS镜像下载、VM虚拟机下载 下载地址:www.macfxb.cn 一、问题描述 安装完CentOS7 后 使用yum报错 如下图 二、解决方案 1.查看自己的系统架构 我的是aarch64 uname …

python 学习一张图

python学习一张图,python的特点的是学的快,一段时间不用,忘记的也快,弄一张图及一些入门案例吧。 写一个简单的测试: #!/usr/bin/python # -*- coding: UTF-8 -*- import osdef add_num(a, b):return a bif __name__…

【STM32】BH1750光敏传感

1.BH1750介绍 BH1750是一个光敏传感,采用I2C协议,对于I2C的从机,都有自己的地址,用来主机选择和哪个从机通信,对于OLED来说,只有单片机通过I2C往OLED中写数据。而BH1750来说,有单片机往BH1750写…

DNAT和SNAT实践

NAT分SNAT和DNAT两种。从名字上区分: SNAT将源IP地址替换为出口网络的IP地址,以便内网地址可以访问外网服务。一般受限于公网IP有限,一个内网集合想访问外网服务,则用统一的出口做代理。出口配置公网IP,帮助从此发出的…

Note24091101_基恩士日期获取相关测试01

基恩士日期获取相关测试 1、SEC和RSEC的使用: 资料如图: 要点提示:SEC和RSEC成对使用。 日期转秒,秒转日期测试如图所示: 2. LDWK与LDWKB星期接点的使用示例: 资料如图: 仿真如图&…

2018年系统架构师案例分析试题五

目录 案例 【题目】 【问题 1】(7 分) 【问题 2】(12 分) 【问题 3】(6 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于 Web 系统设计的叙述,在答题纸上回答问题 1 至问题 3。 【题目】 某银行拟将以分行为主体…

287. 寻找重复数(stl法)

目录 一:题目: 二:代码: 三:结果: 一:题目: 给定一个包含 n 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知…

数模方法论-线性规划

一、基本概念 在实际生产过程中,人们经常面临如何有效利用现有资源来安排生产,以实现最大经济效益的问题。这类问题构成了运筹学的一个重要分支——数学规划,而线性规划(Linear Programming, LP)是数学规划中的一个关键…

Facebook的虚拟现实计划:未来社交的全新视角

随着科技的不断进步,虚拟现实(VR)正逐步成为我们日常生活的一部分。作为全球领先的社交平台,Facebook正在大力投入虚拟现实技术,以重新定义社交互动的方式。本文将深入探讨Facebook的虚拟现实计划,分析其如…

网络高级(学习)2024.9.11

目录 Modbus库函数 1.初始化和释放函数 2.功能函数 3.功能案例 Modbus RTU 1.特点 2.协议格式 3.编程思路 Modbus库函数 1.初始化和释放函数 modbus_t* modbus_new_tcp(const char *ip, int port) 功能:以TCP方式创建Modbus实例,并初始化 参数…

基于vue框架的城市智慧地铁管理系统73c2d(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,站点查询,车次线路,站点周边 开题报告内容 基于Vue框架的城市智慧地铁管理系统开题报告 一、研究背景与意义 1.1 研究背景 随着城市化进程的加速和人口的不断增长,城市交通压力日益增大。地铁作为城市公共交通的重要…

C++--模板

1 泛型编程 如何将Swap实现乘成一个通用的交换函数 void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, char&…

深入理解Java虚拟机:Jvm总结-Java内存区域与内存溢出异常

第二章 Java内存区域与内存溢出异常 2.1 意义 对于C、C程序开发来说,程序员需要维护每一个对象从开始到终结。Java的虚拟自动内存管理机制,让java程序员不需要手写delete或者free代码,不容易出现内存泄漏和内存溢出问题,但是如果…

【网络安全】-文件上传漏洞

文件操作漏洞包括文件上传漏洞,文件包含漏洞,文件下载漏洞。 文章目录 前言 什么是文件上传漏洞? 文件上传的验证与绕过: 1.前端js验证:   Microsft Edge浏览器: Google Chrome浏览器: 2.后端…

Taro实现微信小程序自定义拍照截图识别

效果图&#xff1a; 代码&#xff1a; <template><view class"lary-top" :style"{ height: ${topBarHight}px }"></view><Camerav-show"!canvasShow"class"camera-photo":style"{width: ${info.windowWidt…

LIO-SAM如何保存地图

一、找到LIO-SAM配置文件&#xff0c;路径为config/params.yaml&#xff0c;修改以下两项参数&#xff1a; savePCD: true # https://github.com/TixiaoShan/LIO-SAM/issues/3savePCDDirectory: "/home/slam/catkin_ws/src/maps" …

Http带消息头两种请求办法

API接口最近经常碰到&#xff0c;协调几个乙方来回对接&#xff0c;把我折腾晕了&#xff0c;索性自己写一个小的工具&#xff0c;导入历史数据。 获取平台免登录token 接口说明 URL Path&#xff1a;gateweb/bigm-dm/openApi/ologin/openLogin 说明&#xff1a;第三方免登…