花5分钟时间来了解一下高性能网关Kong会有意外收获
前言
前几天开源发布了 Kong.Net 项目,收到了大量园友的反馈,开源当天就突破了 100 个star ,可喜可贺,但是从侧面也说明,我们 .NetCore 阵营真的非常需要拥抱开源,应该敞开心扉,集众家之长,为我所用,针对有些朋友还不太了解 Kong 的使用方法,本文作一些简单的介绍。
项目地址:https://github.com/lianggx/Kong.Net 请为我们点击 star 加⭐⭐
声明
本文准备介绍市面上的一些常见的网关,不吹不黑,实事求是,理性讨论,从我做起。
微服务网关
下图直观的为我们展示了Kong网关在微服务中的作用

还可以和 kubernetes 进行无缝集成

(来源:https://konghq.com/solutions/kubernetes-ingress/)
上图是Kong和K8s相结合的结构图,通过Kong网关,可以使业务系统的集成工作变得更加高效且易于管理。
升级位服务网格等部署方案
除了上面的应用场景,Kong 还带来了下面的服务网格等各种部署方案,任君选择,童叟无欺!

(来源:https://konghq.com/solutions/kubernetes-ingress/)
为什么选择了 Kong
1. Spring系列
其实在选择 Kong 之前,我也曾尝试了其它的网关,运维级别的比如Nginx咱就不提了,单就 Spring-cloud Gateway 几乎可以一招吃遍天下,况且还有阿里这个大厂做护法,Nacos/Dubbo 这种实验室+超高流量的实践后开源,那也是极其可怕的,唯一的不好就是除了Java外其它语言没什么机会与之结合,非用不可也不是不行,但是就是非常麻烦,中小企业可以通过上云的方案使用云原生,但是对于自建机房、自建网关和服务集群的,或者是不方便上云的企业来说,只能选择Java。
2. 自带网关
.NetCore 在网关方面也不是没有建树,Ocelot 的star也不少了,但是对于成功的商业应用案例来说,缺少一个有力的推广人,特别是对于http请求的转发,其基于HttpClient的特性,使得在大并发的情况下,反应非常迟钝,一句话:底层太重。不能轻装上阵,就好像转换到Linux后,总是在某些方面有点水土不服。
3. 最终选择
博客园也有大量关于Ocelot对于其它网关的性能对比,这里我就不再一一列出了,大家有兴趣可以在站内搜索一下关键字Ocelot。我在Ocelot的github项目上仔细的查看了每一条issue,并且拿这些issue的回答时间和Kong的issue回答作对比,发现Kong的issue问题响应时间大大快于Ocelot,这可能是因为Kong的贡献值高达200多人的原因
Kong的高效得益于lua和高水平的贡献者,该语言是nginx的开发语言,nginx的高效众所周知,Kong通过Kong Igress Controller和K8s完美结合
为什么需要Kong.Net客户端
还有朋友反馈,既然Kong网关如此完善,RESTFul API 如此高效,为什么还需要Kong.Net客户端呢?这个问题提的非常好!
1. 营销故事
沃尔玛曾经有一个经典的营销案例,说的是啤酒和尿片的故事,说营销人员通过调查,,发现许多男人在下班后都会到超市买给孩子买尿片,他们就想到,如果在尿片旁边摆上啤酒,这些男人会不会同时将啤酒丢人购物车中呢,通过一段时间的观察,超市里的啤酒销量大幅提升。从这个故事中我们发现,便利性和易用性是多么的重要,如果尿片和啤酒在分别堆放在两个不同的货架上,那么如果一个买尿片的男人很大概率不会想起来买啤酒,或者说绕很远的距离去购买啤酒。
从这个场景中我们看到,便利性是多么的重要!
2. 为了快速接入
通过Kong.Net,一个从未接触过Kong网关的人就是可以通过几行代码完成接入,他不需要去理解RESTFul API的接口文档,不用担心传错参数,不用关心是否在配置过程中是否由于某个配置错误引起不明BUG,这些都是极大的提升开发效率的行为,特别是进一步,通过社区的力量,我们可以一起完善这个SDK,使之越来越高效,BUG越来越少,接入越来越快,这就是开源的力量!
Kong 的安装部署
Kong网关的安装部署非常简单,有两种部署方式,rpm 和 docker ,建议 docker方式部署,因为实在是太方便了,只需要复制官网的几个命令,相信我,你不用一分钟就可以部署起来,这里我就不再搬运官方的 docker 安装部署教程了,大家可以参考下面的链接,主要怕官网有更新的话,我这搬运有可能就过时了
https://docs.konghq.com/install/docker/?_ga=2.264012361.438943297.1562658881-406131744.1553753787
Kong Dashboard 控制台
Kong 网关的 Dashboard 目前有两个毕竟大的开源的Dashboard,分别是
// pgbi/kong
https://github.com/PGBI/kong-dashboard/commits/3.0
// pantsel/konga
https://github.com/pantsel/konga
从维护更新的频率来看,pgbi/kong 在走下坡路,而konga维护良好,建议大家使用konga,他们俩的操作界面大同小异,比如我目前使用的是Konga

安装方式推荐:docker
Kong 插件
Kong的插件基于lua编写,内置插件非常丰富,支持验证、安全、流量控制、监控和统计、日志等等,甚至支持自定义插件,你也可以编写自己的插件加入到Kong网关中

就拿流量控制来说,其控制粒度可以具体某个Target,也可以应用到Global,非常灵活。
Kong 响应
在使用Kong进行转发后,Kong会向客户端写入一个默认的头信息

除了默认的头信息,你也可以在Kong服务配置中向客户端写入自定义的响应头信息,非常方便。
健康检查
Kong的健康检查机制非常有意思,分为主动式检查和被动式检查两种,而且两种健康检查方式的配置基本相同,主动检查会修改客户端的状态,将不健康的客户端移除,将恢复健康后的客户端主动加入服务集群,而被动式检查则正好相反;特别有意思的是,其健康检查的路径为根目录“/”,当然也支持定义路径,最重要的是可以自定义httpstatus代码,比如你可以定义4.3、404为健康状态,也可以定义 200、302等一切httpstatus代码。
结束语
优秀的开源产品值得我们深入了解,并结合.NetCore实际使用,这会让.NetCore的生态越来越完善,让社区更强大。
项目地址:https://github.com/lianggx/Kong.Net 请为我们点击 star 加⭐⭐
花5分钟时间来了解一下高性能网关Kong会有意外收获的更多相关文章
- 整合一套高性能网关Kong
前言 相信大家对Api网关都比较的熟悉,我们之前的文章也介绍过ASP.NET Core的网关Ocelot,也介绍过Spring Cloud Gateway.说到网关的主要功能,其实总结起来就两个字&q ...
- 花40分钟写一个-CBIR引擎-代码公开
浏览网页的时候发现一篇不错的文章"用Python和OpenCV创建一个图片搜索引擎的完整指南"http://python.jobbole.com/80860/.作者在浏 ...
- 花十分钟,让你变成AI产品经理
花十分钟,让你变成AI产品经理 https://www.jianshu.com/p/eba6a1ca98a4 先说一下你阅读本文可以得到什么.你能得到AI的理论知识框架:你能学习到如何成为一个AI产品 ...
- 【MySQL】花10分钟阅读下MySQL数据库优化总结
1.花10分钟阅读下MySQL数据库优化总结http://www.kuqin.com2.扩展阅读:数据库三范式http://www.cnblogs.com3.my.ini--->C:\Progr ...
- 获取当前时间UTC时间的下一个15分钟时间点
ZonedDateTime zdt = ZonedDateTime.now(ZoneOffset.UTC); int now15Minute = zdt.getMinute() / P15MINUTE ...
- SQL Server时间粒度系列----第5节小时、分钟时间粒度详解
本文目录列表: 1.SQL Server小时时间粒度2.SQL Server分钟时间粒度 3.总结语 4.参考清单列表 SQL Server小时时间粒度 这里说的时间粒度是指带有 ...
- java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
偶然在群里看到有人问到大数据查询,自己也就想了小艾改如何解决,从从1000万个随机数中查找出相同的10万个随机数花的最少时间, 谈到效率,自然是hashmap莫属. import java.util. ...
- 所有城市list每次从页面花1段时间抽取后写入到数组,
所有城市list每次从页面花1段时间抽取后写入到数组,
- WdatePicker控件Javascript取得当前时间、取得减30分钟时间
1.取得当前时间 function getNowFormatDate() { var date = new Date(); var seperator1 = "-"; var se ...
随机推荐
- 【转】opencart 源码解析
前台控制程序列表-catalog/controller Catalog|controller|account 会员功能 |—— account.php 会员功能主頁|—— address.php 会员 ...
- Win10如何设置开机自动登录
原文:Win10如何设置开机自动登录 第一步: 小娜搜索"netplwiz",进入用户账户设置. 第二步: 先勾选选中一次,要使用本计算机,用户必须输入用户名和密码. 第三步: 取 ...
- qt下的时钟程序(简单美丽,继承自QWidget的Clock,用timer调用update刷新,然后使用paintEvent作画就行了,超详细中文注释)good
最近抽空又看了下qt,发现用它来实现一些东西真的很容易比如下面这个例子,绘制了个圆形的时钟,但代码却清晰易懂[例子源自奇趣科技提供的例子]因为清晰,所以就只写注释了,吼吼其实也就这么几行代码头文件 / ...
- Socket小白篇-附加TCP/UDP简介
Socket小白篇-附加TCP/UDP简介 Socket 网络通信的要素 TCP和UDP Socket的通信流程图 1.Socket 什么是Socket Socket:又称作是套接字,网络上的两个程序 ...
- List<T>多字段排序的一个通用类
本文中的方法旨在解决通用的问题,非常注重效率的地方,还应该针对具体的类去写排序方法. 废话不多说,直接上代码 具体使用场景: 要排序的类 1 public class bb 2 { 3 public ...
- 在UWP 将BitmapImage转换为 WriteableBitmap
原文: How to convert BitmapImage to WriteableBitmap in Universal application for windows 10? 您可以直接从文件将 ...
- Go语言v1.8正式发布,有显著的性能提升和变化(go适合服务器编程、网络编程)
前言 Go语言现在在服务端的网络编程领域越来越火,尤其像IM即时通讯应用这种富网络应用且对服务端网络性能要求极高的场景,很高兴看到Golang发布了1.8正式版,希望在多核架构横行的时代多一些这种顺应 ...
- Qt中连接到同一signal的多个slots的执行顺序问题(现在是看连接顺序,以前是无序的)
in the order they have been connected 起源 前些天忘记在哪儿讨论过这个问题,今天在csdn又看到有网友问这个问题,而其他网友却无一例外的给出了“无序”这个答案. ...
- file.delete()与file.deleteOnExit(); 的区别
file.delete() //删除文件,删除的是创建File对象时指定与之关联创建的那个文件.这是一个立刻执行的操作 file.deleteOnExit(); //在JVM进程退出的时候删除 ...
- 专访Rust——由Mozilla开发的系统编程语言(目标人群就是那些纠结的C++程序员,甚至也是他们自己)
Rust是由Mozilla开发的专门用来编写高性能应用程序的系统编程语言.以下是对Rust的创始人——Graydon Hoare的采访. Graydon Hoare,自称为职业编程语言工程师,从200 ...