编程技术分享平台

网站首页 > 技术教程 正文

高性能、插件化的云原生 API 网关!

xnh888 2024-09-22 16:54:19 技术教程 45 ℃ 0 评论

公有云、容器化和微服务(micro service)正在逐渐取代原有的IT架构,这使得API在公司的信息系统中呈指数级增长。面对这样的增长,公司都会需要一个高效的管理工具。

开源API独角兽Kong就是这样的工具。它的主要产品是API开源网关,用户通过它可以对流量进行分析,管理和不同API相关的开发人员、消费者、合作伙伴和客户等。


Kong 的前世今生

Kong 的开发初衷,来自于创始团队对互联网产品发展的笃信:他们认为互联网系统的“微服务化”、“去中心化”是必然趋势,即: 未来软件产品功能一定会更加细碎,随着产品处理的业务越来越复杂,更多功能会变得模块化。多年前大家的手机里大多是简单的打电话、发短信,但如今手机中的 App 已经承载了人们生活中的方方面面,没有人出门可以完全离得开手机,越是受到用户喜爱的爆款应用,后台的功能、产品设计和服务就越复杂。以大家熟悉的打车软件为例,在用户眼中,软件后台是数据中心,但其背后“藏着”价格计算、路径导航、司机推荐、结算系统等细微环节, 一个小小的 App 背后对应着成千上万个“微服务”。

而这个趋势所对应的产品开发过程也将逐步“分布化”与“解耦化”: 如果一个产品功能出现问题,为了让整个系统不至于受到影响,微功能之间必须采取分布式开发并进行管理。要达到这样的效果,微服务之间需要经过解耦,形成点对点的通讯关系,而涉及到通讯,就相当于在产品内部形成了多个 API,微服务之间相互调用。而涉及到调用,就势必要确保其中的连接性与安全性。服务网格 Kong Mesh 就是专门解决这些复杂性功能交互的产品。

Kong 最早的招牌产品是 “Kong Gateway”,是一款可以管理 API 全生命周期的网关工具,2022年初这款产品的总下载量已超过2.7亿次,每月活跃实例达到270万, 成为了帮助用户从单体应用平滑迁移到微服务架构的标准工具。


Kong 的基本架构

那么,我们回到 Kong,来看一下 Kong 的整体架构。

  • Kong 基于 Nginx 来实现 Api Gateway 基本的负载均衡、反向代理等功能。由 C 语言编写的 Nginx 有着超高的性能和低内存开销。
  • OpenResty 是一个基于 Nginx 的库,它将 Nginx 进行封装,并提供了整个生命周期的 Hook( 钩子 ),使得开发者可以通过 Lua 脚本对 Nginx 进行插件化管理。

什么是 Hook ?钩子编程( hooking ),也称作“挂钩”,是计算机程序设计术语,指通过拦截软件模块间的函数调用、消息传递、事件传递来修改或扩展操作系统、应用程序或其他软件组件的行为的各种技术。处理被拦截的函数调用、事件、消息的代码,被称为钩子(hook )。简单来说就是在每个生命周期调用一个函数,而你只要实现这个函数就可以进行中间操作等功能。例如:你想要做饭,做饭的整个生命周期可以概括为 洗锅->烧油->放菜->出锅。而 Hook 则是在每个步骤中会调用的。比如在洗锅后会调用洗锅的 Hook 、烧油后会调用一个烧油的 Hook 。而你则可以实现洗锅的 Hook,在里面做一些事。比如你实现了洗锅的 Hook,其功能是检查锅洗的干不干净。那么系统将会在执行到洗锅这个步骤后检查有没有人实现洗锅的 Hook,结果就发现了你声明的检查洗锅的函数。接下来就会调用你写的函数来检查锅洗的干不干净。

  • Kong 使用PostgreSQL 或 Cassandra 来对其配置文件进行持久化存储,使得可以进行集群管理。
  • Kong 提供了插件模型,使用 Lua 脚本来对 Nginx 整个生命周期进行扩展。实现了一些常用插件( 限流、熔断、验权等 )。


Kong特点

  • Cloud-Native:与平台无关,Kong可以在任何平台上运行-从裸机到容器-并且可以在本机上的每个云上运行。
  • Kubernetes-Native:使用官方的Ingress Controller通过本地Kubernetes CRD声明性地配置Kong,以路由和连接所有L4 + L7通信。
  • 动态负载平衡:跨多个上游服务对流量进行负载平衡。
  • 基于哈希的负载平衡:具有一致的哈希/粘性会话的负载平衡。
  • 熔断器:智能跟踪不健康的上游服务。
  • 运行状况检查:主动和被动监视您的上游服务。
  • 服务发现:在第三方DNS解析器(例如Consul)中解析SRV记录。
  • 无服务器:直接从Kong调用和保护AWS Lambda或OpenWhisk功能。
  • WebSockets:通过WebSockets与您的上游服务进行通信。
  • gRPC:与gRPC服务进行通信,并通过日志记录和可观察性插件观察流量
  • OAuth2.0:轻松将OAuth2.0身份验证添加到您的API。
  • 日志记录:通过HTTP,TCP,UDP或磁盘记录对系统的请求和响应。
  • 安全性:ACL,僵尸程序检测,允许/拒绝IP等…
  • Syslog:登录到系统日志。
  • SSL:为基础服务或API设置特定的SSL证书。
  • 监视:实时监视提供关键的负载和性能服务器指标。
  • 转发代理:使Kong连接到中间透明HTTP代理。
  • 认证:HMAC,JWT,基本等。
  • 速率限制:基于许多变量来阻止和限制请求。
  • 转换:添加,删除或处理HTTP请求和响应。
  • 缓存:在代理层缓存并提供响应。
  • CLI:从命令行控制Kong群集。
  • REST API:Kong可以使用其RESTful API进行操作,以实现最大的灵活性。
  • 地理复制:跨不同区域的配置始终是最新的。
  • 故障检测和恢复:如果您的Cassandra节点之一发生故障,则Kong不会受到影响。
  • 集群:所有Kong节点自动加入集群,并在各个节点之间更新其配置。
  • 可扩展性:Kon本质上是分布式的,只需添加节点即可水平扩展。
  • 性能:Kong通过扩展和使用NGINX作为核心轻松处理负载。
  • 插件:可扩展的体系结构,用于向Kong和API添加功能。


Kong 安装

在这里以在CentOS 7下安装Kong 2.2版本说明。注意CentOS 7安装PostgreSQL不再列出,可以参考网上的文章进行安装。

Kong-Dashboard安装。对于Kong网关本身也提供了Kong Dashboard管理页面,下面再看下Dashboard的安装。在安装Dashboard前需要首先安装Node.js,具体如下:

在启动后再配置Dashboard需要绑定的Kong Server,如下:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表