Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >简单聊聊从 nginx 到 kong 的进化

简单聊聊从 nginx 到 kong 的进化

作者头像
开发内功修炼
发布于 2022-12-07 06:21:24
发布于 2022-12-07 06:21:24
1.4K0
举报
文章被收录于专栏:开发内功修炼开发内功修炼

大家好,我是飞哥!

在我们的传统业务中,Nginx 在七层网关场景中应用得很广。但是最近几年由于微服务的盛行。Nginx 上的这套生态链也在不断地进化。

2007 年国人章亦春大神在 Nginx 的基础上开发出了 OpenResty。2009 年 marco 又在 OpenResty 上开发出了 kong。截止到写稿时,该项目已经 33 k 的 star 了。

我今天借助腾讯云来带大家学习下 kong 所具备的各种能力。

一、Nginx 是如何进化到 kong 的

在传统的互联网服务中,对网关的主要诉求就是反向代理、负载均衡、路由等基础功能。

一个经典的业务的架构图一般是采用四层 LVS 做 对外 IP 收敛,在七层采用 Nginx 来负责七层 HTTPS 协议接入,反向代理、负载均衡、路由。

Nginx 的每个 Worker 进程在底层都使用一个 epoll 对象,高效管理海量的 socket 连接上的网络事件的处理。参见飞哥之前写的搞懂 Nginx 高性能网络工作原理!这篇文章。

性能上的问题是解决了,但是现在随着微服务的发展,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。

例如服务发现。在 Nginx 中,所有的后端服务都是以静态配置文件的形式记录的。每当后端服务的 IP 发生变化的时候,需要重新修改配置文件。

但在微服务时代,后端都是用容器部署的,每次版本发布都会导致 IP 的变化。而且微服务时代还需要动态的扩缩容,都会导致后端服务 IP 的变化。传统的修改配置文件才能重新分配流量的方式显然已经无法满足需要。

除了服务发现以外,微服务时代对网关还有其他一些新的需求,例如限流、协议转换、身份验证、安全防护等功能,都需要在网关中能够支持。

我们都知道,Nginx 是用 c 语言写的。如果想在 Nginx 的基础上开发这些功能,成本还是挺高的。首先 c 语言的门槛就会比其它语言要高一些。其次,每次功能的修改都需要重新编译发布 Nginx。

好在国人章亦春大神搞出了 OpenResty,将 Lua JIT 内嵌到了 Nginx 的内部,以支持通过 lua 语言对 Nginx 的能力进行方便地扩展开发。这样每当有新功能扩展的时候,只需要将 lua 代码发布一下,然后将 Nginx reload 一下就 ok 了。

飞哥之前所负责的搜狗浏览器在不少的模块中都是采用这种模式开发的,使用 lua 语言对 Nginx 功能进行扩展。既简单方便,还基本接近原生 Nginx 的性能。

有了 OpenResty,网关方便地进行功能扩展的技术路径就算是打通了。后来 Mashape 在 OpenResty 的基础上迭代发布了一个新网关 Kong。

我觉得 kong 最优雅的设计就是它的插件机制。该网关基于通过插件化的方式来支持网关功能的扩展,并提供了 60 多种插件。当对网关有特定需求的时候,直接选择一个或者几个插件就可以轻松在 Nginx 上支持新功能了。

Kong 的插件机制是其高可扩展性的根源,Kong 可以很方便地为路由和服务提供各种插件,网关所需要的基本特性,Kong 都如数支持。如果现有的插件不能满足你的,需求,你也可以使用 lua 语言轻松自己开发一个满足自己需求的插件。

二、展示 kong 的功能

kong 的环境配起来还是有一点点小复杂的。它需要 Postgres 或者 Cassandra数据库来管理路由配置,服务配置,upstream 配置等信息。还需要安装 konga(最好的 kong 的管理程序)。

在腾讯云上的微服务引擎中,已经集成了 kong 网关,可以一键配置,非常的方便。我就以腾讯云上的 kong 为例,来给大家展示一下 kong 所具备的功能。

在腾讯云微服务引擎后台一键就可以创建 kong 网关。

当你选择好配置并创建 kong 实例后,其内部依赖的数据库和管理程序 konga 就全都自动一键生成好了。

在 konga 管理后台中,可以通过 service、route 菜单来管理服务以及路由。

接下来几乎所有的工作都可以通过 konga 界面来可视化地完成。比如你想添加一个证书的话,直接点击 “CERTIFICATES” 按钮。填写 Certificate、Key,并填域名到 Server Name Indications 中,单击 SUBMIT CERTIFICATES 提交就完事。

服务是需要监控的。在 Google的网站可靠性工程师小组(SRE)对服务提出了几个需要监控的黄金指标,例如延迟、流量和错误。kong 可以很方便地和 Prometheus 等云原生组件对接起来,以实现这些黄金指标的监控功能。

在腾讯云中,不需要额外的配置,这些功能都自动的配置好了,直接在实例的监控页查看即可。

kong 也可以 ELK 打通,实现日志的查看与检索。

如果想将日志长期存储的话,直接开启 CLS 日志服务的话就可以实现长期保存。

