HTTP API网关选择之一Kong介绍

数据库2025-11-04 14:13:362497

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

一、介绍架构

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

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

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

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

Kong核心基于OpenResty构建,实现了请求/响应的Lua处理化; Kong插件拦截请求/响应,如果接触过Java Servlet,等价于拦截器,实现请求/响应的AOP处理; Kong Restful 管理API提供了API/API消费者/插件的管理; 数据中心用于存储Kong集群节点信息、API、消费者、插件等信息,目前提供了PostgreSQL和Cassandra支持,如果需要高可用建议使用Cassandra; dnsmasq用于提供给Nginx DNS解析功能; 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插件就介绍完了。

三、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是您的一个选择。

【本文是专栏作者张开涛的原创文章,作者微信公众号:开涛的博客( kaitao-1234567)】

戳这里,看该作者更多好文

本文地址:http://www.bhae.cn/news/21d23399745.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

全站热门

电脑网络连接错误678的解决方法(探寻网络错误678的原因和解决方案)

Mac和Win10教程大全(从入门到精通,轻松掌握Mac和Win10操作技巧)

打印机驱动卸载教程——彻底解决驱动问题(简易操作,轻松卸载打印机驱动)

iOS10.3带给iPhone5s的全新体验(功能升级、性能提升、用户体验再升级)

解决galgame电脑运行错误的方法(探索电脑运行错误的原因与解决方案)

加装固态硬盘教程(详细指导,让你的电脑焕发新生)

老毛桃装机教程(从零开始,轻松拥有强大的定制化装机能力)

解析iPhoneXR的屏幕尺寸与特点(探寻iPhoneXR屏幕的优势和应用场景)

友情链接

滇ICP备2023000592号-9