KrakenD是一個高性能Api網關, api轉發的推薦做法是每個api一個配置項,也就是一個endpoint,其開發者認爲api網關和純粹的L7路由不一樣(文章鏈接).
因此社區版並沒有提供通配符*匹配(偷懶失敗😫),即 /product及其之後的所有url(如/product/detail) 全部轉發到指定的backend並把後續的url帶上,
如圖所示,如果backend的host是http://productService
/product | http://productService/product |
/product/detail | http://productService/product/detail |
但是KrakenD 企業版有提供一個 wildcard Routes插件, 功能類似,將滿足通配符的請求轉發到backend的url_pattern+通配符後url path.
社區版裏也有一種方法可以曲線救國,就是用多級url來進行匹配, 如果 /product/* 轉發到http://productService/* 一個endpoint, /product/*/*轉發到http://productService/*/* 另一個endpoint,具體的krakend.json配置如下,
{ "version": 2, "extra_config": {}, "endpoints": [ { "endpoint": "/product/{level1}", "method": "GET,POST,PATCH,PUT,DELETE", "output_encoding": "no-op", "backend": [ { "url_pattern": "/{level1}", "method": "GET,POST,PATCH,PUT,DELETE", "encoding": "no-op", "host": [ "http://productService" ] } ] }, { "endpoint": "/product/{level1}/{level2}", "method": "GET,POST,PATCH,PUT,DELETE", "output_encoding": "no-op", "backend": [ { "url_pattern": "/{level1}/{level2}", "method": "GET", "encoding": "no-op", "host": [ "http://productService" ] } ] } ] }
api url path會有多少級就配置對應多少個endpoint.
順便測試下Krakend性能
配置如下
R7 3700X
8G 3000 C16 * 2
.net 5.0-alpine
Krakend轉發到asp.net core,100w個請求, rps 1.4W
直接請求asp.net core,100w個請求, rps 4w