另外在“PLUGINS”菜单中,腾讯云提供了各种内置插件可以直接选用。包含访问鉴权、安全控制、运维支持、报文转换、流量控制等五个大类,几十个插件。

另外在界面上没有展示的是,腾讯云的 kong 还支持无损扩容,同城多活等高可用特性。

三、总结

在微服务时代,需要在网关上扩展很多功能。但是在 Nginx 里这些功能扩展起来并不是很方便,需要开发熟悉 c 语言,而且发布起来也得重新编译,很费劲。

OpenResty 支持了 lua JIT,使得可以通过简单的 lua 语言来扩展网关的功能。kong 网关根据微服务对网关的需求,通过插件机制对网关进行功能扩展。并开发了许多现成的插件,直接拿来即用。

最后我又借助腾讯云给大家展示了是如何通过 konga 配置网关,对服务的黄金指标进行监控,并进行日志检索的。在部署使用以及运维上,腾讯云也更方便易用,而且也稳定。

总之,在今天的互联网中,kong 可能比 nginx 更加适合业务!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发内功修炼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kong网关 入门、实战与进阶
入门篇 第1章 全面了解Kong网关 Kong是一款基于OpenResty(Nginx+Lua模块)编写的高可用、易扩展的开源API网关,专为云原生和云混合架构而建,并针对微服务和分布式架构进行了特别的优化 微服务网关具有负载均衡、缓存、路由、访问控制、服务代理、监控、日志等多项功能。API网关在微服务架构中正是以微服务网关的身份存在 由于企业间信息交流和共享变得日益频繁,企业需要将自身数据、能力等向外开放,通常以接口的方式向外提供,如淘宝开放平台、腾讯的QQ开放平台和微信开放平台。开放平台的引入必然涉及客
yeedomliu
2021/11/19
2.3K0
Kong网关 入门、实战与进阶
选择Kong作为你的API网关
在微服务架构之下,服务被拆的非常零散,降低了耦合度的同时也给服务的统一管理增加了难度。如上图左所示,在旧的服务治理体系之下,鉴权,限流,日志,监控等通用功能需要在每个服务中单独实现,这使得系统维护者没有一个全局的视图来统一管理这些功能。API 网关致力于解决的问题便是为微服务纳管这些通用的功能,在此基础上提高系统的可扩展性。如右图所示,微服务搭配上 API 网关,可以使得服务本身更专注于自己的领域,很好地对服务调用者和服务提供者做了隔离。
kirito-moe
2018/07/25
3.5K0
选择Kong作为你的API网关
kong笔记——认识kong
最近公司打算重构API网关,给定的硬性条件是支持lua脚本,kubernetes可部署,可解析lua,另外需要支持身份认证,IP黑白名单,限流,负载均衡等一些功能,为此,在技术选型上锁定了kong以及APISIX,最终选择了kong。
全栈程序员站长
2022/09/13
1.5K1
云原生架构下的 API 网关实践:Kong (一)
,有点懒怠。最近抽空捣鼓了 Kong 网关的使用实践,微服务网关之前的文章也写过,读者可以翻看之前的文章推送。插件是 Kong 扩展的重要特性,这次除了会介绍 Kong 的相关实践之外,还会讲解 Kong 自定义插件的实现。
aoho求索
2019/07/30
2.6K0
云原生架构下的 API 网关实践:Kong (一)
Docker 安装 KONG 带你玩转 API 网关
在当今的软件开发中,API 网关已成为微服务架构中不可或缺的一环。它不仅简化了服务间的通信、提供了统一的入口,还能在安全、监控、限流等方面发挥巨大作用。
南山竹
2024/07/11
4700
Docker 安装 KONG 带你玩转 API 网关
Nginx 是如何进化到 kong 的
一个经典的业务的架构图一般是采用四层 LVS 做 对外 IP 收敛,在七层采用 Nginx 来负责七层 HTTPS 协议接入,反向代理、负载均衡、路由。
MickyInvQ
2023/03/10
2650
Nginx 是如何进化到 kong 的
云原生架构下的 API 网关实践: Kong (二)
Kong 是 Mashape 开源的一款云原生架构下的分布式 API 网关,其性能和可扩展性在同类组件中,表现都很优异。Kong 官方提供了很多直接可用的插件,此外,Kong 还可以通过插件扩展已有功能。
aoho求索
2019/08/28
2.3K0
微服务 - kong安装,API网关设计(原理篇)
微服务实践的第二个关键组件,微服务API网关设计,API网关是对微服务做统一的鉴权、限流、黑白名单、负载均衡等功能实现,这篇我们先来介绍Api网关的意义和安装kong/konga需要的组件。
stark张宇
2023/04/26
8380
微服务网关方案:Kong & Nacos
前面我们介绍了 Spring Cloud 体系下的网关 Gateway(Zuul)。事实上,还有很多开源且广泛应用的网关方案,例如 Kong 和 Nacos。本篇将先介绍这两种网关,包括架构和主要原理,并给出集中网关方案的对比。
程序员架构进阶
2021/04/15
2.5K0
微服务网关方案:Kong & Nacos
文章连接:https://mp.weixin.qq.com/s/Kk6Cl7n0sFGgCyyZtExa6A
程序员架构进阶
2021/04/14
2.1K0
微服务网关方案:Kong & Nacos
CloudBluePrint-Chapter 1.6 : 云上应用技术架构-API网关
在分布式架构中,一个复杂的应用被拆分为多个小而独立的服务,每个服务都运行在自己的进程中,并通过轻量级的机制(如HTTP RESTful API)进行通信。每个服务都围绕一个特定的业务功能进行构建,并可以独立地进行开发、部署和扩展。
行者深蓝
2023/09/07
4930
微服务网关除了zuul、spring cloud gateway还有更出色的
在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务。甚至有时候需要对请求进行一些安全、负载均衡、限流、熔断、灰度等中间操作,基于此类种种的客观需求一个类似综合前置的系统就产生了,这就是API网关(API Gateway)。API网关作为分散在各个业务系统微服务的API聚合点和统一接入点,外部请求通过访问这个接入点,即可访问内部所有的REST API服务。目前常用的微服务网关有zuul、gateway,今天来简单介绍一下另一种选择——Kong 。说到Kong可能对大家有点陌生,我们来先了解下另一种不陌生的中间件——OpenResty。
码农小胖哥
2019/12/10
2K0
微服务网关除了zuul、spring cloud gateway还有更出色的
Kong网关:入门、实战与进阶-重读
Kong、OpenResty都是基于Nginx打造的新一代服务器。它们兼具Web服务器的功能,但侧重于网关层特性的延伸
yeedomliu
2023/12/21
7.8K0
Kong网关:入门、实战与进阶-重读
原创好文!亿级流量网关设计思路
本文准备围绕七个点来讲网关,分别是网关的基本概念、网关设计思路、网关设计重点、流量网关、业务网关、常见网关对比,对基础概念熟悉的朋友可以根据目录查看自己感兴趣的部分。
cxuan
2021/03/12
2K0
云原生时代的流量入口:Envoy Gateway
流量入口代理作为互联网系统的门户组件,具备众多选型:从老牌代理 HAProxy、Nginx,到微服务 API 网关 Kong、Zuul,再到容器化 Ingress 规范与实现,不同选型间功能、性能、可扩展性、适用场景参差不齐。当云原生时代大浪袭来,Envoy 这一 CNCF 毕业数据面组件为更多人所知。那么,优秀“毕业生”Envoy 能否成为云原生时代下流量入口标准组件?
深度学习与Python
2020/08/07
2.3K0
云原生时代的流量入口:Envoy Gateway
亲历者复盘:网易的 Envoy 网关选型、开发与改造
采访 | 蔡芳芳 编辑 |王一鹏 发现并应用一个性能卓越的、云原生、能适应至少未来五年架构趋势的 API 网关,现今已经成为基础架构团队的必做命题,否则整个基础设施架构可能是存在某些先天缺陷的,且维护成本相当之高。Envoy 正是在这种背景下走进大众视野,且非常契合各大技术团队的下一代网关“明星选手”。 Google、IBM、微软等跨国巨型企业对 Envoy 的使用已经相当深入,这种信任并非源于简单的,诸如“云原生”、“下一代”之类的噱头概念,而是可从其 TPS 表现获得更直观的印象。早在 2020
深度学习与Python
2023/02/28
9250
亲历者复盘:网易的 Envoy 网关选型、开发与改造
基于Openresty+Lua实现微服务Api 网关
微服务网关(Microservices Gateway)是微服务架构中的一种关键组件,它作为一个入口点,接收客户端的请求并将其路由到相应的微服务上。它起到了前端与后端微服务之间的“门户”的作用,协调整个微服务系统的请求流量和服务访问。具备的功能如下:
用户1107783
2023/09/11
1.8K0
基于Openresty+Lua实现微服务Api 网关
API 网关 kong 实战
目前互联网后台架构一般是采用微服务,或者类似微服务的形式,应用的请求通常需要访问多个后台系统。如果让每一个后台系统都实现鉴权、限流、负载均衡、审计等基础功能是不合适的,通用的做法是把这些功能抽离出来放到网关层。Kong是目前最流行的网关平台。
王录华
2019/07/31
3.8K1
万字讲解API网关的来龙去脉
今天准备再详细讲解下 API 网关的基础概念,使用场景和核心功能,以及基于 API 网关核心引擎做的 API 全生命周期管理功能扩展等,最好再介绍下当前主流的开源 API 网关引擎。
好好学java
2020/09/15
1.7K0
万字讲解API网关的来龙去脉
基于Kong开发一个token鉴权插件
随着微服务场景的广泛应用,前端经常需要访问多个后端微服务,这时候往往需要一个API网关对请求做一些通用处理。通用处理指的是由网关层去实现一些非业务类的功能,比如负载均衡、权限校验、频率限制、协议转换、日志监控、缓存管理、熔断降级等,将这些通用功能交给网关层统一实现,比起各个业务自己分别实现会更合适。
sophiasong
2020/07/01
5.5K1
基于Kong开发一个token鉴权插件
推荐阅读
相关推荐
Kong网关 入门、实战与进阶
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档