HTTP API网关选择之一Kong介绍

2023-11-15

 Kong是Mashape开源的高性能高可用API网关和API服务管理层。它基于OpenResty,进行API管理,并提供了插件实现API的AOP。Kong在Mashape 管理了超过15,000 个API,为200,000开发者提供了每月数十亿的请求支持。本文将从架构、API管理、插件三个层面介绍Kong。

  架构

  按照康威定律,我们系统架构会拆的很散,系统由一堆服务组成,如下图所示:

  

  如在访问库存服务、优惠券服务、价格服务时之前都会做一些特殊处理,如限流、缓存、日志、请求统计。而这些处理几乎是所有服务都需要的,这不就是我们常说的AOP嘛,当我们服务多起来的时候,应该将这些通用处理集中到一个地方进行管理,如下图所示:

  

  即通过Kong统一管理通用功能。

  Kong的安装请参考官网示例。Kong整体架构如下所示:

  

  1. Kong核心基于OpenResty构建,实现了请求/响应的Lua处理化;

  2. Kong插件拦截请求/响应,如果接触过Java Servlet,等价于拦截器,实现请求/响应的AOP处理;

  3. Kong Restful 管理API提供了API/API消费者/插件的管理;

  4. 数据中心用于存储Kong集群节点信息、API、消费者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建议使用Cassandra;

  5. dnsmasq用于提供给Nginx DNS解析功能;

  6. Kong集群中的节点通过gossip协议自动发现其他节点,当通过一个Kong节点的管理API进行一些变更时也会通知其他节点。每个Kong节点的配置信息是会缓存的,如插件,那么当在某一个Kong节点修改了插件配置时,需要通知其他节点配置的变更。

