概念
- Kong是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的开源API
网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别的优化。
架构
特性
- 功能插件化:易插拔,可以添加到请求生命周期的任何位置;
- 高性能:基于OpenResty,Nginx保证性能;
- 高扩展性:支持水平扩展,进行负载均衡,构建网关层集群,保证整个网关层服务可靠稳定;
- 与运行环境无关;
组成
- Kong Server :基于nginx的服务器,用来接收API请求。
- Apache Cassandra/PostgreSQL :用来存储操作数据。
- Kong dashboard:官方推荐UI管理工具(收费),当然,也可以使用 restfull 方式 管理admin api
关联概念释疑
OpenResty
- 本质是 由Nginx 模块包和Lua 脚本库组成的框架。
- 可以做为高性能的Web Server。
- 应用:目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。
Nginx
优点
- 轻量级:同样起web 服务比apache占用更少内存及资源
- 抗并发nginx 处理请求异步非阻塞而apache 则阻塞型高并发下nginx 能保持低资源低消耗高性能
- 高度模块化设计编写模块相对简单
- 社区活跃各种高性能模块出品迅速
性能高
- 首先,nginx采用的是多进程模式,好处是什么呢?首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低风险。
- Nginx是采用异步非阻塞的方式去处理请求的,什么是异步非阻塞呢?其实就是当一个线程调用出现等待的io之类的情况时,而不是阻塞在这里,而是去处理别的事情,等io准备好了,然后再去执行。
Lua
- Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为程序提供灵活的扩展和定制功能。
- 一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。