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 

 

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