API/API消费者/插件管理

  Kong的整体流程架构如下图所示:

  

  1、添加API服务

  首先我们需要通过Kong管理API向Kong注册API服务,如下所示:

  curl –I –X POST

  --url http://kong:8001/apis/

  --data ‘name=queryStockService’

  --data ‘upstream_url=http://stock.jd.local/’

  --data ‘request_host=api.jd.com’

  --data ‘request_path=queryStock’

  向Kong添加了一个API,全局唯一名字为queryStockService,当我们访问http://api.jd.com/queryStock时会upstream到http://stock.jd.local/queryStock处理,这不就是Nginx反向代理的功能,Kong实现了API的动态添加。

  2、添加API消费者

  我们的API中有些是公开的,所有人都可以访问,而有些API是私有的,只有授权才能访问。在开放平台中,只有授权的开发者才能访问API,且有些高级API是只针对部分开发者可用,还有如对不同开发者有不同的API调用次数限制,等等。在这些非公开场景下,需要有一个API消费者。

  curl -i -X POST

  --url http://kong:8001/consumers/

  --data "username=zhangkaitao"

  其会生成一个consumer_id “e5da92dd-fbe8-4031-bebf-34c741e209b1”,添加插件章节会用到该ID。

  3、添加插件

  插件可以是全局的,也可以是局部的。如限流插件,我们可以配置为全局限流。目前支持:所有API和所有消费者、所有API和特定消费者、所有消费者和特定API、特定消费者和特定API。

  为queryStockService添加50次/秒的限流。特定API和所有消费者配置。

  curl -X POSThttp://kong:8001/apis/queryStockService/plugins

  --data "name=rate-limiting"

  --data "config.second=50"

  目前Kong的限流实现是基于计数器,默认是本地限流,可以配置为如使用Redis,实现集群限流。

  为queryStockService添加密钥身份认证。

  curl -i -X POST

  --url http://kong:8001/apis/queryStockService/plugins/

  --data 'name=key-auth'

  为消费者添加秘钥。

  curl -i -X POST

  --url http://kong:8001/consumers/zhangkaitao/key-auth/

  --data 'key=myKey'

  通过秘钥访问API。

  curl -i -X GET

  --url http://api.jd.com/queryStock

  --header "Host: api.jd.com"

  --header "apikey: myKey"

  特定API和特定消费者限流,需要配合身份认证模块。

  curl -X POST http://kong:8001/apis/abc/plugins

  --data "name=rate-limiting"

  --data "consumer_id=e5da92dd-fbe8-4031-bebf-34c741e209b1"

  --data "config.second=1"

  到此添加API、添加API消费、添加API插件就介绍完了。更多API管理请扫描如下二维码学习。

  更多插件配置学习请扫描如下二维码学习。

  Kong默认插件

  身份认证:Kong提供了Basic Authentication、Key authentication、OAuth2.0 authentication、HMAC authentication、JWT、LDAP authentication认证实现。

  安全:ACL(访问控制)、CORS(跨域资源共享)、动态SSL、IP限制、爬虫检测实现。

  流量控制:请求限流(基于请求计数限流)、上游响应限流(根据upstream响应计数限流)、请求大小限制。限流支持本地、Redis和集群限流模式。

  分析监控:Galileo(记录请求和响应数据,实现API分析)、Datadog(记录API Metric如请求次数、请求大小、响应状态和延迟,可视化API Metric)、Runscope(记录请求和响应数据,实现API性能测试和监控)。

  转换:请求转换(在转发到upstream之前修改请求)、响应转换(在upstream响应返回给客户端之前修改响应)。

  日志:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

  也可以开发自己的插件,如缓存等。

  总结

  Kong作为API网关提供了API管理功能,及围绕API管理实现了一些默认的插件,另外还具备集群水平扩展能力,从而提升整体吞吐量。Kong本身是基于OpenResty,可以在现有Kong的基础上进行一些扩展,从而实现更复杂的特性。

  有一些特性Kong默认是缺失的,如API级别的超时、重试、fallback策略、缓存、API聚合、ABTest等,这些需要开发者自己定制和扩展。

  如果你要做开放平台,你要做HTTP API网关,Kong是您的一个选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP API网关选择之一Kong介绍 的相关文章

  • 项目集成支付宝报错:调试错误,请回到请求来源地,重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数

    问题 项目集成支付宝报错 调试错误 请回到请求来源地 重新发起请求 错误代码invalid app id错误原因 无效的ApplD参数 详细问题 笔者按照支付宝沙箱支付快速集成版进行操作 操作完成访问所集成的支付宝 页面如下 解决方案 修改
  • 《计算机网络》期末模拟考试练习+答案

    期末考试模拟试题参考 一 单选题 共20题 20分 1 下列有线传输介质中抗电磁干扰最好的是 A 屏蔽双绞线 B 同轴电缆 C 非屏蔽双绞线 D 光纤 正确答案 D 解析 2 TELNET通过TCP IP协议在客户机和远程登录服务器之间建立
  • 三层交换机配置静态路由

    一 建立拓扑图 二 配置主机IP地址 网关 主机号 IP地址 网关 PC 0 192 168 10 101 192 168 10 1 PC 1 192 168 20 101 192 168 20 1 PC 2 192 168 30 101
  • Sqlite嵌入式内存数据库的优化

    0 场景及问题 目前网关项目在使用Sqlite的数据库存储数据 但是我们使用的方式和一般的数据库使用有区别 导致出现了两个问题 Sqlite3占用内存迅速增长 这种增长是cat proc fd号 statm 的显示增长 区别于 sqlite
  • 网关架构演进

    1 前言 天翼账号是中国电信打造的互联网账号体系产品 利用中国电信管道优势为企业提供用户身份认证能力 其中网关系统是天翼账号对外能力开放体系的重要组成 业务侧它以集中入口 集中计费 集中鉴权管控为目标 技术侧它支持隔离性 可配置 易开发 动
  • GET请求传参对象的list

    之前试过get请求传参是数组 但是试的都是基本类型 现在需求要是自定义的对象 怕写的不对 就提前自测了一下 调用方代码 Resource private TestClient testClient Test public void apiT
  • APISIX源码解析-执行阶段【http_header_filter_phase、http_body_filter_phase、http_log_phase、http_balancer_phase】

    http header filter phase function M http header filter phase if ngx var ctx ref then prevent for the table leak local st
  • .Net Core with 微服务 - 架构图

    上一次我们简单介绍了什么是微服务 NET Core with 微服务 什么是微服务 介绍了微服务的来龙去脉 一些基础性的概念 有大佬在评论区指出说这根本不是微服务 由于本人的能力有限 大概也只能理解到这个层次 先不管它到底是不是微服务吧 既
  • Gateway网关简介以及使用

    目录 一 概述简介 1 1 Gateway是什么 1 2 Gateway能干嘛 1 3 Zuul和gateway 1 4 gateway三大核心概念 1 5 gateway工作流程 二 实战练习 2 1 入门demo 2 2 网关路由两种配
  • 带你认识一下“京东到家-网关系统”

    京东到家三周年活动已然结束 在这2年里 我们的网关系统经历过了618 1020 双11 双12 415等多个非常有意义的考试 回顾起来依旧让人觉得很刺激 每次考前我们和市场部都做了大量的效果预估 压测 扩容 但是活动当日依旧是惊心动魄 瞬时
  • Eolink 旗下网关产品各版本功能及性能对比

    GoKu 网关提供企业版 EE 与开源版 CE 两个版本 满足不同阶段用户对于微服务的需求 两个版本均支持 私有云部署 开源版 CE 目前已停止维护 Apinto 开源版本是 Goku 开源版 CE 的一次架构升级 经过前面几年的网关架构和
  • APISIX源码解析-插件-客户端IP【real-ip】

    real ip 客户端IP插件 关键属性 源码解析 real ip 插件用于动态改变传递到 APISIX 的客户端的 IP 和端口 local function get addr conf ctx if conf source http x
  • Spring Cloud Gateway替代zuul作为API网关(一)

    本文简要介绍如何使用Spring Cloud Gateway 作为API 网关 不是使用zuul作为网关 关于Spring Cloud Gateway和zuul的性能比较本文不再赘述 基本可以肯定Spring Cloud Finchley版
  • 微服务·架构组件之网关- Spring Cloud Gateway

    微服务 架构组件之网关 Spring Cloud Gateway 引言 微服务架构已成为构建现代化应用程序的关键范式之一 它将应用程序拆分成多个小型 可独立部署的服务 Spring Cloud Gateway是Spring Cloud生态系
  • 关于电商秒杀系统中防超卖、以及高性能下单的处理方案简述

    秒杀抢购系统的成功平稳运行 有一些需要注意的知识点 1 高并发 以及刷接口等黑客请求对服务端的负载冲击 2 高并发时带来的超卖 即商品数量的控制 3 高负载下 下单的速度和成功率的保证 4 其他 以秒杀单品为例 如抢小米手机 解决方案探讨
  • 网络传输数据基本流程 详解

    我是目录 1 网络传输流程图 2 数据包的封装分用 3 不同网络环境中 网络数据传输流程 1 网络互联 2 局域网 3 广域网 1 网络传输流程图 2 两台计算机通过 TCP IP 协议通讯的过程如下所示 2 数据包的封装分用 3 不同网络
  • 边缘计算在物联网领域的研究与分析

    本文首发于 5G工业互联 作者黄泽龙 摘 要 物联网的发展开启了万物互联时代 设备的爆炸式增长和应用的多样化带来了海量数据 对传输带宽 时效性 异构接入等提出了新要求 边缘计算在靠近数据源侧进行数据处理 有效地减少数据传输量 降低服务响应时
  • 网关、路由、DNS详细解释

    网关 Gateway 又称网间连接器 协议转换器 网关在网络层以上实现网络互连 是最复杂的网络互连设备 仅用于两个高层协议不同的网络互连 网关既可以用于广域网互连 也可以用于局域网互连 针对普通客户来说 网关就是运营商的交换机端口地址 也就
  • Advanced REST client的使用说明以及安装

    1 为什么要使用REST Client 在实际企业开发过程中经常会有这样的需求 1 我当前开发的这个系统是需要调用其他系统的接口 也就是我们需要频繁的测试接口 尝试不同的入参参数去查看返回结果 如果要在程序中调试就必要不断的改代码 重启to
  • 提交表单--get与post方式

    我们经常在网页上输入信息 然后通过按钮提交 有两种提交方式 get和post get方式效率高但安全性低 post是封装后进行提交安全性高 get方式经常用于搜索 查询 post常用与用户注册登陆等 提交表单标签

