API网关之Kong网关简介

1. Kong简介

那么,Kong是一个什么东东呢?它是一个开源的API网关,或者你能够认为它是一个针对API的一个管理工具。你能够在那些上游service之上,额外去实现一些功能。Kong是开源的,因此你能够在Github找到它,你如今就能够下载使用。nginx

Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用、易扩展的,由Mashape公司开源的API Gateway项目。Kong是基于NGINX和Apache Cassandra或PostgreSQL构建的,能提供易于使用的RESTful API来操做和配置API管理系统,因此它能够水平扩展多个Kong服务器,经过前置的负载均衡配置把请求均匀地分发到各个Server,来应对大批量的网络请求。api

 

Kong主要有三个组件:跨域

  1. Kong Server :基于nginx的服务器,用来接收API请求。缓存

  2. Apache Cassandra/PostgreSQL :用来存储操做数据。安全

  3. Kong dashboard:官方推荐UI管理工具,固然,也可使用 restfull 方式 管理admin api。服务器

Kong采用插件机制进行功能定制,插件集(能够是0或N个)在API请求响应循环的生命周期中被执行。插件使用Lua编写,目前已有几个基础功能:HTTP基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及Nginx监控。restful

2. Kong网关的特性

Kong网关具备如下的特性:网络

  • 可扩展性: 经过简单地添加更多的服务器,能够轻松地进行横向扩展,这意味着您的平台能够在一个较低负载的状况下处理任何请求;架构

  • 模块化: 能够经过添加新的插件进行扩展,这些插件能够经过RESTful Admin API轻松配置;负载均衡

  • 在任何基础架构上运行: Kong网关能够在任何地方都能运行。您能够在云或内部网络环境中部署Kong,包括单个或多个数据中心设置,以及public,private 或invite-only APIs。

 

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

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

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

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

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

3. Kong网关插件

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

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

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

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

  5. 协议转换插件:请求转换(在转发到upstream以前修改请求)、响应转换(在upstream响应返回给客户端以前修改响应)。

  6. 日志应用插件:TCP、UDP、HTTP、File、Syslog、StatsD、Loggly等。

4. Kong网关请求流程

为了更好地理解系统,这是使用Kong网关的API接口的典型请求工做流程:

 

当Kong运行时,每一个对API的请求将先被Kong命中,而后这个请求将会被代理转发到最终的API接口。在请求(Requests)和响应(Responses)之间,Kong将会执行已经事先安装和配置好的任何插件,受权您的API访问操做。Kong是每一个API请求的入口点(Endpoint)。

API网关和Kong能为你作些什么

API 网关能够经过实现一些中间件来解决一些问题,这些中间件的功能你就不用再到每一个service中实现了。你也是知道的,不一样的团队使用不一样的方式来实现了不一样的微服务。

若是你不去作一些中心化和抽象化的事情,你将会死于不一样的认证方式以及不一样的速率限制实现,五花八门。你确定但愿避免这样的糟糕局面。

API网关不只能够帮你解决API的管理部分,并且还能够解决下面两件事情:

  • 分析(Analytics) – API网关能够和你的分析基础设施保持透明的交互和通讯,由于API网关是每一个请求(request)的入口,必经地。API网关能够看到全部的数据,能够知道通过你的service的流量。这就至关于你有一个集中的地方,你能够把全部的这些信息push到你的监控或分析工具,好比Kibana或者Splunk。
  • 自动化(Automation) –网关还有助于自动化部署,还能够帮助你实现自动化登入验证(on boarding)。 什么是登入(on boarding)呢? 若是你有API,而且你但愿有身份验证,你可能须要一些功能能够容许用户为该API建立登入凭据(credentials)而后开始使用(消费)API。 开发人员门户网站或你的文档中心等均可以与网关集成来配置这些凭据(credentials),这样你就不用从头开始构建一些功能了。

 

5. 总结

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

虽然有一些特性Kong默认是缺失的,如API级别的超时、重试、fallback策略、缓存、API聚合、AB测试等,这些功能插件须要企业开发人员经过Lua语言进行定制和扩展。

综上所述,Kong API网关默认提供的插件比较丰富, 适应针对企业级的API网关定位。

相关文章
相关标签/搜索