KrakenD url匹配通配符 url_pattern wildcard

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 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章