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

API网关基础认知

一、背景

微服务体系中,如果未部署网关,则客户端必须直接向前端服务发送请求。 但是,直接向客户端公开服务会造成一些潜在问题:

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

二、API 网关

位置:API 网关位于客户端与服务之间

作用:

  • 充当反向代理,将来自客户端的请求路由到服务。
  • 执行各种横切任务,例如身份验证、SSL 终止和速率限制

网关的功能,划分为三类:

  • 网关路由。使用网关作为反向代理,网关为客户端提供单一终结点,可帮助将客户端与服务分开。
  • 网关聚合。将多个单独请求聚合成一个请求。
  • 网关卸载。将单个服务的功能卸载到网关,尤其适合用于解决横切问题。
    • SSL 终止
    • 访问控制,IP 允许/阻止列表
    • 流量控制,客户端速率限制(限制)
    • 日志记录和监视
    • Authentication。登录凭证校验、API 资源调用权限校验
    • API 参数清洗
    • 响应缓存
    • Web 应用程序防火墙
    • GZIP 压缩
    • 为静态内容提供服务
  • 发布
    • 金丝雀
    • 灰度发布
  • 持续集成
    • 对接 swagger 文档

支持的应用层协议:

  • HTTP、HTTPS
  • WebSocket

三、功能

3.1 API 路由转发

使用反向代理服务器,一般使用 Nginx 和 HAProxy。

支持的协议:HTTP、HTTPS、WebSocket

3.2 API 路由聚合

BFF(Backend For Frontend),服务于前端的后端。为每一种客户端适配一个网关,组装、过滤客户端需要的数据(不关心业务)。

3.3 SSL 终止

客户端到网关层使用 HTTPS 协议,网关层到各个服务层使用 HTTP 协议。

3.4 流量控制

限制单位时间内 API 的被调用次数,保护后端服务。

3.5 访问控制

控制访问 API 的 IP 地址和帐户,设置 IP 地址或帐户的黑白名单来拒绝/允许某个 IP 地址或帐户访问 API。

3.6 流量监控

监控 API 的延迟、流入流量、流出流量、调用次数等。参考华为云 API 网关的指标

3.7 日志分析

分析的指标:

  • PV、UV
  • 客户端种类分布移动端、PC 端口;Chrome、Firefox
  • 访客 IP 分布

鉴权

鉴权对象方式
应用鉴权为应用设置 AppCode,请求中携带正确的 AppCode 时,鉴权通过。
用户鉴权云账号;基于 OAuth 2.0 协议的 OpenID;无认证
API 鉴权插件,拦截请求,配合具体业务具体实现

四、产品

  • 阿里云 API 网关
  • 百度智能云 API 网关
  • 华为云 API 网关
  • 腾讯云 API 网关
  • Apache APISIX
  • Kong
  • express gateway
  • Apache APISIX

参考

  • [^1] 在微服务中使用 API 网关
  • [^2] 阿里云 API 网关-功能列表
  • [^3] 阿里云 API 网关-API 网关 OpenID Connect 使用指南
  • [^4] 百度智能云 API

相关文章:

  • 【机器学习】机器学习学习笔记 - 无监督学习 - k-means/均值漂移聚类/凝聚层次聚类/近邻传播聚类 - 05
  • 阿里云ECS服务器安装docker
  • SQL注入作业
  • Linux搭建Discuz论坛
  • javaagent使用
  • 代码随想录算法训练营第三十六天|435. 无重叠区间,763.划分字母区间,56. 合并区间
  • 局域网https自签名教程
  • 坚持刷题|二叉树展开为链表
  • 深度学习 精选笔记(5)多层感知机
  • HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)
  • Redis实现滑动窗口限流
  • 产品渲染3D效果图一张多少钱,哪个平台更有性价比?
  • 腾讯云Ubuntu18.04配置深度学习环境
  • 反常积分敛散性的比较判别法专题(及常用反常积分)
  • pythond大屏可视化
  • 知识图谱-生物信息学-医学论文(Chip-2022)-BCKG-基于临床指南的中国乳腺癌知识图谱的构建与应用
  • 力扣 每日一题 902. 最大为 N 的数字组合【难度:困难,rating: 1989】(数学 / 数位dp)
  • 奇迹mu服务器安全和优化设置
  • OC 基础 导航栏UITabBarController的使用(源码)
  • 人脸识别项目FFmpeg+OpenCV+虹软SDK
  • ITRS 与 GCRS 之间的坐标转换
  • 【图像重建】基于matlab SIDER算法图像压缩重建【含Matlab源码 2170期】
  • 多线程同步-条件变量
  • JS(第八课)循环语句中常用到的案例
  • 2022软考高项十大领域知识整理(四)-人力资源管理、干系人管理、采购管理
  • 深度学习基础之BatchNorm和LayerNorm
  • 【Spring】面向切面编程详解(AOP)
  • 力扣(LeetCode)75. 颜色分类(C语言)
  • LeetCode算法题整理(200题左右)
  • flowable-ui绘图常见错误
  • 前端最新基础知识
  • 【2022年玄武云科技AI算法岗秋招面试记录】