启动命令和配置详解

Pixiu 启动命令

Pixiu 分为两个形态 Gateway 和 Sidecar,目前 Pixiu 可执行程序的命令如下所示,其中 pixiu 是可执行文件名称。注意,-c 后是本地配置文件的绝对路径。

  1. pixiu gateway start -c /config/conf.yaml

配置详解

Pixiu 接受 yaml 格式的文件作为其主配置文件,其中对 Pixiu 的各类组件进行配置。我们以快速开始中的配置文件为例,详细讲解其中的组成部分,并且列出可能的扩展。

  1. static_resources:
  2. listeners:
  3. - name: "net/http"
  4. protocol_type: "HTTP"
  5. address:
  6. socket_address:
  7. address: "0.0.0.0"
  8. port: 8883
  9. filter_chains:
  10. filters:
  11. - name: dgp.filter.httpconnectionmanager
  12. config:
  13. route_config:
  14. routes:
  15. - match:
  16. prefix: "*"
  17. http_filters:
  18. - name: dgp.filter.http.dubboproxy
  19. config:
  20. dubboProxyConfig:
  21. auto_resolve: true
  22. registries:
  23. "zookeeper":
  24. protocol: "zookeeper"
  25. timeout: "3s"
  26. address: "127.0.0.1:2181"
  27. username: ""
  28. password: ""

首先,类似 envoy的配置,static_resources 表示如下都是静态配置。在静态配置中包括 Listener,NetworkFilter,Route,HttpFilter等组件,它们之间并不是完全独立的。

Listener

比如说上述配置就声明了一个监听本地 8883 端口的 HTTP 类型的 Listener,更多 Listener 的配置可以查看 Listener

  1. listeners:
  2. - name: "net/http"
  3. protocol_type: "HTTP"
  4. address:
  5. socket_address:
  6. address: "0.0.0.0"
  7. port: 8883
  8. filter_chains:

listeners 的配置有 protocol_type 表示是 HTTP 类型的 Listener,address 则配置了监听的地址和端口,filter_chains 则指定了该 Listener 接收到请求要交由哪些 NetworkFilter 处理。

NetworkFilter

NetworkFilter 是 Pixiu 的关键组件之一,它可以有 Route 和 HttpFilter 一起组成,负责接收 Listener 传递而来的请求并进行处理。

  1. filters:
  2. - name: dgp.filter.httpconnectionmanager
  3. config:
  4. route_config:
  5. http_filters:

上述配置指明了使用 dgp.filter.httpconnectionmanager 这款 NetworkFilter,它能够接收 Http 请求的 RequestResponse 进行处理,并且可以配置 Route 路由信息和使用 HttpFilter 对请求进行链式处理。更多的 NetworkFilter 可以查看 NetworkfFilter文档

Route 路由 和 Cluster 集群

route 可以用于对请求进行路由分发,以下面配置为例。具体配置文件可以查看 /samples/http/simple 案例的配置文件

  1. - name: dgp.filter.httpconnectionmanager
  2. config:
  3. route_config:
  4. routes:
  5. - match:
  6. prefix: "/user"
  7. route:
  8. cluster: "user"

上述配置指定了对于 Path 的前缀为 /user 的 HTTP 请求,转发给名称为 user 的 cluster 服务集群中。

而具体 cluster 集群的定义如下所示:

  1. clusters:
  2. - name: "user"
  3. lb_policy: "RoundRobin"
  4. endpoints:
  5. - id: 1
  6. socket_address:
  7. address: 127.0.0.1
  8. port: 1314

上述配置定义了名为 user 的 cluster 集群信息,它的负载均衡策略是 RoundRobin,然后它包含一个 endpoint 实例,其地址是 127.0.0.1。

目前,在转发 HTTP 请求或者 Grpc 请求的场景下需要使用 Route 和 Cluster,而涉及到转发 Dubbo 相关请求的场景下暂时不需要二者。

HttpFilter

当 NetworkFilter 接收到 Listener 传来的请求后,需要对其进行系列操作,例如限流、鉴权等,最后还需要将这个请求转发给具体上游服务。这些工作都交给 NetworkFilter 所持有的 HttpFilter 链进行处理。

  1. - name: dgp.filter.httpconnectionmanager
  2. config:
  3. http_filters:
  4. - name: dgp.filter.http.dubboproxy
  5. config:
  6. dubboProxyConfig:
  7. auto_resolve: true
  8. registries:
  9. "zookeeper":
  10. protocol: "zookeeper"
  11. timeout: "3s"
  12. address: "127.0.0.1:2181"
  13. username: ""
  14. password: ""

如上配置所示,httpconnectionmanager 这个 NetworkFilter 下有一个 HttpFilter chain。其中包括 dgp.filter.http.dubboproxy 这一款 HttpFilter。 它负责将 HTTP 请求转换为 Dubbo 请求,并转发出去。它需要配置一个 Dubbo 集群注册中心的地址信息,指定其为 zookeeper 中间件。其中 auto_resolve 则指定使用 HTTP to Dubbo 默认转换协议来进行相关数据转换,具体可以参考《默认转换协议》

更多的 HttpFilter 可以查看 HttpFilter文档

Adapter

Adapter 代表 Pixiu 和外界元数据中心交互的能力。目前有两款,分别是 dgp.adapter.dubboregistrycenterdgp.adapter.springcloud,分别代表从 Dubbo 集群注册中心和 Spring Cloud 集群注册中心获取服务实例信息,构建 Pixiu 转发 Http 请求路由规则的。

更多的 Adapter 可以查看 Adapter文档

最后修改 December 16, 2022: Fix check (#1736) (97972c1)