网关神器Kong(一):介绍

2022-01-24 15:26:50 浏览数 (3)

物联网网关神器 Kong ( 一 )

当你看到这只大猩猩的时候,是不是感觉优点萌萌的。哈哈,这就是我们这篇文章要讲解的一个开源项目 – Kong( 云原生架构下的分布式API 网关 )。

为什么说 Kong 是物联网网关神器?

在 IOT 系统架构中,为了保证系统的鲁棒性和高可扩展性。我们需要一个强大的 API 网关来承受住遍布各地的 IOT 设备所传输的信息。插件架构设计的 Kong 使得它具有了强大的兼容性,和可扩展性。TCP 和 UDP 原始流的支持,更是使得它可以适配多种协议,完美的解决了 IOT 系统中的协议适配问题。

Kong 的前世今生

Kong 是由 Mashape 开源的一款具有高性能、高可用特点的云原生架构下的分布式 API 网关。基于 Nginx 和 OpenResty 的 Kong 获得了非常高的性能, Lua 脚本的插件系统架构设计也使得其具有高扩展性的能力后并不会丢失性能。

什么是插件系统架构设计? 即契约式编程,由于无法像正常开发团队一样拥有那么多的机会沟通与交流。所以核心服务就会对外定义一些规范与接口,用于提供扩展能里。而开发者只需要按照规范进行遵守即可。这样保证了插件开发流程的简洁与高效。

什么是云原生?

2015年由谷歌牵头成立了云原生计算基金会( CNCF ),其对云原生应用提出了三大特性:

  • 容器化:基于容器化的应用发布,实现高隔离、平台无关性等。用来简化大量服务的持续交付时所需要的庞大维护工作。 代表应用 Docker
  • 服务编排:为基于容器的服务提供强大的编排和调度能力,从而发挥容器的良好隔离、资源分配与编排管理的优势。
  • 代表应用 Kubernetes ( k8s)
  • 微服务的分布式架构:将服务进行细分,将功能模块分解到各个独立的子系统中用以实现解耦或实现业务人员的分配。

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 整个生命周期进行扩展。实现了一些常用插件( 限流、熔断、验权等 )。

什么是限流与熔断? 在系统承受到特别大的流量压力时,限流与熔断就显得格外重要。主要用于保护核心服务不会被压力所击垮。 限流: 即对访问的客户端进行并发访问速度的限制。

  1. 最简单的拒绝服务,直接将用户的请求拒绝掉。
  2. 服务降级,对一些服务进行降级或直接关闭一些服务。
  3. 特权请求, 可以对一些特殊身份的请求进行放行,其他拒绝。
  4. 可以将请求进行延时处理。

熔断: 类似家里的保险丝。熔断器会判断当前服务的存活状态。在服务被击垮后可以由熔断器自行返回错误,而不用继续对请求进行等待与重试。

  • Kong 提供了 Http/Rest 的接口来实现配置 ,使得其可以更简单的构建图形化界面进行动态配置。

为什么使用 Kong?

了解了Kong 的基本架构,我们来谈谈为什么使用 Kong 与 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 API GateWay 的架构与特点。带领大家简单了解 Kong 是一个怎么样的存在与定位。下篇我们将来介绍它是如何安装与部署的。

0 人点赞