AspNetCore微服务下的网关-Kong(一)
Kong是Mashape開源的高性能高可用API網(wǎng)關(guān)和API服務(wù)管理層。它基于OpenResty,進(jìn)行API管理,并提供了插件實(shí)現(xiàn)API的AOP。Kong在Mashape 管理了超過15,000 個(gè)API,為200,000開發(fā)者提供了每月數(shù)十億的請求支持。本文將從架構(gòu)、API管理、插件三個(gè)層面介紹Kong。
架構(gòu)
按照康威定律,我們系統(tǒng)架構(gòu)會拆的很散,系統(tǒng)由一堆服務(wù)組成,如下圖所示:
庫存服務(wù)、優(yōu)惠券服務(wù)、價(jià)格服務(wù)時(shí)之前都會做一些特殊處理,如限流、黑白名單,日志、請求統(tǒng)計(jì)。而這些處理幾乎是所有服務(wù)都需要的,這不就是我們常說的AOP嘛,當(dāng)我們服務(wù)多起來的時(shí)候,應(yīng)該將這些通用處理集中到一個(gè)地方進(jìn)行管理,如下圖所示:
和下圖有點(diǎn)相似:
1.為什么要用Kong作為NetCore下的API網(wǎng)關(guān)?
開源,云原生(Cloud-Native),ServiceMesh,快速,彈性,RESTful還有分布式微服務(wù)的抽象層
2.基于NGINX構(gòu)建的網(wǎng)關(guān),擁有更高的性能,并且在2015開源
3.活躍的社區(qū),在github上有111個(gè)Contributors,修復(fù)bug迅速,基本每3個(gè)月一個(gè)版本
4.支持插件化,目前支持的插件有32個(gè),包含授權(quán),安全,限流,Serverless,分析和監(jiān)控,轉(zhuǎn)換,日志。
5.支持企業(yè)版本和社區(qū)版本
架構(gòu)預(yù)覽
基于OpenResty(Nginx & Lua Scripting)
上圖很清晰的看見Kong的架構(gòu)圖,以Nginx作為基礎(chǔ), OpenResty構(gòu)建RESTful,支持集群和數(shù)據(jù)庫存儲數(shù)據(jù),插件化,還有支持用RESTful來管理端。
集群架構(gòu)預(yù)覽
這里講下Kong的集群原理吧,Kong在0.11.0版本之前用的是serf來做集群的,那么為什么不用serf做集群呢?開發(fā)者給出的理由如下:
1.依賴serf,serf并不屬于Nginx/OpenResty
2.這種依賴相互間通信來同步的機(jī)制對于deployment和容器化都有些不便
3.在運(yùn)行的Kong節(jié)點(diǎn)觸發(fā)serf需要一些阻塞的I/O
0.11.0版本的實(shí)現(xiàn)思路是以數(shù)據(jù)庫為中心,增加一個(gè)cluster events的表,任何Kong node都可以向數(shù)據(jù)庫發(fā)送變更消息,其他節(jié)點(diǎn)輪訓(xùn)數(shù)據(jù)庫改動,然后更新緩存內(nèi)容,如果有節(jié)點(diǎn)重啟連上數(shù)據(jù)庫節(jié)點(diǎn)就可以工作了。
Kong的安裝
Kong的安裝方式支持很多主流的平臺,目前不支持Windows,支持的安裝方式如下:
Kong的安裝,為了方便我這里就使用docker安裝了
1.創(chuàng)建專屬kong的網(wǎng)絡(luò)(docker的最佳實(shí)踐)--link 過時(shí)了啊
docker network create kong-net
2.選擇你使用的數(shù)據(jù)庫,默認(rèn)使用的是PostgreSQL
如果你使用的是Cassandra數(shù)據(jù)庫:
提示下:Cassandra >=3.0
docker run -d --name kong-database \ --network=kong-net \ -p 9042:9042 \ cassandra:3
如果你使用的是PostgreSQL
docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.6
3.數(shù)據(jù)庫遷移,初始化庫表結(jié)構(gòu):
4.啟動kong
docker run -d --name kong \--network=kong-net \ ? ?-e "KONG_DATABASE=postgres" \ ? ?-e "KONG_PG_HOST=kong-database" \ ? ?-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ ? ?-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \ ? ?-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \ ? ?-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \ ? ?-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \ ? ?-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \-p 8000:8000 \-p 8443:8443 \-p 8001:8001 \-p 8444:8444 \kong:latest5.看網(wǎng)關(guān)有沒有啟動
在本機(jī) curl -i?http://localhost:8001/,或者用瀏覽器訪問8001端口。如果出來一大堆json,表示成功。
以AspNetCore為例子訪問
mkdir AspNetCorecd AspNetCoredotnet new webapidotnet run我們以netcore做的api為例子訪問localhost:5000/api/values,前面網(wǎng)關(guān)搭建起來了,并且支持RESTful,現(xiàn)在有開源的dashboard,我們就用KongDashboard來演示,如何構(gòu)造搭建和訪問。
# 全局安裝kong-dashboard npm install -g kong-dashboard# 啟動 kong-dashboard kong-dashboard start --kong-url http://localhost:8001# 啟動kong-dashboard,并且自定義端口 kong-dashboard start \ ?--kong-url http://kong:8001 \--port [port]# 啟動kong-dashboard并且啟動基礎(chǔ)認(rèn)證 kong-dashboard start \ ?--kong-url http://kong:8001 \--basic-auth user1=password1 user2=password2# 看kong-dashboard 啟動參數(shù) kong-dashboard start --help啟動成功后用瀏覽器打開localhost:8080如下圖所示:
那么我們增加一個(gè)NetCoreAPI,在DashBoard,如圖所示:
因?yàn)槭荊ET請求,那我我們用瀏覽器訪問,瀏覽器 -> 網(wǎng)關(guān) -> NetCore程序。
打開瀏覽器直接訪問http://localhost:8000/api/values,返回["value1","value2"]則代表正常。
如下圖所示:
最后,AspNetCore微服務(wù)下的網(wǎng)關(guān)-Kong系列,后面會繼續(xù)更新,會講解到Kong的插件的使用,插件的開發(fā),使用的一些坑,網(wǎng)關(guān)性能分析和日志可視化,源碼解析等,歡迎大家關(guān)注我的github:?https://github.com/WithLin。
相關(guān)文章
微服務(wù)網(wǎng)關(guān)Ocelot
Ocelot API網(wǎng)關(guān)的實(shí)現(xiàn)剖析
Ocelot——初識基于.Net Core的API網(wǎng)關(guān)
Ocelot網(wǎng)關(guān)
Ocelot統(tǒng)一權(quán)限驗(yàn)證
Ocelot監(jiān)控
給Ocelot做一個(gè)Docker 鏡像
Ocelot + Consul實(shí)踐
.NET Core開源API網(wǎng)關(guān) – Ocelot中文文檔
.NET微服務(wù)體系結(jié)構(gòu)中為什么使用Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)
.NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)
.NET Core微服務(wù)之基于Ocelot實(shí)現(xiàn)API網(wǎng)關(guān)服務(wù)(續(xù))
Ocelot.JwtAuthorize:一個(gè)基于網(wǎng)關(guān)的Jwt驗(yàn)證包
API網(wǎng)關(guān)模式
.NET Core微服務(wù)之基于Ocelot+IdentityServer實(shí)現(xiàn)統(tǒng)一驗(yàn)證與授權(quán)
原文地址:https://www.cnblogs.com/WithLin/p/9343406.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的AspNetCore微服务下的网关-Kong(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Net Core集成Exceptionl
- 下一篇: 拥抱开源, Office 365开发迎来