物联网网关神器 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 是一个怎么样的存在与定位。下篇我们将来介绍它是如何安装与部署的。

网关神器Kong(一):介绍相关推荐

  1. 物联网网关神器 Kong ( 四 )- 利用 Konga 来配置生产环境安全连接 Kong

    物联网网关神器 Kong ( 四 )- 利用 Konga 来配置生产环境安全连接 Kong 前言 上一篇我们讲解了 Konga 的搭建和与 Kong 进行默认连接,本篇文章将讲一下如何在生产环境中基于 ...

  2. 开源API网关Kong基本介绍和安装验证

    本文将介绍开源API网关Kong.在GitHub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选项的时候基本也会选择Kong网 ...

  3. 开源syslog服务器_开源API网关Kong基本介绍和安装验证

    今天准备介绍下开源API网关Kong,在Gtihub搜索API网关类的开源产品,可以看到Kong网关常年都是排第一的位置,而且当前很多都有一定研发能力的企业在API网关产品选型的时候基本也会选择Kon ...

  4. linux动态追踪神器——Strace实例介绍【转】

    Strace是Linux下一款通用的进程动态跟踪工具,用来追踪程序执行时的系统调用和所接收的信号.其应用方法如下图(部分). 首先,简单说说它的使用参数,Strace的参数包括输出参数.过滤参数.统计 ...

  5. 【云原生网关】Kong 使用详解

    目录 一.前言 二.Kong介绍 三.Kong核心组件 3.1 kong组件介绍 3.1.1 Kong Server 3.1.2 Apache Cassandra/PostgreSQL

  6. API网关之Kong初识

    1. Kong简介 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apach ...

  7. 网关服务Kong和konga介绍安装使用教程

    介绍 Kong是一款基于OpenResty(Nginx + Lua模块)编写的高可用.易扩展的,由Mashape公司开源的API Gateway项目.Kong是基于NGINX和Apache Cassa ...

  8. kong的介绍与使用

    版本说明 本次学习安装kong在2.1.4版本,konga版本0.14.9 此文档地址获取地址: https://gitee.com/PengFei-io/introduction-and-use-o ...

  9. CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)

    一.IP 即时生效(重启后失效): ifconfig eth0 192.168.1.102 netmask 255.255.255.0 //添加IP地址 route add default gw 19 ...

最新文章

  1. Java变长参数应该注意的问题
  2. 【MM模块】Split Valuation 分割评估
  3. Android NDK的生命周期JNI_OnLoad与JNI_OnUnload(转)
  4. 初学Java开发,有哪些从业方向可以选择?
  5. valid Palindrome -- leetcode
  6. Javaweb maven项目tomcat报错: javax.naming.NamingException: 无法创建资源实例
  7. textureview 旋转90度后平铺_C++初级编程NOIP题:11H1537: 图像旋转
  8. 2 s锁是什么_使用 python 实现简单的共享锁和排他锁
  9. 数模算法:模糊综合评价模型
  10. 函数对称性常见公式_函数对称性
  11. python代写学生作业_data留学生作业代做、代写Python程序设计作业、代做Python实验作业...
  12. httpwatch使用_使用JavaScript的HTTPWatch自动化
  13. arm mali 天梯图_移动处理器GPU性能天梯图数据库
  14. 怎么把好几行弄成一行_怎么把excel表格里多行变成一行数据|excel表格中让多行内容变成为一行...
  15. Mockplus Cloud updated传达设计意图的新方法
  16. Android Zygote进程启动过程
  17. 如何在桥接模式下使用Eero保持路由器的高级功能
  18. python随机生成小写字母表_用小写字母生成大随机字符串的最快方法
  19. biopython:探究新型冠状病毒:提取GenBank文件和蛋白质水平分析。这到底是一个什么样的病毒?是单链还是双链,是DNA病毒还是RNA病毒?
  20. Try to become a quitter 学会放弃

热门文章

  1. 【深度学习】CV顶会|CV顶刊
  2. ActiveSync编程总结(一)
  3. C++ 创建以毫秒为单位的随机种子
  4. linux编译lnx文件命令_(完整word版)Linux常用命令手册大全,推荐文档
  5. 使用VIVADO LICENSE 加密VHDL/Verilog 文件(二)
  6. Txt、记事本等文本文件怎么批量插入标题?怎么在指定位置插入新的内容?
  7. 利用几何布朗运动对招商银行2021年进行股价预测
  8. 3朵红花=60,1朵红花+2朵蓝花=30,1朵蓝花-两朵黄花=3,1朵黄花+1朵红花+1朵蓝花=?...
  9. AI招聘平台TaTiO获百万美元融资;Google数据科学系列课;批量图片转文字工具;无人驾驶4D雷达数据集;3D医学影像检测库 | ShowMeAI资讯日报
  10. 基于房地产信息的数据可视化