概览
kong是一个基于nginx和OpenResty模块构建的API网关服务。提供http请求路由,后端服务负载均衡以及通过丰富的插件提供认证鉴权、流量调控、日志监控等功能。该网关目前应用在全球著名的API管理站点mashape上。
nginx是一个采用异步I/O,事件驱动的高性能Web服务器,也可以作为在企业内部提供基于http rpc的反向代理和负载均衡器。由于nginx的配置都是以静态文件的方式提供,而且nginx一般都是多台部署,导致nginx的运维管理变得比较复杂。许多运维的小伙伴都会写一些运维脚本,自动通过ssh命令远程连接到服务器去做一些配置更新的操作。
笔者所在公司也开发过一个基于nginx的软负载中心。用户可以在平台上为自己的服务配置反向代理以及负载均衡策略。用户所有的操作都会打包成一次对nginx配置的修改。修改指令会发送到每台nginx部署的一个agent上,最后由agent完成nginx配置文件的更新。
这些方法虽然可以达到自动化的管理nginx,但是本质上还是通过配置文件的方式去改变nginx的一些固定行为。在企业里面,特别是互联网公司常常需要定制一些功能。虽然可以为nginx开发一些模块,但是门槛较高,需要对nginx源码级的掌握。OpenResty为nginx引入的LuaJIT和lua-nginx-module,使我们可以在nginx的各个执行阶段编写一些lua脚本,极大地扩展了nginx的功能。OpenResty的作者已经用lua开发了许多工具库,使得我们可以在nginx中访问MySQL、Memcached、Redis。kong在此基础上实现了一个API网关服务。