網關神器Kong(一):介紹
物聯網網關神器 Kong ( 一 )
當你看到這只大猩猩的時候,是不是感覺優點萌萌的。哈哈,這就是我們這篇文章要講解的一個開源項目 – Kong( 云原生架構下的分布式API 網關 )。
為什么說 Kong 是物聯網網關神器?
在 IOT 系統架構中,為了保證系統的魯棒性和高可擴展性。我們需要一個強大的 API 網關來承受住遍布各地的 IOT 設備所傳輸的信息。插件架構設計的 Kong 使得它具有了強大的兼容性,和可擴展性。TCP 和 UDP
原始流的支持,更是使得它可以適配多種協議,完美的解決了 IOT 系統中的協議適配問題。
Kong 的前世今生
Kong 是由 Mashape 開源的一款具有高性能、高可用特點的云原生架構下的分布式 API 網關?;?Nginx 和 OpenResty 的 Kong 獲得了非常高的性能, Lua
腳本的插件系統架構設計也使得其具有高擴展性的能力后并不會丟失性能。
什么是插件系統架構設計?
即契約式編程,由于無法像正常開發團隊一樣擁有那么多的機會溝通與交流。所以核心服務就會對外定義一些規范與接口,用于提供擴展能里。而開發者只需要按照規范進行遵守即可。這樣保證了插件開發流程的簡潔與高效。
什么是云原生?
2015年由谷歌牽頭成立了云原生計算基金會( CNCF ),其對云原生應用提出了三大特性:
容器化:基于容器化的應用發布,實現高隔離、平臺無關性等。用來簡化大量服務的持續交付時所需要的龐大維護工作。
代表應用 Docker
服務編排:為基于容器的服務提供強大的編排和調度能力,從而發揮容器的良好隔離、資源分配與編排管理的優勢。
代表應用 Kubernetes ( k8s)
微服務的分布式架構:將服務進行細分,將功能模塊分解到各個獨立的子系統中用以實現解耦或實現業務人員的分配。
Kong 的基本架構
那么,我們回到 Kong,來看一下 Kong 的整體架構。
Kong 基于 Nginx 來實現 Api Gateway 基本的負載均衡、反向代理等功能。由 C 語言編寫的 Nginx 有著超高的性能和低內存開銷。
OpenResty 是一個基于 Nginx 的庫,它將 Nginx 進行封裝,并提供了整個生命周期的 Hook( 鉤子 ),使得開發者可以通過 Lua 腳本對 Nginx 進行插件化管理。
什么是 Hook ?
鉤子編程( hooking
),也稱作“掛鉤”,是計算機程序設計術語,指通過攔截軟件模塊間的函數調用、消息傳遞、事件傳遞來修改或擴展操作系統、應用程序或其他軟件組件的行為的各種技術。處理被攔截的函數調用、事件、消息的代碼,被稱為鉤子(hook
)。
簡單來說就是在每個生命周期調用一個函數,而你只要實現這個函數就可以進行中間操作等功能。例如:
你想要做飯,做飯的整個生命周期可以概括為 洗鍋->燒油->放菜->出鍋。
而 Hook 則是在每個步驟中會調用的。比如在洗鍋后會調用洗鍋的 Hook 、燒油后會調用一個燒油的 Hook 。
而你則可以實現洗鍋的 Hook,在里面做一些事。比如你實現了洗鍋的 Hook,其功能是檢查鍋洗的干不干凈。
那么系統將會在執行到洗鍋這個步驟后檢查有沒有人實現洗鍋的 Hook,結果就發現了你聲明的檢查洗鍋的函數。接下來就會調用你寫的函數來檢查鍋洗的干不干凈。
Kong 使用PostgreSQL 或 Cassandra 來對其配置文件進行持久化存儲,使得可以進行集群管理。
Kong 提供了插件模型,使用 Lua 腳本來對 Nginx 整個生命周期進行擴展。實現了一些常用插件( 限流、熔斷、驗權等 )。
什么是限流與熔斷?
在系統承受到特別大的流量壓力時,限流與熔斷就顯得格外重要。主要用于保護核心服務不會被壓力所擊垮。
限流:
即對訪問的客戶端進行并發訪問速度的限制。
最簡單的拒絕服務,直接將用戶的請求拒絕掉。
服務降級,對一些服務進行降級或直接關閉一些服務。
特權請求, 可以對一些特殊身份的請求進行放行,其他拒絕。
可以將請求進行延時處理。
熔斷:
類似家里的保險絲。熔斷器會判斷當前服務的存活狀態。在服務被擊垮后可以由熔斷器自行返回錯誤,而不用繼續對請求進行等待與重試。
Kong 提供了 Http/Rest 的接口來實現配置 ,使得其可以更簡單的構建圖形化界面進行動態配置。
為什么使用 Kong?
了解了Kong 的基本架構,我們來談談為什么使用 Kong 與 Kong 的特點。
Cloud-Native:與平臺無關,Kong可以在任何平臺上運行-從裸機到容器-并且可以在本機上的每個云上運行。
Kubernetes-Native:使用官方的Ingress Controller通過本地Kubernetes CRD聲明性地配置Kong,以路由和連接所有L4 + L7通信。
動態負載平衡:跨多個上游服務對流量進行負載平衡。
基于哈希的負載平衡:具有一致的哈希/粘性會話的負載平衡。
熔斷器:智能跟蹤不健康的上游服務。
運行狀況檢查:主動和被動監視您的上游服務。
服務發現:在第三方DNS解析器(例如Consul)中解析SRV記錄。
無服務器:直接從Kong調用和保護AWS Lambda或OpenWhisk功能。
WebSockets:通過WebSockets與您的上游服務進行通信。
gRPC:與gRPC服務進行通信,并通過日志記錄和可觀察性插件觀察流量
OAuth2.0:輕松將OAuth2.0身份驗證添加到您的API。
日志記錄:通過HTTP,TCP,UDP或磁盤記錄對系統的請求和響應。
安全性:ACL,僵尸程序檢測,允許/拒絕IP等…
Syslog:登錄到系統日志。
SSL:為基礎服務或API設置特定的SSL證書。
監視:實時監視提供關鍵的負載和性能服務器指標。
轉發代理:使Kong連接到中間透明HTTP代理。
認證:HMAC,JWT,基本等。
速率限制:基于許多變量來阻止和限制請求。
轉換:添加,刪除或處理HTTP請求和響應。
緩存:在代理層緩存并提供響應。
CLI:從命令行控制Kong群集。
REST API:Kong可以使用其RESTful API進行操作,以實現最大的靈活性。
地理復制:跨不同區域的配置始終是最新的。
故障檢測和恢復:如果您的Cassandra節點之一發生故障,則Kong不會受到影響。
集群:所有Kong節點自動加入集群,并在各個節點之間更新其配置。
可擴展性:Kon本質上是分布式的,只需添加節點即可水平擴展。
性能:Kong通過擴展和使用NGINX作為核心輕松處理負載。
插件:可擴展的體系結構,用于向Kong和API添加功能。
總結
本篇文章簡單的講解了一下 Kong API GateWay 的架構與特點。帶領大家簡單了解 Kong 是一個怎么樣的存在與定位。下篇我們將來介紹它是如何安裝與部署的。
NAT Nginx 微服務
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。