大家好,我是飞哥!在我们的传统业务中,Nginx广泛应用于七层网关场景。但是近几年由于微服务的盛行。Nginx上的这条生态链也在不断进化。2007年,土生土长的中国人张义纯在Nginx的基础上开发了OpenResty。2009年,marco在OpenResty上开发了kong。在撰写本文时,该项目拥有33,000颗星。今天借助腾讯云,带大家学习一下kong的各种能力。一、Nginx如何演化成Kong在传统的互联网服务中,对网关的需求主要是反向代理、负载均衡、路由等基础功能。一个经典的业务架构图一般使用四层LVS进行外部IP汇聚,在第七层使用Nginx负责七层HTTPS协议访问、反向代理、负载均衡、路由。Nginx的每个Worker进程在底层使用一个epoll对象来高效管理海量socket连接上网络事件的处理。看飞哥之前写的,了解Nginx高性能网络的工作原理!本文。性能问题解决了,但是现在随着微服务的发展,服务被拆解得非常碎片化,降低了耦合度,也增加了服务统一管理的难度。例如服务发现。在Nginx中,所有的后端服务都是以静态配置文件的形式记录的。每当后端服务的IP发生变化时,都需要重新修改配置文件。但是在微服务时代,后端是用容器部署的,每个版本的发布都会导致IP的变化。而且,微服务时代还需要动态扩缩容,这会导致后端服务IP发生变化。传统的修改配置文件重新分配流量的方式显然不能满足需求。除了服务发现,微服务时代对网关还有其他新的需求,比如限流、协议转换、鉴权、安全保护等功能,都需要在网关中支持。我们都知道Nginx是用c语言写的。如果要在Nginx的基础上开发这些功能,成本还是挺高的。首先,C语言的门槛会比其他语言高。其次,每修改一个功能,Nginx都需要重新编译发布。幸运的是,土生土长的中国人张义纯想出了OpenResty,将LuaJIT嵌入到Nginx中,支持通过lua语言方便的扩展和开发Nginx的能力。这样每当有新的功能扩展时,只需要发布lua代码,然后重新加载Nginx就可以了。飞哥负责的搜狗浏览器的很多模块都是采用这种模式开发的,使用lua语言来扩展Nginx的功能。简单方便,基本接近原生Nginx的性能。有了OpenResty,打通了网关便捷功能扩展的技术路径。后来Mashape基于OpenResty迭代发布了新的网关Kong。我认为kong最优雅的设计是它的插件机制。网关支持基于插件方式扩展网关功能,提供60多个插件。当对网关有特定需求时,直接选择一个或多个插件即可轻松支持Nginx的新功能。Kong的插件机制是其高扩展性的根源。Kong可以方便的提供各种路由和服务的插件。Kong支持网关所需的所有基本功能。如果现有的插件不能满足您的需求,您也可以使用lua语言轻松开发出满足您需求的插件。2.显示kong的功能kong的环境还是有点复杂。它需要Postgres或Cassandra等数据库来管理路由配置、服务配置、上游配置等信息。您还需要安装konga(kong的最佳管理程序)。在腾讯云上的微服务引擎中,已经集成了konggateway,可以一键配置,非常方便。下面以腾讯云上的kong为例,给大家介绍一下kong的功能。腾讯云微服务引擎后台一键创建kong网关。选择配置并创建kong实例后,会自动一键生成内部依赖的数据库和管理程序konga。在konga管理后台,可以通过服务和路由菜单对服务和路由进行管理。几乎所有后续工作都可以通过konga界面可视化完成。例如,如果要添加证书,只需单击“CERTIFICATES”按钮即可。在ServerNameIndications中填写Certificate、Key、domainname,点击SUBMITCERTIFICATES提交即可。服务需要被监控。Google的站点可靠性工程师(SRE)团队有几个用于监控服务的黄金指标,例如延迟、流量和错误。Kong可以方便地与Prometheus等云原生组件对接,实现对这些黄金指标的监控功能。在腾讯云中,无需额外配置。这些功能是自动配置的,可以直接在实例的监控页面上查看。Kong还可以连接到ELK以查看和检索日志。如果想长期保存日志,可以直接开启CLS日志服务,实现长期保存。另外,在“PLUGINS”菜单中,腾讯云提供了多种内置插件,可以直接选择。包括接入认证、安全控制、运维支持、消息转换、流量控制等五大类,数十款插件。另外,界面上没有显示的是,腾讯云的kong还支持无损扩容、同城多活等高可用特性。3.总结微服务时代,很多功能都需要在网关上进行扩展。但是在Nginx中扩展这些功能并不是很方便。需要开发和熟悉C语言,发布的时候还得重新编译,很费力。OpenResty支持luaJIT,这使得通过简单的lua语言扩展网关的功能成为可能。kong网关根据微服务对网关的要求,通过插件机制扩展网关的功能。并开发了很多现成的插件,可以直接使用。最后借助腾讯云,给大家展示了如何通过konga配置网关,监控服务的黄金指标,进行日志检索。在部署运维方面,腾讯云也更加便捷、易用、稳定。总之,在互联网的今天,kong可能比nginx更适合做业务!