随机推荐

  • 23个最有用的ES检索技巧(Java API实现)

    前言 本文是对 23个最有用的Elasticseaerch检索技巧 一文提到的ES检索技巧进行 Java API 的简单实现 但仅限于简单实现 并不考虑包括参数校验 异常处理 日志处理 安全等问题 仅供参考 代码见 UsefullESSea
  • WebService_HelloWorld_笔记

    创建服务端步骤 1 定义服务接口和实现类 2 给接口和实现类加上注解 3 发布服务 http localhost 8888 ns wsdl http localhost 8888 ns xsd 1 package biz codeworm
  • 社区的代码规范及e2e测试

    golangci lint 静态代码检查工具 是对golint gofmt的集成 速度更快 1 安装 go install github com golangci golangci lint cmd golangci lint v1 38
  • c语言 寻找素数对

    寻找一个偶数的最邻近的素数对
  • 菜鸟式教程:Idea上传代码到Gitee

    点击File settings Plugins 在搜索栏中输入gitee 点击安装 安装完成之后 点击OK 即完成gitee 如下图所示 安装完成之后 重启Idea 然后点击File settings Plugins 找到Gitee 如下图
  • 机器学习实战之CART

    理论 CART Classification and Regression Tree 是决策树的一种 决策树是每次以某个属性为准 将数据集划分为几个类 最终数据集中的元素都被划分到相应的类中 典型的决策树算法是ID3 ID3与CART不同之
  • 天梯赛复盘

    昨天刚比完天梯赛 以为有了大一以来的积累 可以轻轻松松国三 结果 题确实感觉不难 全是模拟题 但还是寄了 结合我朋友和我的状况 总结一下教训 一 刷题阶段 1 天梯赛的题L1 L2不难 所以我前期犯得错误就是 只刷题不找题解 这其实是不太好
  • Java 开发环境配置----JDK配置

    下载JDK 首先我们需要下载java开发工具包JDK 下载地址 Java Downloads Oracle 点击如下下载按钮 在下载页面中你需要选择接受许可 并根据自己的系统选择对应的版本 本文以 Window 64位系统为例 下载后JDK
  • 物联网--思科模拟器--简单风力发电

    参考视频入口 实验拓扑图 需要注意的是ioe7连的是d1口 ioe5连的d0 服务器配置ip 电脑 风力发电 电显示器配置ip 电脑上注册 服务器上查看 为ioe6 ioe7个设置控制的账号密码 电脑上查看控制 效果图
  • lambda中sorted排序

    准备工作 新建一个User类 使用stream排序操作 默认ASC排序 stream倒序排序操作 sorted Comparator reverseOrder 代码例子 lambda sorted排序 Test public void te
  • Linux操作系统与Shell编程

    Linux是自由 开源的操作系统 安装在计算机的硬件之上 是用来操作计算机硬件和软件资源的系统软件 一般应用于专业的web服务器上 具有以下特性 Linux注重系统的安全性 对文件访问权限有严格设定 最高权限账户为root用户 可以操作一切
  • localStorage,sessionStorage和cookie的介绍及区别

    localStorage sessionStorage和cookie的介绍及区别 1 localStorage localStorage是HTML5规范中作为持久化保存客户端数据的方案 localStorage可以用于数据缓存 日志存储等应
  • 机器学习基础(五)

    决策树 决策树是一种预测模型 它代表着对象属属性与对象值之间的一种映射关系 树中的每个节点代表一个对象 分叉路径 或者叫树枝 则代表一个属性值 决策树常用方法 分类树分析 是一种监督学习 用于预计结果可能为离散类型 回归树分析 用于预计结果
  • 在Java中response如何设置文件路径

    在 Java 中 使用 java io File 类来设置文件路径 例如 下面的代码展示了如何创建一个 File 对象 并使用它来设置文件路径 import java io File 创建一个 File 对象 表示当前目录下的 test t
  • “warning NU1701: 项目依赖包与项目框架net6.0不完全兼容“

    问题 一个Net6的Web项目 有一个警告 warning NU1701 已使用 NETFramework Version v4 6 1 NETFramework Version v4 6 2 NETFramework Version v4
  • 服务器之间如何传输数据

    有时候大家需要将一台服务器内的数据传输到另外一台设备 有很多种方法 如果两台物理机离得很近 可以通过移动硬盘传输 如果是跨地区的 有人首先通过filezilla将数据下载到windows电脑上 在通过filezilla上传到另外一台服务器
  • 小红书怎么做关键词搜索排名?哪些行业适合在小红书推广?

    小红书 是口碑营销 社群营销 笔记营销 是大众点评的电商版本 靠分享打天下的 分享就是口碑 很多人问小红书怎么做关键词搜索排名 今天就小编带你领略一下小红书的关键词排名引流秘籍 一 搞关键词布局 1 文章标题中必须要带有关键词 醒目的标题
  • LeetCode-1343. Maximum Product of Splitted Binary Tree

    Given a binary tree root Split the binary tree into two subtrees by removing 1 edge such that the product of the sums of
  • 解决windows环境下cmake无法生成Makefiles文件

    Step1 首先确保你的电脑安装了make 如何安装了MinGW可以将bin目录下的mingw32 make exe或mingw64 make exeq强制改为make exe并添加环境变量也可以 Step2 执行代码 cmake G Un
  • HTTP API网关选择之一Kong介绍

    Kong是Mashape开源的高性能高可用API网关和API服务管理层 它基于OpenResty 进行API管理 并提供了插件实现API的AOP Kong在Mashape 管理了超过15 000 个API 为200 000开发者提供了每月数