1.3 Kong网关基础组件
下面我们看一下Kong网关的基础架构。它主要由三大组件组成。
1)Kong服务器:基于OpenResty构建,用来接收API请求,并对请求进行转发处理,返回结果。
2)数据库:包含PostgreSQL、Cassandra,用来存储操作数据。
3)Kong管理GUI:Kong服务界面管理工具。
1.3.1 Kong服务器
Kong服务器架构如图1-7所示。
图1-7 Kong服务器架构
1)Kong服务器基于OpenResty构建,使用Lua脚本处理请求、响应。
2)Kong插件拦截请求、响应,类似于Java Servlet中的拦截器,实现请求、响应的AOP处理。
3)RESTful API提供了对路由、服务、插件等一系列元数据的统一管理。
4)数据中心用于存储Kong集群节点信息,以及路由、服务、插件等一系列元数据。目前,其支持PostgreSQL和Cassandra数据库。
5)Kong集群中的节点通过Gossip协议自动发现其他节点。当某一节点通过Admin API对配置进行变更时,同时会通知其他节点。每个Kong节点的配置信息是有缓存的。
注意
Gossip协议通过一种随机、带有传染性的方式,将信息传播到整个网络,并在一定时间内使得系统内所有节点的数据一致,是常用的解决分布式环境中数据最终一致性问题的通信协议。使用Gossip协议的还有Redis Cluster、Consul、Apache Cassandra等。
Kong服务器的架构设计带来以下好处。
1)高扩展性:用户可以通过简单地向Kong集群中添加更多服务器实现横向扩展,这意味着用户在面对超大流量时可以轻松应对,整个集群可以保持正常负载,保证整个网关层服务可靠稳定。
2)模块化:Kong服务器的路由、服务、插件均是基于模块构建的,这些元素可以通过Admin API轻松配置,或者通过Kong管理GUI进行可视化管理。
3)与运行环境无关:Kong服务器理论上可以在任何环境中运行,也就是说,用户可以在云服务器或者内部网络环境中部署Kong服务器。
1.3.2 数据库
Kong网关支持PostgreSQL和Cassandra数据库。下面我们对它们做一些简单介绍。
1.PostgreSQL
PostgreSQL是一个功能强大的开源关系型数据库系统。它使用和扩展了SQL语言,并结合了许多安全存储和扩展复杂数据工作负载的功能。
PostgreSQL凭借其可靠性、数据完整性、强大的功能集、可扩展性以及开源社区赢得了良好的声誉,始终如一地提供高性能和创新的解决方案。
Kong选择PostgreSQL作为默认数据库存储。对于普通用户来说,其仅需了解如何使用即可。PostgreSQL的使用并不复杂,此处不做展开。读者可以访问PostgreSQL官网(https://www.postgresql.org/)了解更多PostgreSQL的相关知识。
2.Cassandra
Cassandra是一套开源分布式NoSQL数据库系统。它最初由Facebook开发,于2008年开源,用于储存收件箱数据等,集Google Big Table的数据模型与Amazon Dynamo的完全分布式架构于一身。此后,由于Cassandra良好的可扩展性,被Digg、Twitter等知名Web 2.0网站所采纳,成为一种流行的分布式结构化数据存储方案。
Cassandra的主要特点是,它不是一个单纯的数据库,而是由一堆数据库节点共同构成的一个分布式网络服务。Cassandra上的一个写操作会被复制到其他节点,读操作也会被路由到其他节点。对于Cassandra集群来说,其扩展性是容易实现的,只需在集群中添加节点。
更多Cassandra的相关特性,可以访问Cassandra官网(https://cassandra.apache.org/)了解详情。
1.3.3 Kong管理GUI
当前主流的开源Kong管理GUI有KongDashboard和KONGA,其中KongDashboard对新版本的Kong支持不好,建议读者使用KONGA。图1-8是KONGA的界面。KONGA的具体安装流程可以参考附录B。
图1-8 KONGA欢迎界面