前幾天開源發佈了 Kong.Net 項目,收到了大量園友的反饋,開源當天就突破了 100 個star ,可喜可賀,可是從側面也說明,咱們 .NetCore 陣營真的很是須要擁抱開源,應該敞開心扉,集衆家之長,爲我所用,針對有些朋友還不太瞭解 Kong 的使用方法,本文做一些簡單的介紹。nginx
項目地址:https://github.com/lianggx/Kong.Net 請爲咱們點擊 star 加⭐⭐git
本文準備介紹市面上的一些常見的網關,不吹不黑,實事求是,理性討論,從我作起。github
(來源:https://konghq.com/solutions/kubernetes-ingress/)docker
上圖是Kong和K8s相結合的結構圖,經過Kong網關,可使業務系統的集成工做變得更加高效且易於管理。安全
除了上面的應用場景,Kong 還帶來了下面的服務網格等各類部署方案,任君選擇,童叟無欺!併發
(來源:https://konghq.com/solutions/kubernetes-ingress/)運維
1. Spring系列微服務
其實在選擇 Kong 以前,我也曾嘗試了其它的網關,運維級別的好比Nginx咱就不提了,單就 Spring-cloud Gateway 幾乎能夠一招吃遍天下,何況還有阿里這個大廠作護法,Nacos/Dubbo 這種實驗室+超高流量的實踐後開源,那也是極其可怕的,惟一的很差就是除了Java外其它語言沒什麼機會與之結合,非用不可也不是不行,可是就是很是麻煩,中小企業能夠經過上雲的方案使用雲原生,可是對於自建機房、自建網關和服務集羣的,或者是不方便上雲的企業來講,只能選擇Java。性能
2. 自帶網關lua
.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網關如此完善,RESTFul API 如此高效,爲何還須要Kong.Net客戶端呢?這個問題提的很是好!
1. 營銷故事
沃爾瑪曾經有一個經典的營銷案例,說的是啤酒和尿片的故事,說營銷人員經過調查,,發現許多男人在下班後都會到超市買給孩子買尿片,他們就想到,若是在尿片旁邊擺上啤酒,這些男人會不會同時將啤酒丟人購物車中呢,經過一段時間的觀察,超市裏的啤酒銷量大幅提高。從這個故事中咱們發現,便利性和易用性是多麼的重要,若是尿片和啤酒在分別堆放在兩個不一樣的貨架上,那麼若是一個買尿片的男人很大機率不會想起來買啤酒,或者說繞很遠的距離去購買啤酒。
從這個場景中咱們看到,便利性是多麼的重要!
2. 爲了快速接入
經過Kong.Net,一個從未接觸過Kong網關的人就是能夠經過幾行代碼完成接入,他不須要去理解RESTFul API的接口文檔,不用擔憂傳錯參數,不用關心是否在配置過程當中是否因爲某個配置錯誤引發不明BUG,這些都是極大的提高開發效率的行爲,特別是進一步,經過社區的力量,咱們能夠一塊兒完善這個SDK,使之愈來愈高效,BUG愈來愈少,接入愈來愈快,這就是開源的力量!
Kong網關的安裝部署很是簡單,有兩種部署方式,rpm 和 docker ,建議 docker方式部署,由於實在是太方便了,只須要複製官網的幾個命令,相信我,你不用一分鐘就能夠部署起來,這裏我就再也不搬運官方的 docker 安裝部署教程了,你們能夠參考下面的連接,主要怕官網有更新的話,我這搬運有可能就過期了
https://docs.konghq.com/install/docker/?_ga=2.264012361.438943297.1562658881-406131744.1553753787
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的插件基於lua編寫,內置插件很是豐富,支持驗證、安全、流量控制、監控和統計、日誌等等,甚至支持自定義插件,你也能夠編寫本身的插件加入到Kong網關中
就拿流量控制來講,其控制粒度能夠具體某個Target,也能夠應用到Global,很是靈活。
在使用Kong進行轉發後,Kong會向客戶端寫入一個默認的頭信息
除了默認的頭信息,你也能夠在Kong服務配置中向客戶端寫入自定義的響應頭信息,很是方便。
Kong的健康檢查機制很是有意思,分爲主動式檢查和被動式檢查兩種,並且兩種健康檢查方式的配置基本相同,主動檢查會修改客戶端的狀態,將不健康的客戶端移除,將恢復健康後的客戶端主動加入服務集羣,而被動式檢查則正好相反;特別有意思的是,其健康檢查的路徑爲根目錄「/」,固然也支持定義路徑,最重要的是能夠自定義httpstatus代碼,好比你能夠定義4.三、404爲健康狀態,也能夠定義 200、302等一切httpstatus代碼。
優秀的開源產品值得咱們深刻了解,並結合.NetCore實際使用,這會讓.NetCore的生態愈來愈完善,讓社區更強大。
項目地址:https://github.com/lianggx/Kong.Net 請爲咱們點擊 star 加⭐⭐