You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/07/24 08:23:07 UTC

[dubbo-website] branch master updated: Add Dubbo go pixiu docs (#1285)

This is an automated email from the ASF dual-hosted git repository.

albumenj pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 51f85d5ed6 Add Dubbo go pixiu docs (#1285)
51f85d5ed6 is described below

commit 51f85d5ed60850c5e244ca5d6e062060ca73db07
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Sun Jul 24 16:23:01 2022 +0800

    Add Dubbo go pixiu docs (#1285)
---
 .../zh/blog/{others => integration}/dubbo2-js.md   |   0
 content/zh/blog/{ => news}/releases/2.7.14.md      |   0
 content/zh/blog/{ => news}/releases/2.7.5.md       |   0
 content/zh/blog/{ => news}/releases/3.0.1.md       |   0
 content/zh/blog/{ => news}/releases/3.0.2.1.md     |   0
 content/zh/blog/{ => news}/releases/3.0.2.md       |   0
 content/zh/blog/{ => news}/releases/_index.md      |   2 +-
 .../zh/blog/{ => news}/releases/dubbo-go-1.4.md    |   0
 .../zh/blog/{ => news}/releases/dubbo-go-1.5.1.md  |   0
 .../zh/blog/{ => news}/releases/dubbo-go-1.5.md    |   0
 .../{ => news}/releases/dubbo-go-hessian2-1.6.md   |   0
 .../{ => news}/releases/dubbo-go-hessian2-1.7.md   |   0
 .../zh/blog/{ => news}/releases/past-releases.md   |   0
 content/zh/blog/notices/_index.md                  |   2 +-
 content/zh/blog/others/_index.md                   |   8 -
 content/zh/blog/pixiu/_index.md                    |   7 +
 content/zh/blog/pixiu/dubbo-go-pixiu-animal.md     | 265 +++++++++++++++++
 content/zh/blog/pixiu/filter-intro.md              | 217 ++++++++++++++
 content/zh/docs3-v2/_index.md                      |  12 +-
 content/zh/docs3-v2/dubbo-go-pixiu/_index.md       |   9 +
 content/zh/docs3-v2/dubbo-go-pixiu/dev/_index.md   |   8 +
 .../dubbo-go-pixiu/dev/filter-extension.md         | 133 +++++++++
 content/zh/docs3-v2/dubbo-go-pixiu/dev/trie.md     | 139 +++++++++
 .../zh/docs3-v2/dubbo-go-pixiu/overview/_index.md  |   8 +
 content/zh/docs3-v2/dubbo-go-pixiu/overview/faq.md |  29 ++
 .../dubbo-go-pixiu/overview/terminology.md         |  33 +++
 .../dubbo-go-pixiu/overview/what-is-pixiu.md       |  39 +++
 content/zh/docs3-v2/dubbo-go-pixiu/user/_index.md  |   8 +
 .../docs3-v2/dubbo-go-pixiu/user/adapter/_index.md |   8 +
 .../docs3-v2/dubbo-go-pixiu/user/adapter/dubbo.md  |   6 +
 .../dubbo-go-pixiu/user/adapter/springcloud.md     |   6 +
 .../dubbo-go-pixiu/user/appendix/_index.md         |   8 +
 .../appendix/http-to-dubbo-default-stragety.md     | 316 +++++++++++++++++++++
 .../docs3-v2/dubbo-go-pixiu/user/configurations.md | 150 ++++++++++
 .../zh/docs3-v2/dubbo-go-pixiu/user/deployment.md  |  79 ++++++
 .../dubbo-go-pixiu/user/httpfilter/_index.md       |   8 +
 .../dubbo-go-pixiu/user/httpfilter/dubbo.md        |   9 +
 .../dubbo-go-pixiu/user/httpfilter/hystrix.md      |   9 +
 .../dubbo-go-pixiu/user/httpfilter/ratelimit.md    |   9 +
 .../dubbo-go-pixiu/user/listener/_index.md         |   8 +
 .../docs3-v2/dubbo-go-pixiu/user/listener/http.md  |  49 ++++
 .../docs3-v2/dubbo-go-pixiu/user/listener/http2.md |  10 +
 .../docs3-v2/dubbo-go-pixiu/user/listener/tcp.md   |  10 +
 .../dubbo-go-pixiu/user/listener/triple.md         |  10 +
 .../dubbo-go-pixiu/user/networkfilter/_index.md    |   8 +
 .../dubbo-go-pixiu/user/networkfilter/dubbo.md     |   9 +
 .../dubbo-go-pixiu/user/networkfilter/grpc.md      |   9 +
 .../dubbo-go-pixiu/user/networkfilter/http.md      |  10 +
 .../docs3-v2/dubbo-go-pixiu/user/quality/_index.md |   8 +
 .../dubbo-go-pixiu/user/quality/performance.md     |   8 +
 .../dubbo-go-pixiu/user/quality/stability.md       |   9 +
 .../zh/docs3-v2/dubbo-go-pixiu/user/quickstart.md  | 163 +++++++++++
 .../docs3-v2/dubbo-go-pixiu/user/samples/_index.md |   8 +
 .../dubbo-go-pixiu/user/samples/http_proxy.md      |  65 +++++
 .../dubbo-go-pixiu/user/samples/http_to_dubbo.md   |   9 +
 .../docs3-v2/dubbo-go-pixiu/user/samples/https.md  |   9 +
 static/imgs/pixiu/overview/pixiu-overview.png      | Bin 0 -> 276707 bytes
 static/imgs/pixiu/overview/pixiu-sidecar.png       | Bin 0 -> 41756 bytes
 static/imgs/pixiu/overview/terminology.png         | Bin 0 -> 102248 bytes
 static/imgs/pixiu/trie-1.png                       | Bin 0 -> 176376 bytes
 static/imgs/pixiu/trie-2.png                       | Bin 0 -> 108297 bytes
 static/imgs/pixiu/trie-3.png                       | Bin 0 -> 371739 bytes
 static/imgs/pixiu/trie-4.png                       | Bin 0 -> 437613 bytes
 static/imgs/pixiu/trie-5.png                       | Bin 0 -> 574774 bytes
 static/imgs/pixiu/trie-6.png                       | Bin 0 -> 249772 bytes
 static/imgs/pixiu/trie-7.png                       | Bin 0 -> 459839 bytes
 static/imgs/pixiu/user/appendix/img1.png           | Bin 0 -> 699069 bytes
 static/imgs/pixiu/user/appendix/img2.png           | Bin 0 -> 94077 bytes
 .../imgs/pixiu/user/quick_start_architecture.png   | Bin 0 -> 9243 bytes
 static/imgs/pixiu/user/samples/http_proxy.png      | Bin 0 -> 6945 bytes
 70 files changed, 1918 insertions(+), 11 deletions(-)

diff --git a/content/zh/blog/others/dubbo2-js.md b/content/zh/blog/integration/dubbo2-js.md
similarity index 100%
rename from content/zh/blog/others/dubbo2-js.md
rename to content/zh/blog/integration/dubbo2-js.md
diff --git a/content/zh/blog/releases/2.7.14.md b/content/zh/blog/news/releases/2.7.14.md
similarity index 100%
rename from content/zh/blog/releases/2.7.14.md
rename to content/zh/blog/news/releases/2.7.14.md
diff --git a/content/zh/blog/releases/2.7.5.md b/content/zh/blog/news/releases/2.7.5.md
similarity index 100%
rename from content/zh/blog/releases/2.7.5.md
rename to content/zh/blog/news/releases/2.7.5.md
diff --git a/content/zh/blog/releases/3.0.1.md b/content/zh/blog/news/releases/3.0.1.md
similarity index 100%
rename from content/zh/blog/releases/3.0.1.md
rename to content/zh/blog/news/releases/3.0.1.md
diff --git a/content/zh/blog/releases/3.0.2.1.md b/content/zh/blog/news/releases/3.0.2.1.md
similarity index 100%
rename from content/zh/blog/releases/3.0.2.1.md
rename to content/zh/blog/news/releases/3.0.2.1.md
diff --git a/content/zh/blog/releases/3.0.2.md b/content/zh/blog/news/releases/3.0.2.md
similarity index 100%
rename from content/zh/blog/releases/3.0.2.md
rename to content/zh/blog/news/releases/3.0.2.md
diff --git a/content/zh/blog/releases/_index.md b/content/zh/blog/news/releases/_index.md
similarity index 84%
rename from content/zh/blog/releases/_index.md
rename to content/zh/blog/news/releases/_index.md
index 95e34c2a1d..08929435f0 100644
--- a/content/zh/blog/releases/_index.md
+++ b/content/zh/blog/news/releases/_index.md
@@ -2,7 +2,7 @@
 ---
 title: "版本发布"
 linkTitle: "版本发布"
-weight: 60
+weight: 1
 ---
 
 
diff --git a/content/zh/blog/releases/dubbo-go-1.4.md b/content/zh/blog/news/releases/dubbo-go-1.4.md
similarity index 100%
rename from content/zh/blog/releases/dubbo-go-1.4.md
rename to content/zh/blog/news/releases/dubbo-go-1.4.md
diff --git a/content/zh/blog/releases/dubbo-go-1.5.1.md b/content/zh/blog/news/releases/dubbo-go-1.5.1.md
similarity index 100%
rename from content/zh/blog/releases/dubbo-go-1.5.1.md
rename to content/zh/blog/news/releases/dubbo-go-1.5.1.md
diff --git a/content/zh/blog/releases/dubbo-go-1.5.md b/content/zh/blog/news/releases/dubbo-go-1.5.md
similarity index 100%
rename from content/zh/blog/releases/dubbo-go-1.5.md
rename to content/zh/blog/news/releases/dubbo-go-1.5.md
diff --git a/content/zh/blog/releases/dubbo-go-hessian2-1.6.md b/content/zh/blog/news/releases/dubbo-go-hessian2-1.6.md
similarity index 100%
rename from content/zh/blog/releases/dubbo-go-hessian2-1.6.md
rename to content/zh/blog/news/releases/dubbo-go-hessian2-1.6.md
diff --git a/content/zh/blog/releases/dubbo-go-hessian2-1.7.md b/content/zh/blog/news/releases/dubbo-go-hessian2-1.7.md
similarity index 100%
rename from content/zh/blog/releases/dubbo-go-hessian2-1.7.md
rename to content/zh/blog/news/releases/dubbo-go-hessian2-1.7.md
diff --git a/content/zh/blog/releases/past-releases.md b/content/zh/blog/news/releases/past-releases.md
similarity index 100%
rename from content/zh/blog/releases/past-releases.md
rename to content/zh/blog/news/releases/past-releases.md
diff --git a/content/zh/blog/notices/_index.md b/content/zh/blog/notices/_index.md
index 603ac6b030..0e31376fbd 100755
--- a/content/zh/blog/notices/_index.md
+++ b/content/zh/blog/notices/_index.md
@@ -4,6 +4,6 @@ type: docs
 title: "公告栏"
 linkTitle: "公告"
 description: "Dubbo 公告"
-weight: 90
+weight: 1
 ---
 
diff --git a/content/zh/blog/others/_index.md b/content/zh/blog/others/_index.md
deleted file mode 100644
index 6fc5bc5f23..0000000000
--- a/content/zh/blog/others/_index.md
+++ /dev/null
@@ -1,8 +0,0 @@
-
----
-title: "其他"
-linkTitle: "其他"
-weight: 50
----
-
-
diff --git a/content/zh/blog/pixiu/_index.md b/content/zh/blog/pixiu/_index.md
new file mode 100644
index 0000000000..f8678200c9
--- /dev/null
+++ b/content/zh/blog/pixiu/_index.md
@@ -0,0 +1,7 @@
+
+---
+title: "Pixiu"
+linkTitle: "Pixiu"
+weight: 35
+---
+
diff --git a/content/zh/blog/pixiu/dubbo-go-pixiu-animal.md b/content/zh/blog/pixiu/dubbo-go-pixiu-animal.md
new file mode 100644
index 0000000000..40400016f0
--- /dev/null
+++ b/content/zh/blog/pixiu/dubbo-go-pixiu-animal.md
@@ -0,0 +1,265 @@
+---
+title: Dubbo 跨语言调用神兽:dubbo-go-pixiu
+keywords: Pixiu 介绍
+description: dubbo-go-pixiu 项目是一个基于 dubbo-go 发展起来的项目,目前接口协议层支持的是七层的 HTTP 请求调用
+author: 冯振宇,于雨
+date: 2021-8-25
+---
+
+## Pixiu 是什么
+
+
+在回答 Pixiu 是什么之前,我们简单解释一下 Dubbo 是什么。Dubbo 是一个开源的高性能 RPC 框架,有着丰富的服务治理能力以及优秀的扩展能力。Dubbo 更扩展出 Dubbo-go【1】,为用户提供了 Golang 的 Dubbo 解决方案,打通了两种语言之间的隔阂,使 Dubbo 更加贴近云原生。
+
+
+
+Dubbo-go 作为 Golang 服务,实现与 Dubbo 服务之间的相互调用。然而,在日常使用场景中,用户往往有把 Dubbo 服务以 RESTful 风格向外暴露的需求同时也要兼顾内部 Dubbo 调用。为了解决这种场景,作为 Dubbo  API 网关的 Pixiu【2】 (中文: 貔貅, 曾用名 dubbo-go-proxy) 便应运而生。之所以采用 Pixiu 这个名称,是因为 Java 同类产品 Zuul 的意象是一个西方怪兽,Pixiu 作为一个国产产品,就用了我们中国的一个类似的神兽貔貅作为项目名称。也同时表达了 Dubbo 社区希望扩展出一整套云原生生态链的决心。
+
+
+
+目前 Dubbo 多语言生态,发展最好的自然是 Java,其次是 Golang,其他语言都差强人意。dubbo-go-pixiu 项目是一个基于 dubbo-go 发展起来的项目,目前接口协议层支持的是七层的 HTTP 请求调用,计划在未来的 0.5 版本中支持 gRPC 请求调用,其另外一个使命是作为一种新的 dubbo 多语言解决方案。
+
+## 为什么使用 Pixiu
+Pixiu 是基于 Dubbogo 的云原生、高性能、可扩展的微服务 API 网关。作为一款网关产品,Pixiu 帮助用户轻松创建、发布、维护、监控和保护任意规模的 API ,接受和处理成千上万个并发 API 调用,包括流量管理、 CORS 支持、授权和访问控制、限制、监控,以及 API 版本管理。除此以外,作为 Dubbo 的衍生产品,Pixiu 可以帮助 Dubbo 用户进行协议转换,实现跨系统、跨协议的服务能力互通。
+
+
+
+Pixiu 的整体设计遵守以下原则:
+
+- High performance: 高吞吐量以及毫秒级的延时。
+- 可扩展: 通过 go-plugin,用户可以根据自己的需求延展 Pixiu 的功能。
+- 简单可用: 用户通过少量配置,即可上线。
+
+## Pixiu 的特性及核心功能
+
+
+- 为 RESTful API 和 Dubbo API 提供支持
+
+
+
+非 RESTful 风格的 API 和 Dubbo 协议的服务往往需要修改才可以以 RESTful API 风格对外开放。Pixiu 提供协议转换功能,通过 Pixiu,开发者可以将自己的 HTTP API 或 Dubbo API 通过配置,以 RESTful API 风格对外开放。v0.2.1 版本已支持基于泛化调用的 HTTP 至 Dubbo 的协议转换以及 HTTP 协议的转发。在后续的版本,社区将会增加对 gRPC 和 http2 协议的支持。
+
+
+
+- 面向用户的配置方式
+
+
+
+一般的网关的配置往往繁琐且复杂。Pixiu,目标作为一款易用的网关产品,在设计上拥有三层配置层级,Gateway 层全局配置, API resource 层配置以及 HTTP verbs 方法层配置。通过三个不同层级的配置,既可以实现深度的定制,亦支持统一的默认配置;同时,支持本地的配置文件,亦可使用统一配置服务器。另外,还提供控制台模块,通过控制台模块,支持配置的热更新。Pixiu 配套配套的控制台界面也在同步开发中。
+
+
+
+- 通用功能的集成
+
+
+
+重试、熔断、流量控制、访问控制等通用功能不再需要在每个后端服务上重复实现。使用 Pixiu,通过配置 filter ,开发者可以进行全局的控制,亦可以根据 API 配置各自的规则。因此开发者可以专注于业务逻辑和服务,而不是将时间用在维护基础设施上。
+
+- 可扩展
+
+不同的使用场景有着各自独特的需求。为满足不同用户的定制化需求,Pixiu 使用了插件模式。开发者可以通过编写 go plugin,将自身特有的业务逻辑以 filter 形式内嵌至 Pixiu 网关中,实现诸如企业登录鉴权等功能。
+
+![](https://static001.geekbang.org/infoq/fd/fd38da297d095e4c3af1c89b18804ef1.webp)
+
+图 1: Pixiu 核心功能列表
+
+
+## Pixiu 的架构设计
+
+
+![](https://static001.geekbang.org/infoq/2b/2b2fd6ea1cc0375392919d9e0c181f2b.webp)
+
+图 2: Pixiu 架构
+
+
+貔貅: 即 dubbo-go-pixiu,由四个主要模块:Listener、Router、Filters 和 Clients 组成;
+
+- Dubbo Cluster: Dubbo 服务所在集群,包含一个或多个 Dubbo Services;
+- Other Cluster: Dubbo 以外的服务所在集群,现支持 HTTP 服务,未来将拓展支持 gRPC 等其他服务;
+- Registry Center: 注册中心,维护每个业务服务的调用地址信息;
+- Metadata Center: 元数据中心,维护每个业务服务的配置信息以及存储 Pixiu 本身的配置信息。
+
+
+作为 Dubbo 所衍生的 API 网关,Pixiu 使用 Golang 搭建,主要因为: 1. Golang 的 G-M-P,net poller 等特性使 Golang 非常适合构建 IO 密集型应用;2. 使用 Golang 可以直接引入 Dubbo-go 中的一些组建,简化开发。
+
+
+整个 Pixiu 大致可以拆分为四个主要模块:Listener、Router、Filters 和 Client。
+
+
+### 1、Listener
+
+在 Pixiu 中,Listener 代表外部可以访问 Pixiu 的方式。通过配置指定协议类型,地址,端口等属性,暴露 Gateway。现阶段暂支持 HTTP 协议,未来将会加入 gRPC。
+
+``` 
+listeners: 
+
+  - name: "net/http" 
+
+    address: 
+
+      socket_address: 
+
+        protocol_type: "HTTP" 
+
+        address: "0.0.0.0" 
+
+        port: 8888 
+
+    config: 
+
+      idle_timeout: 5s 
+
+      read_timeout: 5s 
+
+      write_timeout: 5s
+```
+
+### 2、Router
+
+
+Router 是 Pixiu 的路由组件。根据配置文件,Pixiu 将对外暴露的 URLs 以树的形势存储于内存中,当请求到了 router 组件时,即会根据 URL 及 HTTP 方法查找到对应的后端服务及其 API 配置,并将信息封装于请求中,为后续 filter,及 client 的调用提供足够的内容。
+
+
+现阶段,Router 提供以下功能:
+
+
+- 支持请求一对一转发路由配置或 wildcard 路由配置。
+- 支持 HTTP 请求的转发到后端 HTTP 服务。
+- 支持 HTTP 请求转化为 dubbo 泛化调用请求。
+
+
+### 3、Filters
+
+
+Filter 是 Pixiu 实现额外功能及其扩展性的主要组件。其实现类似于 Dubbo-go 中的 filter,根据配置中 filter 的指定,生成调用链,从而在调用后端服务前,将各 filter 中的逻辑运行一遍,实现节流,日志等功能。
+
+
+用户如果需要客制化的 filter,可通过编写 go-plugin 实现。在配置中,可通过类似如下配置,加载 .so 文件,并在 API config 中指定使用的 plugin group,plugin name 实现。
+
+```
+pluginFilePath: "" 
+pluginsGroup: 
+  - groupName: "group1" 
+    plugins: 
+      - name: "rate limit" 
+        version: "0.0.1" 
+        priority: 1000 
+        externalLookupName: "ExternalPluginRateLimit" 
+      - name: "access" 
+        version: "0.0.1" 
+        priority: 1000 
+        externalLookupName: "ExternalPluginAccess" 
+  - groupName: "group2" 
+    plugins: 
+      - name: "blacklist" 
+        version: "0.0.1" 
+        priority: 1000 
+        externalLookupName: "ExternalPluginBlackList"
+```
+
+
+### 4、Client
+
+
+Client 负责调用具体服务。现阶段,Pixiu 支持 HTTP 与 Dubbo 的后端服务。社区将逐渐增加 gRPC 等其他 Client 以满足不同的协议。
+
+HTTP client 的实现相对简单,根据 Router 中获取的后端服务信息,通过 Golang 官方包 net/http 生成请求并调用。
+
+Dubbo client 的实现对比 HTTP client 会稍微复杂,其基础为 Dubbo 服务的泛化调用。泛化调用技术是 Dubbo 提供的一个很基础的功能只需要知道调用的方法名、参数类型和返回值类型,即可发起服务调用。客户端对服务端的泛化调用既可以通过注册中心发现服务,也可以直连服务端,实现对服务的动态调用。
+
+如下面代码所示,Pixiu 通过动态配置 referenceConfig,然后通过 GetRPCService 生成 Dubbo 的 Generic Client(泛化调用客户端)进行下一步的调用。
+
+```
+referenceConfig := dg.NewReferenceConfig(irequest.Interface, context.TODO())
+  referenceConfig.InterfaceName = irequest.Interface
+  referenceConfig.Cluster = constant.DEFAULT_CLUSTER
+  var registers []string
+  for k := range dgCfg.Registries {
+    registers = append(registers, k)
+  }
+  referenceConfig.Registry = strings.Join(registers, ",")
+
+  if len(irequest.DubboBackendConfig.Protocol) == 0 {
+    referenceConfig.Protocol = dubbo.DUBBO
+  } else {
+    referenceConfig.Protocol = irequest.DubboBackendConfig.Protocol
+  }
+
+  referenceConfig.Version = irequest.DubboBackendConfig.Version
+  referenceConfig.Group = irequest.Group
+  referenceConfig.Generic = true
+  if len(irequest.DubboBackendConfig.Retries) == 0 {
+    referenceConfig.Retries = "3"
+  } else {
+    referenceConfig.Retries = irequest.DubboBackendConfig.Retries
+  }
+  dc.lock.Lock()
+  defer dc.lock.Unlock()
+  referenceConfig.GenericLoad(key)
+  clientService := referenceConfig.GetRPCService().(*dg.GenericService)
+```
+
+
+实际上,在泛化调用的客户端中,实际执行泛化调用的关键步骤是 Dubbo-go 中的 generic_filter (如下代码片段)。在调用 generic_filter 的 Invoke 时,约定 invocation 参数列表第一个为方法名,第二个为参数类型列表,第三个为参数值列表。generic_filter 将用户请求的参数值列表转化为统一格式的 map(代码中的 struct2MapAll ),将类( golang 中为 struct )的正反序列化操作变成 map 的正反序列化操作。这使得无需 POJO 描述通过硬编码注入 hessain 库,从而完成 Dubbo 服务的泛化调用。
+
+
+```
+func (ef *GenericFilter) Invoke(ctx context.Context, invoker protocol.Invoker, invocation protocol.Invocation) protocol.Result {
+  if invocation.MethodName() == constant.GENERIC && len(invocation.Arguments()) == 3 {
+    oldArguments := invocation.Arguments()
+    if oldParams, ok := oldArguments[2].([]interface{}); ok {
+      newParams := make([]hessian.Object, 0, len(oldParams))
+      for i := range oldParams {
+        newParams = append(newParams, hessian.Object(struct2MapAll(oldParams[i])))
+      }
+      newArguments := []interface{}{
+        oldArguments[0],
+        oldArguments[1],
+        newParams,
+      }
+      newInvocation := invocation2.NewRPCInvocation(invocation.MethodName(), newArguments, invocation.Attachments())
+      newInvocation.SetReply(invocation.Reply())
+      return invoker.Invoke(ctx, newInvocation)
+    }
+  }
+  return invoker.Invoke(ctx, invocation)
+}
+
+```
+
+## 总结
+
+
+通过上面的四个模块以及注册中心的简单介绍不难发现,当请求通过 listener 被 Pixiu 接收后,请求被传入 router 中。router 根据接口的配置,从原请求中找到目标后端服务连同相关 API 配置下发到 filter 组件。filter 组件根据原请求、 API 配置等信息顺序执行,最终请求到达 client, 通过 client 调用后端服务。
+
+### Pixiu 的未来
+
+![](https://static001.geekbang.org/infoq/e5/e57050f224f658b96cd6bd917050b259.webp)
+图 3: Pixiu 迭代里程碑
+
+
+
+Pixiu 作为网关产品外,其衍生项目也会在我们的未来计划中,主要目的是提供更好的可用性。例如,由于 Golang 语言缺乏原生的注解, 因此 Dubbo-go 需要通过配置文件方式生成服务的元数据写入注册中心。开课啦教育公司相关同学写了一个扫描代码的工具 https://github.com/jack15083/dubbo-go-proxy-tool,在每个 RPC 服务方法前加上对应的注释,从而在服务启动前通过扫描注释生成元数据。Pixiu 也计划在未来的版本上通过提供 package,允许服务通过注释借助 https://github.com/MarcGrol/golangAnnotations 生成 API 配置并注册到 Pixiu 上。
+
+
+
+Pixiu 目前的定位是一个七层协议网关,其最初版本是被定义成一个 Dubbo 的服务网关。作为云时代的产品,Pixiu 的发展方向必然是面向云原生的。现在的版本为 0.2.1, 已经实现基本的 Dubbo/Http 服务代理和部分的网关通用功能。目前正在开发中的 0.4 及其后续版本支持 gRPC 和 Spring Cloud 服务调用, 后续还将提供 MQ 服务支持。另外,社区将继续优化配置方式,降低用户的使用难度,继续优化官方的 filter,使 Pixiu 可以在官方层面实现更多的网关通用功能。
+
+
+![](https://static001.geekbang.org/infoq/0c/0c1afe00699eb3e5cc022e48966ef5a6.webp)
+
+在未来的一年内,社区计划支持 xDS API,将 Pixiu 演化为 Dubbo mesh 的 sidecar。其最终目的就是:在现有的 dubbo mesh 形态中演化出 Proxy Service Mesh 形态。基于这个形态,Js、Python、PHP、Ruby 和 Perl 等脚本语言程序除了收获 dubbo mesh 原有的技术红利之外,大概率还能收获性能上的提升。
+
+
+
+Pixiu 在 Dubbo Mesh 中的终极目的是:把东西向和南北向数据面流量逐步统一 Pixiu 中的同时,让它逐步具备 Application Runtime 的能力,作为 Dubbo 多语言生态的关键解决方案。
+
+
+相关链接:
+
+【1】Dubbo-go:https://github.com/apache/dubbo-go
+
+【2】Pixiu:https://github.com/apache/dubbo-go-pixiu
+
+
+冯振宇,Apache Dubbo Committer,目前负责管理香港一家消费品公司的 IT 部门整个团队。2020 年夏天 偶然看到了介绍 dubbogo 的文章后加入了 dubbogo 社区,目前在主导 Pixiu 0.4.0 版本的开发。
diff --git a/content/zh/blog/pixiu/filter-intro.md b/content/zh/blog/pixiu/filter-intro.md
new file mode 100644
index 0000000000..122c91f842
--- /dev/null
+++ b/content/zh/blog/pixiu/filter-intro.md
@@ -0,0 +1,217 @@
+---
+title: 谈谈Pixiu的Filter
+keywords: Pixiu 介绍
+description: Filter通常是网关最重要的一部分,那Pixiu的过滤器链是如何运行的呢
+author: mark4z
+date: 2022-02-19
+---
+
+## **Filter的生命周期**
+
+Pixiu作为一个面向云原生的gateway,通过简单的配置即可代理Http to Dubbo 2、Tripe甚至是Spring Cloud的请求。那Filter是怎样运行的呢?
+
+首先**Filter Plugin**向**Filter Manager**注册自己**,**然后**Filter Manager**根据配置创建好**Filter Factory**并持有它们,等待请求来临时,**Manager**创建一个一次性的用于此次请求的Filter Chain,然后利用**Factory**创建好**Decode/Encode Filter**并把它们加入链中,然后按照顺序去运行Decode Filter,然后去请求**Upstream**,拿到Response再反向运行Encode Filter,让Filter可以访问到Response。
+
+几个关键的概念:
+
+**Filter Manager**
+
+> Filter的Manger。。。
+
+```go
+// FilterManager manage filters
+type FilterManager struct {
+   filters       map[string]HttpFilterFactory
+   filtersArray  []*HttpFilterFactory
+}
+```
+
+**Filter Plugin**:定义了Filter的(唯一的)名字和描述如何去创建一个Filter Factory。
+
+> 其实结合Filter Factory的定义,可以认为Plugin是Filter Factory的Factory
+
+```go
+// HttpFilterPlugin describe plugin
+HttpFilterPlugin interface {
+   // Kind returns the unique kind name to represent itself.
+   Kind() string
+
+   // CreateFilterFactory return the filter factory
+   CreateFilterFactory() (HttpFilterFactory, error)
+}
+```
+
+**Filter Factory**:定义了Filter自身的配置,并且在请求来临时创建真实的Filter并把它添加到FilterChain中
+
+> - Config() 的目的是能让Filter Manager能够有机会把配置交给Factory(此时golang泛型还没有落地)
+> - Apply() 在配置被注入到Factory后,有机会对config做一些检查和提前做一些初始化的工作
+> - PrepareFilterChain() 创建Filter并加入Filter Chain
+
+```go
+// HttpFilterFactory describe http filter
+HttpFilterFactory interface {
+   // Config Expose the config so that Filter Manger can inject it, so it must be a pointer
+   Config() interface{}
+
+   // Apply After the config is injected, check it or make it to default
+   Apply() error
+
+   // PrepareFilterChain create filter and append it to FilterChain
+   //
+   // Be Careful !!! Do not pass the Factory's config pointer to the Filter instance,
+   // Factory's config may be updated by FilterManager
+   PrepareFilterChain(ctx *http.HttpContext, chain FilterChain) error
+}
+```
+
+**Decode/Encode Filter:**Filter分为两个部分,**Decode**在实际请求**Upstream**之前,所以可以做一些鉴权、限流,把请求在gateway层拦截掉。**Eecode**则运行在获得**Upstream**的Response之后,所以可以对返回Log甚至修改Response。
+
+> 一个Filter可以即是Decode Filter,又是Encode Filter,没有限制!
+>
+> 假设有A、B、C三个Filter,都是Decode/Encode Filter,如果配置的顺序是A、B、C,那么运行将会是下面这样
+>
+> 在Decode阶段 A->B->C,而在Encode阶段,顺序将会反过来!C->B->A
+
+
+
+```go
+// decode filters will be invoked in the config order: A、B、C, and decode filters will be
+// invoked in the reverse order: C、B、A
+HttpDecodeFilter interface {
+   Decode(ctx *http.HttpContext) FilterStatus
+}
+
+// HttpEncodeFilter after invoke upstream,
+// decode filters will be invoked in the reverse order
+HttpEncodeFilter interface {
+   Encode(ctx *http.HttpContext) FilterStatus
+}
+```
+
+更详细的,每个Decode/Encode Filter可以返回一个FilterStatus来决定继续还是就在这里停下!比如JWT鉴权,token无效时就要及时把401返回给Downstream。当然Decode Filter发出的停止命令只会终止Decode阶段,至于为什么?想想如何做一个Access Log Filter,能在请求失败时也把失败的结果记录下吧来!
+
+
+
+## **怎样编写一个自定义Filter**
+
+我们来尝试写一个简单的Filter,这个Filter将会有简单的配置,在Decode阶段把请求的Body Log出来,并翻转后作为Mock的返回值。最后在Encode阶段根据配置把返回值Log出来。
+
+1.首先创建一个Filter
+
+```go
+type DemoFilter struct {
+   logPrefix string
+}
+
+func (f *DemoFilter) Decode(ctx *contexthttp.HttpContext) filter.FilterStatus {
+   body, _ := ioutil.ReadAll(ctx.Request.Body)
+   logger.Infof("request body: %s", body)
+
+   //reverse res str
+   runes := []rune(string(body))
+   for i := 0; i < len(runes)/2; i += 1 {
+      runes[i], runes[len(runes)-1-i] = runes[len(runes)-1-i], runes[i]
+   }
+   reverse := string(runes)
+
+   //mock response
+   ctx.SendLocalReply(200, []byte(reverse))
+   return filter.Stop
+}
+
+func (f *DemoFilter) Encode(ctx *contexthttp.HttpContext) filter.FilterStatus {
+   res := ctx.SourceResp.(string)
+   logger.Infof("%s: %s", f.logPrefix, res)
+   return filter.Continue
+}
+```
+
+2.创建Filter Factory
+
+```go
+type (
+	DemoFilterFactory struct {
+		conf *Config
+	}
+	// Config describe the config of Filter
+	Config struct {
+		LogPrefix string `yaml:"logPrefix,omitempty"`
+	}
+)
+
+func (f *DemoFilterFactory) PrepareFilterChain(ctx *contexthttp.HttpContext, chain filter.FilterChain) error {
+   demo := &DemoFilter{logPrefix: f.conf.LogPrefix}
+
+   chain.AppendDecodeFilters(demo)
+   chain.AppendEncodeFilters(demo)
+   return nil
+}
+
+func (f *DemoFilterFactory) Config() interface{} {
+   return f.conf
+}
+
+func (f *DemoFilterFactory) Apply() error {
+   return nil
+}
+```
+
+3.创建Filter Plugin,并注册自己
+
+```go
+//important
+func init() {
+   filter.RegisterHttpFilter(&Plugin{})
+}
+
+type Plugin struct {
+}
+
+func (p *Plugin) Kind() string {
+   return "dgp.filters.demo"
+}
+
+func (p *Plugin) CreateFilterFactory() (filter.HttpFilterFactory, error) {
+	return &DemoFilterFactory{conf: &Config{}}, nil
+}
+```
+
+4.配置文件中配置此Filter,并启动Pixiu
+
+```yaml
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP"
+      address:
+        socket_address:
+          address: "0.0.0.0"
+          port: 8888
+      filter_chains:
+          filters:
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "/"
+                http_filters:
+                  - name: dgp.filters.demo
+                    config:
+```
+
+5.访问并查看日志与结果
+
+```shell
+curl localhost:8888/demo -d "eiv al tse’c"
+
+c’est la vie% 
+```
+
+日志
+
+```
+2022-02-19T20:20:11.900+0800    INFO    demo/demo.go:62 request body: eiv al tse’c
+2022-02-19T20:20:11.900+0800    INFO    demo/demo.go:71 : eiv al tse’c
+```
+
diff --git a/content/zh/docs3-v2/_index.md b/content/zh/docs3-v2/_index.md
index 36f74a9dc0..ff41f5aa72 100755
--- a/content/zh/docs3-v2/_index.md
+++ b/content/zh/docs3-v2/_index.md
@@ -43,12 +43,22 @@ menu:
         <div class="h-100 card shadow">
             <div class="card-body">
                 <h4 class="card-title">
-                    <a href='{{< relref "./erlang-sdk" >}}'>Golang SDK</a>
+                    <a href='{{< relref "./erlang-sdk" >}}'>Erlang SDK</a>
                 </h4>
                 <p>Dubbo Erlang SDK 手册</p>
             </div>
         </div>
     </div>
+    <div class="col-sm col-md-6 mb-4 mb-md-0">
+        <div class="h-100 card shadow">
+            <div class="card-body">
+                <h4 class="card-title">
+                    <a href='{{< relref "./dubbo-go-pixiu" >}}'>Dubbo Go Pixiu</a>
+                </h4>
+                <p>Dubbo Go Pixiu 手册</p>
+            </div>
+        </div>
+    </div>
 
 </div>
 <hr>
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/_index.md
new file mode 100755
index 0000000000..5470505ab8
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/_index.md
@@ -0,0 +1,9 @@
+
+---
+type: docs
+title: "Dubbo Go Pixiu"
+linkTitle: "Dubbo Go Pixiu"
+weight: 500
+description: "Dubbo Go Pixiu"
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/dev/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/dev/_index.md
new file mode 100755
index 0000000000..d2ae1a92d7
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/dev/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "开发者指南"
+linkTitle: "开发者指南"
+weight: 30
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/dev/filter-extension.md b/content/zh/docs3-v2/dubbo-go-pixiu/dev/filter-extension.md
new file mode 100644
index 0000000000..01026fe17d
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/dev/filter-extension.md
@@ -0,0 +1,133 @@
+---
+type: docs
+title: "Pixiu Filter体系介绍"
+linkTitle: "Pixiu Filter体系介绍"
+weight: 1
+---
+
+## **怎样编写一个Filter**
+`更详细的信息,请移步Blog《谈谈Pixiu的Filter》`
+
+我们来尝试写一个简单的Filter,这个Filter将会有简单的配置,在Decode阶段把请求的Body Log出来,并翻转后作为Mock的返回值。最后在Encode阶段根据配置把返回值Log出来。
+
+1.首先创建一个Filter
+
+```go
+type DemoFilter struct {
+   logPrefix string
+}
+
+// Decode阶段,发生在调用Upstream之前
+func (f *DemoFilter) Decode(ctx *contexthttp.HttpContext) filter.FilterStatus {
+   body, _ := ioutil.ReadAll(ctx.Request.Body)
+   logger.Infof("request body: %s", body)
+
+   //reverse res str
+   runes := []rune(string(body))
+   for i := 0; i < len(runes)/2; i += 1 {
+      runes[i], runes[len(runes)-1-i] = runes[len(runes)-1-i], runes[i]
+   }
+   reverse := string(runes)
+
+   //mock response
+   ctx.SendLocalReply(200, []byte(reverse))
+   return filter.Stop
+}
+
+// Encode阶段,此时可以获取到Upstream的Response
+func (f *DemoFilter) Encode(ctx *contexthttp.HttpContext) filter.FilterStatus {
+   res := ctx.SourceResp.(string)
+   logger.Infof("%s: %s", f.logPrefix, res)
+   return filter.Continue
+}
+```
+
+2.创建Filter Factory
+
+```go
+type (
+	DemoFilterFactory struct {
+		conf *Config
+	}
+	// Config describe the config of Filter
+	Config struct {
+		LogPrefix string `yaml:"logPrefix,omitempty"`
+	}
+)
+
+func (f *DemoFilterFactory) PrepareFilterChain(ctx *contexthttp.HttpContext, chain filter.FilterChain) error {
+   demo := &DemoFilter{logPrefix: f.conf.LogPrefix}
+
+   chain.AppendDecodeFilters(demo)
+   chain.AppendEncodeFilters(demo)
+   return nil
+}
+
+func (f *DemoFilterFactory) Config() interface{} {
+   return f.conf
+}
+
+func (f *DemoFilterFactory) Apply() error {
+   return nil
+}
+```
+
+3.创建Filter Plugin,并注册自己
+
+```go
+//important
+func init() {
+   filter.RegisterHttpFilter(&Plugin{})
+}
+
+type Plugin struct {
+}
+
+func (p *Plugin) Kind() string {
+   return "dgp.filters.demo"
+}
+
+func (p *Plugin) CreateFilterFactory() (filter.HttpFilterFactory, error) {
+	return &DemoFilterFactory{conf: &Config{}}, nil
+}
+```
+
+4.配置文件中配置此Filter,并启动Pixiu
+
+```yaml
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP"
+      address:
+        socket_address:
+          address: "0.0.0.0"
+          port: 8888
+      filter_chains:
+          filters:
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "/"
+                http_filters:
+                  - name: dgp.filters.demo
+                    config:
+```
+
+5.访问并查看日志与结果
+
+```shell
+curl localhost:8888/demo -d "eiv al tse’c"
+
+c’est la vie% 
+```
+
+日志
+
+```
+2022-02-19T20:20:11.900+0800    INFO    demo/demo.go:62 request body: eiv al tse’c
+2022-02-19T20:20:11.900+0800    INFO    demo/demo.go:71 : eiv al tse’c
+```
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/dev/trie.md b/content/zh/docs3-v2/dubbo-go-pixiu/dev/trie.md
new file mode 100644
index 0000000000..c2010fdd4e
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/dev/trie.md
@@ -0,0 +1,139 @@
+---
+type: docs
+title: "Trie 前缀树介绍"
+linkTitle: "Trie 前缀树介绍"
+weight: 2
+---
+# 简介
+
+![image.png](/imgs/pixiu/trie-1.png)<br />网关的核心之一是路由逻辑,决定一个请求需要经过怎样的加工,被转发到哪个下行服务。<br />其中 80% 的路由需求表达都以 URL 为基础。需要描述清楚具有某个特征的 URL 或者 URL 集合对应怎样的一系列下游处理策略。
+
+例如,'/test/**' 开头的 URL 路由到测试环境集群,'/release/user/**' 开头的 URL 会被路由到正式环境的 user 服务集群。
+
+
+同时网关作为所有请求的入口,每一毫秒的延时都会做用在全量的业务下,在 mesh 场景下,延时还会随着调用链路的加深,被倍数放大。按照生产环境业务相应 <=7 毫秒的标准来看,规则匹配的性能要求也是十分苛刻的。一定不能随着规则数目的增加而性能退化。
+
+# 使用介绍
+
+仅从使用方的角度阐述 pixiu 的配置文件如何描述 URL 相关的路由规则。(下面,我们介绍一下如何配置 URL 路由规则)<br />如下是一份 pixiu 的 api 配置文件,这份配置文件会被解析后生成一份对应的内存模型,作为 pixiu 路由相关配置的初始状态。之后由 RDS 协议修改解析后得到的内存模型,实现路由逻辑动态生效的效果。RDS 协议(RDS:xDS 协议下描述路由规则的部分)相关内容是后话不详细阐述。我们把注意力聚焦到resource部分。<br />resource 下 path 部分就是上文阐述的,URL 相关的路由描述。意思是满足 path 描述特征的 URL 会被成功匹配。
+
+```json
+name: server
+description: server sample
+resources:
+  - path: '/api/v1/test-dubbo/user/name/:name'
+    type: restful
+    description: user
+    methods:
+      - httpVerb: GET
+        enable: true
+        timeout: 1000ms
+        inboundRequest:
+          requestType: http
+          uri:
+            - name: name
+              required: true
+        integrationRequest:
+          requestType: dubbo
+          mappingParams:
+            - name: uri.name
+              mapTo: 0
+              mapType: "string"
+          applicationName: "UserProvider"
+          interface: "com.dubbogo.server.UserService"
+          method: "GetUserByName"
+          group: "test"
+          version: 1.0.0
+          clusterName: "test_dubbo"
+
+
+```
+
+被匹配后的请求会被转化成 dubbo 协议转发到 test_dubbo 集群调用 com.dubbogo.server.UserService 下的 GetUserByName 服务。<br />我们继续聚焦到如下范围:
+```json
+path: '/api/v1/test-dubbo/user/name/:name'
+```
+为了描述清楚一个 URL 或者一组 URL,路由引擎需要拥有以下能力:
+
+1. URL 可以包含变量,'/api/v1/test-dubbo/user/name/:name' 代表 URL 用“/”分割后,第六个部分的值作为变量 name 的值,向下游 filter 传递供filter使用。
+1. 需要有通配符
+   1. * 代表一个层级任意字符的通配 '/api/*/test-dubbo/user/name/:name' 这样的一个 path 描述代表了可能并不关心具体的版本,不论什么版本下的 URL 只要匹配都使用相同的逻辑加工数据并转发。
+   1. ** 代表多个层级的通配,从这个层级以后,子层级也可以是任意字符,**只可能存在于 URL 的末尾,不然会有二义性。'/api/v1/**' 这样的 path 表达了所有 V1 版本下的 URL 都采用相同的逻辑。
+
+为了正确的使用 pixiu 您可能还需要了解如下内容。
+
+## 优先级
+
+并非是独创的,类似 java 下的 spring 以及其他框架统一具有的优先级逻辑:
+
+1. 通配的优先级低于特指 。 '/api/v1/**' 低于 '/api/v1/test-dubbo/user/name/:name' 的优先级,假设有两个 resource 分别采用了如上两个path 配置,request 为 '/api/v1/test-dubbo/user/name/yqxu' 的请求到达pixiu 后应该生效哪个 resource?按照通配低于特指的原则,'/api/v1/test-dubbo/user/name/:name' 这条规则会生效。
+1. 深度更深的,优先级更高 。 '/api/v1/**' 对比 /api/v1/test-dubbo/**' ,如果请求同时满足如上两个描述, '/api/v1/test-dubbo/**' 深度更深,会生效。
+1. 通配符之间 '/*' 优先级高于 '/**'
+1. 变量等同于通配。
+
+## 冲突处理
+
+优先级规则只是冲突解决策略的一种,才同时匹配多个url描述时,优先级更高的那一种将会生效,然而优先级策略并不能涵盖所有的情况。<br />如果强行配置两条 resource path 完全相同,但是转发到不同的下游服务,这时候就会冲突。pixiu 下应对冲突的方案是 failfast,在 pixiu 初始化阶段,发现配置文件中有冲突的两项规则,则启动失败,让开发者今早发现问题并处理。
+
+# 原理介绍
+
+技术选型之初,以及确定使用pixiu后为了处理一些突发情况,以及应付一些pixiu自身可能存在的bug,开发者需要对pixiu 的路由原理有更深刻的了解。<br />下面,我们将详细介绍路由引擎的相关原理和实现,供感兴趣的同学了解。<br />相信阅读这部分内容的同学一定会有人下意识联想到字典树这个结构。使用字典树这个结构能实现存量规则数无关的匹配性能优化。
+
+一个存放字符串作为node的字典树,具有表达url 的能力。<br />![](/imgs/pixiu/trie-2.png)<br />如上图描述等价于URL集合 '/api/v1' ,'/api/v2' ,'/web'
+
+维护一个标准字典树有几个关键的操作
+
+1. 字典树指定节点的查找(find): 从root 开始遍历字典书,'/api/v2' 称之为路径,在当前层级寻找指定路径,如果存在就继续在子树下完成剩下的路径匹配。'/api/v2' 先从 logic root 找到 '/api' ,并在 '/api' 的子树下继续查找剩下的路径 '/v2' 。
+1. 字典树节点的添加(add): 尝试查找指定节点,如果指定节点不存在则新建一个节点。假设一个空树状态下添加 '/api/v1' ,因为是空树那么logic root 下查找 '/api' 一定不存在,则在 root 下创建 '/api' ,继续在创建的 '/api' 节点下查找 '/v1' 因为 '/api' 是新建的 v1 一定也不存在,则继续创建v1
+1. 字典树url匹配(match):在这个最简单的版本下,匹配逻辑与指定节点的查找逻辑没有区别。
+
+还有一些不涉及递归或者复用上面逻辑递归操作的简单操作
+
+4. 修改字典树节点(modify):通过 find 逻辑找到指定节点,调用 set 方法或者直接赋值的方式修改节点内容。
+4. 删除字典树节点(delete): 通过 modify 逻辑修改 isdeleted 标为 true,并把节点内容 modify 为空。节点本身的内存不释放。
+4. 重建字典树(rebuild):遍历所有节点,添加到新树,如果 isdeleted为 true 则不添加到新树,通过rebuild 操作创建副本。
+
+由上可知,标准字典树结构距离通用的路由引擎底层数据结构能力还有一定差距,缺乏统配描述能力,缺乏变量表达的能力,下面我们来看一下如何进行改进。
+
+添加 描述统配逻辑的子树,作为子树中默认存在的一部分<br />![](/imgs/pixiu/trie-3.png)<br />现在我们的变种字典树多了变量表达能力<br />'/web/:appname/test/*' 这样的url 在图中应该怎么表达?<br />没错就是这个路径<br />
+
+![](/imgs/pixiu/trie-4.png)
+
+
+继续分析字典树几个关键的操作是否需要做变化?
+
+1. 字典树指定节点的查找  :
+   1. 如果不改动使用前一版本逻辑在 '/*' 节点处理之前都不会有问题: 从root 开始遍历字典书,'/api/v2/*' 称之为路径,在当前层级寻找指定路径,如果存在就继续在子树下完成剩下的路径匹配。 /api/v2 先从  logic root 找到 '/api' ,并在 '/api' 的子树下继续查找剩下的路径 '/v2' 。
+   1. 这版本我们加上对 '/*' 节点的处理:'/v2' 后是 '/*' ,'/*' 对应单级通配节点,继续递归查找 '/v2' 节点下一级通配节点是否为空。如果 path 是 '/api/v2/*/test2' 这样的路径则继续在统配子树下完成递归过程。
+2. 字典树节点的添加   :
+   1. 在添加 '/*' 节点之前,所有逻辑上一版本就足够处理:尝试查找指定节点,如果指定节点不存在则新建一个节点。假设一个空树状态下添加 '/api/v1/*' ,因为是空树那么 logic root 下查找 '/api' 一定不存在,则在 root 下创建 '/api' ,继续在创建的 '/api' 节点下查找 '/v1' 因为 '/api' 是新建的 v1 一定也不存在,则继续创建 v1。
+   1. 这版本加上 '/*' 的特殊处理 :'/v1' 新建后,查看通配子树,通配子树不存在,则为V1 节点添加内容为空的单级通配子树并在子树中继续递归。
+3. 字典树url匹配:在这个版本下,对比查找逻辑需要增加回朔逻辑。
+   1. 在遇到通配节点前逻辑与find 依旧相同 : 从root 开始遍历字典书,'/api/v2/*' 称之为路径,在当前层级寻找指定路径,如果存在就继续在子树下完成剩下的路径匹配。 '/api/v2' 先从 logic root 找到 '/api' ,并在 '/api' 的子树下继续查找剩下的路径 '/v2' 。
+   1. 在处理统配节点的时候会与 find 逻辑有所不同:'/v2' 下普通子树无匹配节点,回朔到通配子树,查看是否能匹配,这个例子中 '/v2' 下无通配子树,查询不到节点 。值得注意的是回朔逻辑的先后顺序,是先找普通子树再回朔到通配子树还是先查找通配子树再回朔到普通子树是取决于优先级规则的,按照需求必须是先查找普通子树。
+
+但是我们目前还是缺乏 '/**' 这种通配的表达能力代表了多级通配,可以分析需求得到结论,这种通配符,一定不存在子树,是一种特殊的叶子结点,仅用于 match 逻辑回朔时做特殊判断。继续加点特殊 node 后演化为:<br />![](/imgs/pixiu/trie-5.png)<br />好了至此,需求都能满足了。<br />'/api/**' 等价路径为:<br />![](https://cdn.nlark.com/yuque/0/2022/png/1333641/1642993180981-51a0df19-bb03-49c8-9128-a6e95dbabfcd.png#crop=0&crop=0&crop=1&crop=1&from=url&id=GFLwD&margin=%5Bobject%20Object%5D&originHeight=1010&originWidth=1676&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br [...]
+
+到目前这个版本所有上文提到的能力已经都能有效支撑,回头分析一下时间复杂读。<br />url 被 '/' 分割出一个一个的段,容易理解在匹配一个url 过程中复杂度是 O(n) n= url 段数。与树中存有的规则数量无关。再分析 n 的范围,n 其实不是一个可以无限大的数字,一部分浏览器甚至约束 url 长度必须小于 2000,按照一个单词长度为 5 来计算,可以大概估计段数最多会在 400 左右,n 如果可以被视为一个常数,那么复杂读可以看作是 O(1)。
+
+稍微解释一下find 和 match 有什么不同,为什么需要两种查找节点的方法。看下这个例子 :假设树中已经add 了 '/api/v1/:name/add' 这个 path,那么<br />find("/api/v1/:name/add"),find("/api/v1/*/add")两个调用应该能够拿到结果,在add 的过程中用于冲突判断。<br />假设有请求进来url 为 '/api/v1/:name/add' 那么match("/api/v1/:name/list")也应该能 match 到结果且变量name 为 :name。<br />再假设有请求进来 url 为 '/api/v1/yq/add' 那么match("/api/v1/yq/list")也应该能 match 到结果且变量name 为 yq 。find("/api/v1/yq/add" ) 则不会匹配到结果。
+# 后续改进
+
+目前实现在读树和写树之前,竞争一把全局锁,竞争失败后自旋直到竞争成功,然后完成读写。<br />解释一下为什么读都需要上锁,因为代码中大量运用了go 的 map 结构。这个结构只要并发读写直接会报如下错误:concurrent map read and map write<br />目前实现如下<br />![](/imgs/pixiu/trie-6.png)<br />引入 command 队列,所有对 trie 的用户写操作先入列,同时做读写分离,分为读树和写树,维护一个线程负责追 log 把 command 写入到写树,读树因为只读,没有写入线程操作读树所以可以不加锁。写树因为只有一条线程向树内写入,没有竞争问题,也可以不加锁。(写入操作并不会很频繁单线程完全能负荷)<br />定义一个配置延迟生效的时间,比如3s<br />每3秒,读树和写树角色切换,每个 trie 分别维护一个 command 队列的游标,游标代表当前这个 trie,追 log 追到了哪条�
 �录,写入线程每3s 切换写游标引用。<br />
+
+![](/imgs/pixiu/trie-7.png)
+
+如上图,最上面部分是一个先进先出的 command 队列,追 log 线程从这个队列中读取用户写操作,这个队列维护了两个游标 index1,index2,index1 代表了trie1 追 log 追到了 index1 的位置,index2 代表了 trie2 追 log 追到了 index2 的位置。追 log 线程同一时间内只会使用一个引用进行写操作,每次写完树对应的 index 游标下移一格,另一个 trie 引用将被用于读操作,一切读请求将从读引用对应的树中读取。因为追的是同一份 log ,最终一致性是能保证的。
+
+切换逻辑:
+
+1. 先使追 log 线程空转(不挂起,避免上下文切换,因为马上要恢复)
+1. 保证两个树都没有写入线程操作
+1. 切换读引用到另一个树
+1. 切换写引用到另一个树
+1. 恢复追 log 线程
+
+pr:<br />[https://github.com/apache/dubbo-go-pixiu/pull/262](https://github.com/apache/dubbo-go-pixiu/pull/262)<br />pkg/common/router/trie/trie.go:26
+
+
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/overview/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/overview/_index.md
new file mode 100755
index 0000000000..ad168ae642
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/overview/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "概述"
+linkTitle: "概述"
+weight: 10
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/overview/faq.md b/content/zh/docs3-v2/dubbo-go-pixiu/overview/faq.md
new file mode 100755
index 0000000000..590e06dec2
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/overview/faq.md
@@ -0,0 +1,29 @@
+---
+type: docs
+title: "Pixiu 常见问题"
+linkTitle: "Pixiu 常见问题"
+weight: 3
+---
+
+# 常见问题
+
+<a href="#1" target="_self">1.Pixiu 目前可以用于生产环境吗</a>
+
+<a href="#2" target="_self">2.Pixiu 目前支持高可用吗?</a>
+
+
+********
+<h3 id='1'>Q: 1.Pixiu 目前可以用于生产环境吗?</h3>
+
+**A:** 
+0.4.0版本之后就可以上生产环境,欢迎已经在使用的企业参与此issue:[who's using Pixiu](https://github.com/apache/dubbo-go-pixiu/issues/64)
+
+********
+<h3 id='2'>Q: 2.Pixiu 目前支持高可用吗?</h3>
+
+**A:** 
+
+目前 Pixiu 仅支持单实例部署,可以和 Nginx 组成无状态多实例集群。
+
+********
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/overview/terminology.md b/content/zh/docs3-v2/dubbo-go-pixiu/overview/terminology.md
new file mode 100755
index 0000000000..a06c3d6abf
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/overview/terminology.md
@@ -0,0 +1,33 @@
+---
+type: docs
+title: "Pixiu 术语"
+linkTitle: "Pixiu 术语"
+weight: 2
+---
+
+
+![](/imgs/pixiu/overview/terminology.png)
+
+#### Listener 监听器
+
+Lisnter 代表网络端口监听的能力,可以配置监听的协议类型,地址,端口。目前支持 TCP、HTTP、HTTP2 和 TRIPLE 协议。
+
+#### Network Filter 网络过滤器
+
+NetworkFilter 直接和 Listener 进行对接,代表对基础网络请求的处理,包括原始协议解析,路由解析等功能。
+
+#### Http Filter & Dubbo Filter HTTP & Dubbo 过滤器
+
+Http Filter 和 Dubbo Filter 可以看做二级 Filter,提供诸如协议转换,限流,身份认证等通用功能。
+
+#### Route 路由
+
+Route 代表请求的路由规则
+
+#### Cluster 集群
+
+Cluter 代表相同服务的集群,Endpoint 则代表服务集群中的单一服务实例。
+
+#### Adapter 适配器
+
+Adapter 则代表 Pixiu 和外界进行元数据获取的能力。能够根据服务中的服务元数据,进行路由和集群信息的动态获取。目前 Pixiu 支持两宽Adapter,分别是从 Dubbo 集群和 Springcloud 集群获取信息。
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/overview/what-is-pixiu.md b/content/zh/docs3-v2/dubbo-go-pixiu/overview/what-is-pixiu.md
new file mode 100755
index 0000000000..b427e733f4
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/overview/what-is-pixiu.md
@@ -0,0 +1,39 @@
+---
+type: docs
+title: "Pixiu 是什么"
+linkTitle: "Pixiu 是什么"
+description: Pixiu 是一款开源的 Dubbo 生态的 API 网关和 接入 dubbo 集群的语言解决方案。作为 API 网关形态。
+weight: 1
+---
+
+# Pixiu 是什么?
+
+
+Pixiu 是一款开源的 Dubbo 生态的 API 网关和 接入 dubbo 集群的语言解决方案。作为 API 网关形态, Pixiu 能接收外界的网络请求,将其转换为 dubbo 等协议请求,转发给背后集群;作为 Sidecar,Pixiu 期望可以代替代理服务注册到 Dubbo 集群,让多语言服务接入 Dubbo 集群提供更快捷的解决方案。
+
+
+![image](/imgs/pixiu/overview/pixiu-overview.png)
+
+
+
+
+# API 网关
+
+作为一款网关产品,Pixiu 帮助用户轻松创建、发布、维护、监控和保护任意规模的 API ,接受和处理成千上万个并发 API 调用,包括流量管理、 CORS 支持、授权和访问控制、限制、监控,以及 API 版本管理。除此以外,作为 Dubbo 的衍生产品,Pixiu 可以帮助 Dubbo 用户进行协议转换,实现跨系统、跨协议的服务能力互通。
+Pixiu 的整体设计遵守以下原则:
+- High performance: 高吞吐量以及毫秒级的延时。
+- 可扩展: 通过 go-plugin,用户可以根据自己的需求延展 Pixiu 的功能。
+- 简单可用: 用户通过少量配置,即可上线。
+
+
+# Sidecar 模式
+
+目前最为主流的接入 dubbo 集群的方式当然是集成语言对应的 sdk,但是如图的左侧部分。但是对于dubbo来讲,它的多语言支持能力不足,目前较为成熟的只有 java 版本和 go 版本,当然 js 版本 和 python 版本也在努力追赶中.其次,就是使用sdk的通用问题,比如代码耦合度高,版本升级困难,服务发现,服务路由和负载均衡策略不易整体调控等。
+
+所以 mesh 话或者 sidecar 的方案,也就是 service mesh 在16年时被提出。将服务发现,服务路由和负载均衡等逻辑放在 sidecar,服务使用轻量级 sdk 与之进行交互。 
+
+![](/imgs/pixiu/overview/pixiu-sidecar.png)
+
+对于接入 dubbo 的多语言解决方案。首推的当然是 pixiu 作为 sidecar 和 服务进行同时部署。pixiu提供 服务发现,流量治理,路由能力,协议转换能力和通讯能力。如图的左侧部分,使用sidecar的服务可以和原生使用 dubbp 框架的服务组成集群,无感的进行相互调用。
+另外一种方案是 pixiu 只单单作为代理,将服务注册到dubbo集群中,如图右侧部分,这种方案部署和运维较为简单,比如适合中小规模的集群。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/_index.md
new file mode 100755
index 0000000000..18301fe3ae
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "用户文档"
+linkTitle: "用户文档"
+weight: 20
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/_index.md
new file mode 100755
index 0000000000..ab8f26286a
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "Adapter 介绍"
+linkTitle: "Adapter 介绍"
+weight: 60
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/dubbo.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/dubbo.md
new file mode 100644
index 0000000000..3a4b35fa22
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/dubbo.md
@@ -0,0 +1,6 @@
+---
+type: docs
+title: "Dubbo 集群中心 Adapter"
+linkTitle: "Dubbo 集群中心 Adapter"
+weight: 10
+---
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/springcloud.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/springcloud.md
new file mode 100644
index 0000000000..04298a0684
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/adapter/springcloud.md
@@ -0,0 +1,6 @@
+---
+type: docs
+title: "Spring Cloud 集群中心 Adapter"
+linkTitle: "Spring Cloud 集群中心 Adapter"
+weight: 20
+---
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/_index.md
new file mode 100755
index 0000000000..339442c785
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "附录"
+linkTitle: "附录"
+weight: 90
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/http-to-dubbo-default-stragety.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/http-to-dubbo-default-stragety.md
new file mode 100644
index 0000000000..ff0e67278a
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/appendix/http-to-dubbo-default-stragety.md
@@ -0,0 +1,316 @@
+---
+type: docs
+title: "HTTP to Dubbo 默认转换协议"
+linkTitle: "HTTP to Dubbo 默认转换协议"
+weight: 10
+---
+
+# 背景
+
+
+​	通过 Http 提供一个统一的服务提供者视图,用户不用在乎后端Dubbo服务的版本差异,协议差异,通过简单地在Http请求中传递rpc调用的参数,完成一次Rpc调用,通过实现http调用后端dubbo服务,进一步简化后端服务设计的复杂性。
+
+# 目的
+
+​	统一Http调用后端dubbo服务的形式,方便网关产品实现 Http 调用转 dubbo 调用的实现,Dubbo能和网关更好的融合。
+
+# Conception
+
+## Dubbo RPC 调用的基本形式
+
+
+
+![img](/imgs/pixiu/user/appendix/img1.png)
+
+
+
+希望通过提供Http调用Dubbo的方式简化 Consumer 的Rpc调用流程
+
+
+
+![img](/imgs/pixiu/user/appendix/img2.png)
+
+
+
+网关会在整个服务调用的过程中承担更多的原本客户端的功能,比如负载均衡,服务治理,安全等能力,外部用户调用服务的时候将更多的关注与调用本身。
+
+
+
+## Http request 和 Http response 的格式
+
+request的URL和Header中包含RPC调用的元信息,包含服务名,方法名,服务分组,服务版本,request 的 body 中包含请求的参数,参数是 **json list** 的格式, 如果没有参数则为 ***null***
+
+http response 中包含请求的处理状态,返回结果或者调用的错误类型以及错误具体信息,返回的body中只包含一个 ***json object***,这个object中包含 ***code***,***result***,***error***
+
+通过 code 表示返回的具体状态,result 和 error 在返回中只会返回其中一个,分别是调用的返回结果,调用返回的错误信息。
+
+
+
+### Http request
+
+#### Http 请求的方法
+
+只能为 **POST** 方法
+
+
+
+#### Http 请求的 URL
+
+格式:[http://host/ {service} / {method](http://host/service/method)} or [https://host/ {service} / {method](https://host/service/method)}
+
+
+
+-  service 是调用的服务名,对应于Dubbo message body中的 service Name 
+-  method 是调用的方法名,对应于Dubbo message body中的 method Name 
+
+服务名和方法名都应该和后端服务的声明一致
+
+
+
+如果URL中无法获取到service和method,应该直接返回 
+
+| http code | code | detail                         |
+| --------- | ---- | ------------------------------ |
+| 400       | 3    | service or method not provided |
+
+
+
+#### Http 请求的Header
+
+
+
+Header中必须包含以下条目:
+
+- x-dubbo-http1.1-dubbo-version
+
+表明这个Http 请求是一个Http转dubbo的请求,目前支持Dubbo 协议和 triple 协议,可配置的选项为:
+
+- - x-dubbo-http1.1-dubbo-version: triple
+  - x-dubbo-http1.1-dubbo-version: dubbo
+
+​      前者表示这是转化为triple协议,后者表示转化为dubbo协议
+
+
+
+可选参数:
+
+-  x-dubbo-service-version 如果提供了应该填充到Dubbo message 的Serviceversion字段中.
+-  x-dubbo-service-group  如果提供了应该在attachment 添加 group 字段并把对应的值进行填充。 
+
+
+
+#### Http 请求的Body
+
+
+
+body中包含请求的参数,body中只包含一个 ***Json object*** 对象
+
+这个对象目前包含两个字段:
+
+- param
+
+param 的值类型为 list,标识调用方法的参数,顺序和方法签名中的参数顺序一致
+
+这里使用object组装请求参数是为了协议能够向后兼容,body中的对象可能会增加新的字段。
+
+
+
+##### 基本类型在 Json Java Go 中的映射关系
+
+| Json Type | Java Type         | Golang Type |
+| --------- | ----------------- | ----------- |
+| Integer   | java.lang.Long    | int64       |
+| Double    | java.lang.Double  | float64     |
+| String    | java.lang.String  | string      |
+| Null      | null              | nil         |
+| Bool      | java.lang.Boolean | bool        |
+| List      | java.lang.List    | silice      |
+| Object    | java.lang.Map     | map         |
+
+通过对基本类型映射关系的定义简化网关配置,对于只使用基本配置的转化,网关应该可以在不使用额外配置的情况下完成转化的
+
+
+
+##### Body 处理异常时的处理策略
+
+1.  调用方提供的请求参数 Json 解析错误,返回状态码 400 
+2.  调用的时候,无法确定参数的具体类型,例如,用户使用的自定义类型,但是没有在网关配置具体的类型名,应该返回状态码 400  
+
+| http code | code | detail                       |
+| --------- | ---- | ---------------------------- |
+| 400       | 3    | argument parse error         |
+| 400       | 3    | argument type info not found |
+
+在以上条件都符合时,一个Http 调用可以被转化成为 Dubbo 协议的调用,只要网关能够成功进行请求的转化,则网关回复调用方的时候,Http 状态码都应该是 200 OK,至于调用方调用后端服务出现错误的信息,应该放在 body 中的 code 以及 error 字段中。
+
+
+
+### http response
+
+在请求经过后端返回之后,需要将一下信息传递给调用方:
+
+| name     | description                                              |
+| -------- | -------------------------------------------------------- |
+| status   | 返回的状态,在dubbo response 的header的status 中         |
+| 返回值   | 调用成功返回的结果,如果没有返回值,则result 的值为 null |
+| 返回异常 | 调用失败,产生异常,返回异常的具体message                |
+
+返回值和返回异常只能出现一项
+
+code 和 grpc 中的 status code 一致 详细的 code 及其含义见 https://grpc.github.io/grpc/core/md_doc_statuscodes.html
+
+
+
+#### 返回异常的处理:
+
+dubbo 中的异常以hessian2 的 class 类型返回,返沪的error中只需要对应的message 字段即可
+
+
+
+
+
+## Dubbo 协议的具体转化
+
+### Dubbo 协议的具体介绍 可以见文章
+
+https://dubbo.apache.org/en/blog/2018/10/05/introduction-to-the-dubbo-protocol/
+
+
+
+### Dubbo 协议的 message 格式
+
+![img](/imgs/dev/dubbo_protocol_header.png)
+
+
+
+#### Dubbo Header的封装要求
+
+| bits     | Name           | description                                           |
+| -------- | -------------- | ----------------------------------------------------- |
+| 0 - 15   | Magic Number   | 必须为 0xdabb                                         |
+| 16       | message 的类型 | 必须为 1 (request)                                  |
+| 17       | 2-way          | 必须为 1 (需要服务端返回值)                         |
+| 18       | Event          | 必须为 0 不支持事件类型                               |
+| 19 - 23  | 序列化类型     | 可以扩展实现Hessian,Json等序列化类型,类型编号如下表 |
+| 24 - 31  | Status         | 表示 response 的状态,见Status 处理要求               |
+| 32 - 95  | Request Id     | 客户端的请求ID,可以根据需要自行定义                  |
+| 96 - 127 | Data length    | 请求体的长度,请求体的大小                            |
+
+
+
+序列化类型编号:
+
+| Serialization Type | Code |
+| ------------------ | ---- |
+| Hessian2           | 2    |
+| Java               | 3    |
+| Compact Java       | 4    |
+| Fast Json          | 6    |
+| Native Java        | 7    |
+
+
+
+请求Header中的字段应该以大端的形式封装,发送到服务端
+
+
+
+#### Dubbo Body
+
+
+
+请求的body应该包含以下内容:
+
+| name                   | description                                                  |
+| ---------------------- | ------------------------------------------------------------ |
+| Dubbo Version          | 根据网关的配置,或者Http请求获取                             |
+| Service Name           | 服务名                                                       |
+| Method Name            | 调用方法名,采用泛化调用的方式,此项目固定为“$invoke”        |
+| Method parameter types | 参数类型,泛化调用有固定值 "Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/Object;" |
+| Method arguments       | 使用配置的序列化方式将对应的参数序列化,按照用户传入的参数的顺序放入参数 |
+
+以上的各个项目在使用了指定的序列化形式之后,按照上表指定的顺序进行序列化。
+
+attachment 目前不转化
+
+
+
+***注意***:
+
+
+
+使用文本类型的序列化(Json) 在每一个序列化对象后边要加上行分割符( ***"\n"*** or ***"\r\n"*** )
+
+Java 中在使用FastJson 编解码的时候使用了BufferedReader,每次取buffer中的对象的时候,会先调用BufferReader的readLine方法,此方法分割行依靠 ‘/n’ , ’/r/n‘
+
+以下给出了Dubbo 协议中返回header中的status对应于GRPC status的对应列表
+
+
+
+##### Status 的处理
+
+Dubbo resposne status 中,OK延续使用grpc的 OK code,其余的 status Number编号紧接着 grpc 的16个 code进行编号
+
+对应的error详情是 response 中异常的 message。
+
+| Dubbo State                                    | Number |
+| ---------------------------------------------- | ------ |
+| ResponseStatus::Ok                             | 0      |
+| ResponseStatus::ClientTimeout                  | 130    |
+| ResponseStatus::ServerTimeout                  | 131    |
+| ResponseStatus::ServiceNotFound                | 12     |
+| ResponseStatus::ServerThreadpoolExhaustedError | 13     |
+| ResponseStatus::ClientError                    | \      |
+| ResponseStatus::ServerError                    | 13     |
+| ResponseStatus::ServiceError                   | 13     |
+| ResponseStatus::BadResponse                    | 13     |
+| ResponseStatus::BadRequest                     | 3      |
+
+## Triple 协议的具体转化
+
+Triple 是基于GRPC的,定义在Http2 协议之上
+
+### Triple中RPC调用的元信息
+
+
+
+#### Triple 通过 URL 传递调用的服务名和方法名
+
+格式: [http://host/ {service} / {method](http://host/service/method)}
+
+我们的规范兼容 Triple 通过http2传递参数的形式,尽量做到dubbo 和 triple 的统一。
+
+
+
+#### Header Frame
+
+header 中应该包含以下条目
+
+- Content-Type:***application/grpc-proto***
+
+标识这是一个 triple 协议的rpc调用
+
+- x-dubbo-service-group
+
+指明调用的服务的分组
+
+- x-dubbo-service-version
+
+指明调用的服务的版本
+
+
+
+#### Data frame
+
+Triple协议将请求参数放在Body中,在triple中,如果服务中的方法定义能够使用pb序列化,则只有一层序列化,如果需要用到其他的序列化,则需要使用TripleRequestWrapper
+
+对参数进行包装。
+
+
+
+我们推广使用 ***Triple + pb*** 的序列化形式,服务的提供方需要给出服务的 proto 定义,对于triple协议网关对于***triple + pb***  的转化是比较容易实现的,如果用户没有提供proto定义,需要返回信息:
+
+| http code | code | detail                       |
+| --------- | ---- | ---------------------------- |
+| 400       | 3    | argument type info not found |
+
+### 
\ No newline at end of file
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/configurations.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/configurations.md
new file mode 100755
index 0000000000..fe6a5eb1a6
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/configurations.md
@@ -0,0 +1,150 @@
+---
+type: docs
+title: "启动命令和配置详解"
+linkTitle: "启动命令和配置详解"
+weight: 20
+---
+
+### Pixiu 启动命令
+
+Pixiu 分为两个形态 Gateway 和 Sidecar,目前 Pixiu 可执行程序的命令如下所示,其中 pixiu 是可执行文件名称。注意,-c 后是本地配置文件的绝对路径。
+
+```
+pixiu gateway start -c /config/conf.yaml
+```
+
+### 配置详解 
+
+Pixiu 接受 yaml 格式的文件作为其主配置文件,其中对 Pixiu 的各类组件进行配置。我们以快速开始中的配置文件为例,详细讲解其中的组成部分,并且列出可能的扩展。
+
+```
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP"
+      address:
+        socket_address:
+          address: "0.0.0.0"
+          port: 8883
+      filter_chains:
+          filters:
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "*"
+                http_filters:
+                  - name: dgp.filter.http.dubboproxy
+                    config:
+                      dubboProxyConfig:
+                        auto_resolve: true
+                        registries:
+                          "zookeeper":
+                            protocol: "zookeeper"
+                            timeout: "3s"
+                            address: "127.0.0.1:2181"
+                            username: ""
+                            password: ""
+```
+
+首先,类似 `envoy`的配置,`static_resources` 表示如下都是静态配置。在静态配置中包括 Listener,NetworkFilter,Route,HttpFilter等组件,它们之间并不是完全独立的。
+
+#### Listener
+
+比如说上述配置就声明了一个监听本地 8883 端口的 HTTP 类型的 Listener,更多 Listener 的配置可以查看 [Listener](/zh-cn/docs/user/listener/http.html)。
+
+```
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP"
+      address:
+        socket_address:
+          address: "0.0.0.0"
+          port: 8883
+      filter_chains:
+```
+listeners 的配置有 `protocol_type` 表示是 HTTP 类型的 Listener,`address` 则配置了监听的地址和端口,`filter_chains` 则指定了该 Listener 接收到请求要交由哪些 NetworkFilter 处理。
+
+#### NetworkFilter
+
+NetworkFilter 是 Pixiu 的关键组件之一,它可以有 Route 和 HttpFilter 一起组成,负责接收 Listener 传递而来的请求并进行处理。
+
+```
+filters:
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                http_filters:
+```
+
+上述配置指明了使用 `dgp.filter.httpconnectionmanager` 这款 NetworkFilter,它能够接收 Http 请求的 `Request` 和 `Response` 进行处理,并且可以配置 Route 路由信息和使用 HttpFilter 对请求进行链式处理。更多的 NetworkFilter 可以查看 [NetworkfFilter文档](/zh-cn/docs/user/networkfilter/http.html)
+
+
+
+#### Route 路由 和 Cluster 集群
+
+route 可以用于对请求进行路由分发,以下面配置为例。具体配置文件可以查看 `/samples/http/simple` 案例的配置文件
+
+```
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "/user"
+                      route:
+                        cluster: "user"
+```
+
+上述配置指定了对于 Path 的前缀为 `/user` 的 HTTP 请求,转发给名称为 user 的 cluster 服务集群中。
+
+而具体 cluster 集群的定义如下所示:
+
+```
+  clusters:
+    - name: "user"
+      lb_policy: "RoundRobin"
+      endpoints:
+        - id: 1
+          socket_address:
+            address: 127.0.0.1
+            port: 1314
+```
+
+上述配置定义了名为 user 的 cluster 集群信息,它的负载均衡策略是 RoundRobin,然后它包含一个 endpoint 实例,其地址是 127.0.0.1。
+
+目前,在转发 HTTP 请求或者 Grpc 请求的场景下需要使用 Route 和 Cluster,而涉及到转发 Dubbo 相关请求的场景下暂时不需要二者。
+
+#### HttpFilter
+
+当 NetworkFilter 接收到 Listener 传来的请求后,需要对其进行系列操作,例如限流、鉴权等,最后还需要将这个请求转发给具体上游服务。这些工作都交给 NetworkFilter 所持有的 HttpFilter 链进行处理。
+
+```
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                http_filters:
+                  - name: dgp.filter.http.dubboproxy
+                    config:
+                      dubboProxyConfig:
+                        auto_resolve: true
+                        registries:
+                          "zookeeper":
+                            protocol: "zookeeper"
+                            timeout: "3s"
+                            address: "127.0.0.1:2181"
+                            username: ""
+                            password: ""
+```
+
+如上配置所示,`httpconnectionmanager` 这个 NetworkFilter 下有一个 HttpFilter chain。其中包括 `dgp.filter.http.dubboproxy` 这一款 HttpFilter。
+它负责将 HTTP 请求转换为 Dubbo 请求,并转发出去。它需要配置一个 Dubbo 集群注册中心的地址信息,指定其为 zookeeper 中间件。其中 `auto_resolve` 则指定使用 HTTP to Dubbo 默认转换协议来进行相关数据转换,具体可以参考[《默认转换协议》](/zh-cn/docs/user/appendix/http-to-dubbo-default-stragety.html)。
+
+更多的 HttpFilter 可以查看 [HttpFilter文档](/zh-cn/docs/user/httpfilter/dubbo.html)。
+
+#### Adapter
+
+Adapter 代表 Pixiu 和外界元数据中心交互的能力。目前有两款,分别是 `dgp.adapter.dubboregistrycenter` 和 `dgp.adapter.springcloud`,分别代表从 Dubbo 集群注册中心和 Spring Cloud 集群注册中心获取服务实例信息,构建 Pixiu 转发 Http 请求路由规则的。
+
+更多的 Adapter 可以查看 [Adapter文档](/zh-cn/docs/user/adapter/dubbo.html)。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/deployment.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/deployment.md
new file mode 100644
index 0000000000..80c5f7f6c4
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/deployment.md
@@ -0,0 +1,79 @@
+---
+type: docs
+title: "部署"
+linkTitle: "部署"
+weight: 30
+---
+
+## 一、Docker镜像部署
+
+注:首先确认本机已经安装好docker并且启动
+
+### 1、从docker hub 拉取 pixiu 镜像
+
+`docker pull phial3/dubbo-go-pixiu:latest`
+
+### 2、按照需求准备pixiu配置
+#### [pixiu配置参数详解](./configurations.md)
+
+准备 `log.yml` 和 `conf.yaml` 配置文件,将这两个配置文件在pixiu启动的时候挂在到本地
+
+### 3、启动 pixiu
+
+**前台启动**:,可方便查看服务信息运行是否正常
+```shell
+docker run --name dubbo-go-pixiu -p 8883:8883 \
+    -v /yourpath/conf.yaml:/etc/pixiu/conf.yaml \
+    -v /yourpath/log.yml:/etc/pixiu/log.yml \
+    apache/dubbo-go-pixiu:latest
+```
+**后台启动**:
+```shell
+docker run -itd --name dubbo-go-pixiu -p 8883:8883 \
+    -v /yourpath/conf.yaml:/etc/pixiu/conf.yaml \
+    -v /yourpath/log.yml:/etc/pixiu/log.yml \
+    apache/dubbo-go-pixiu:latest
+```
+
+> 注:
+> 
+> (1) `--name`命令后面的dubbo-go-pixiu为你的pixiu实例的名称,可自行修改
+> 
+> (2)命令中的`/yourpath/**`路径为你本地存放pixiu配置文件的绝对路径
+
+### 4、查看 pixiu 实例
+
+`docker ps | grep dubbo-go-pixiu` 正在运行的pixiu实例
+
+`docker exec -it dubbo-go-pixiu /bin/bash` 进入pixiu
+
+### 5、停止pixiu
+
+`docker stop dubbo-go-pixiu` 停止pixiu
+
+`docker restart dubbo-go-pixiu` 重启pixiu
+
+
+## 二、源码构建部署
+
+注:首先确认本机已经安装好 golang 1.15+ 开发环境,启用`go mod`
+
+### 1、下载 pixiu 源码到本地
+`git clone git@github.com:apache/dubbo-go-pixiu.git`
+
+### 2、配置pixiu
+
+#### [pixiu配置参数详解](./configurations.md)
+
+进入到pixiu的源码目录`cd dubbo-go-pixiu/`,在`dubbo-go-pixiu/configs/`目录下
+修改配置文件`conf.yaml`和`log.yml`
+
+### 3、编译构建
+在pixiu的源码目录`dubbo-go-pixiu/`下执行`make build`
+: 构建完成会在当前目录下生成名为`dubbo-go-pixiu`的可执行文件
+
+### 4、启动服务与运行示例
+
+在当前目录下`make run` 可根据你当前的配置直接启动pixiu服务
+
+[运行示例参考](./quickstart.md)
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/_index.md
new file mode 100755
index 0000000000..919c1e3464
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "Http Filter 介绍"
+linkTitle: "Http Filter 介绍"
+weight: 60
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/dubbo.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/dubbo.md
new file mode 100644
index 0000000000..cb5cd77961
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/dubbo.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "Dubbo HttpFilter 介绍"
+linkTitle: "Dubbo HttpFilter 介绍"
+weight: 10
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/hystrix.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/hystrix.md
new file mode 100644
index 0000000000..8407a6eb22
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/hystrix.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "断路器介绍"
+linkTitle: "断路器介绍"
+weight: 30
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/ratelimit.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/ratelimit.md
new file mode 100644
index 0000000000..b94645b552
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/httpfilter/ratelimit.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "RateLimiter 介绍"
+linkTitle: "RateLimiter 介绍"
+weight: 20
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/_index.md
new file mode 100755
index 0000000000..ada0cfb461
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "Listener 介绍"
+linkTitle: "Listener 介绍"
+weight: 40
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http.md
new file mode 100644
index 0000000000..38ac73c3a3
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http.md
@@ -0,0 +1,49 @@
+
+---
+type: docs
+title: "Http Listener 介绍"
+linkTitle: "Http Listener 介绍"
+weight: 10
+---
+
+Http Listener 是专门负载接收 HTTP 请求的 Listener,它可以设置 HTTP 监听的地址和端口。它可以通过如下配置进行引入。
+
+```
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP" # 表明是引入 HTTP Listener
+      address:
+        socket_address:
+          address: "0.0.0.0" # 地址
+          port: 8883 # 端口
+```
+
+Http Listener 的具体实现可以参考 `pkg/listener/http`。
+
+有关 HTTP Listener 的案例,可以参考:
+- HTTP to Dubbo 请求的转换,[案例](/zh-cn/docs/user/samples/http_to_dubbo.html)
+- HTTP 请求代理,[案例](/zh-cn/docs/user/samples/http_proxy.html)
+
+目前也支持 HTTPS 协议。可以将 `protocol_type` 修改为 `HTTPS`。并且添加 `domains` 和 `certs_dir` 来指定域名和 cert 文件目录。
+
+```
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTPS"
+      address:
+        socket_address:
+          domains:
+            - "sample.domain.com"
+            - "sample.domain-1.com"
+            - "sample.domain-2.com"
+          certs_dir: $PROJECT_DIR/cert
+```
+
+具体案例可以查看 [案例](/zh-cn/docs/user/samples/https.html)
+
+
+
+
+
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http2.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http2.md
new file mode 100644
index 0000000000..33254b2ab0
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/http2.md
@@ -0,0 +1,10 @@
+
+---
+type: docs
+title: "Http2 Listener 介绍"
+linkTitle: "Http2 Listener 介绍"
+weight: 20
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/tcp.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/tcp.md
new file mode 100644
index 0000000000..b588be98ac
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/tcp.md
@@ -0,0 +1,10 @@
+
+---
+type: docs
+title: "TCP Listener 介绍"
+linkTitle: "TCP Listener 介绍"
+weight: 30
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/triple.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/triple.md
new file mode 100644
index 0000000000..f91f76716e
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/listener/triple.md
@@ -0,0 +1,10 @@
+
+---
+type: docs
+title: "Triple Listener 介绍"
+linkTitle: "Triple Listener 介绍"
+weight: 40
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/_index.md
new file mode 100755
index 0000000000..9f50f851e4
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "Network Filter 介绍"
+linkTitle: "Network Filter 介绍"
+weight: 50
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/dubbo.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/dubbo.md
new file mode 100644
index 0000000000..14f209475b
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/dubbo.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "Dubbo NetWorkFilter 介绍"
+linkTitle: "Dubbo NetWorkFilter 介绍"
+weight: 30
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/grpc.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/grpc.md
new file mode 100644
index 0000000000..b2bd2cbfb2
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/grpc.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "Grpc NetWorkFilter 介绍"
+linkTitle: "Grpc NetWorkFilter 介绍"
+weight: 20
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/http.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/http.md
new file mode 100644
index 0000000000..6106ce0595
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/networkfilter/http.md
@@ -0,0 +1,10 @@
+---
+type: docs
+title: "Http NetWorkFilter 介绍"
+linkTitle: "Http NetWorkFilter 介绍"
+weight: 10
+---
+
+Http NetWorkFilter 用来处理 HTTP 请求,它能接收来自 HTTP Listener 传递的 HTTP 请求,然后将其交给自身维护的 HTTP Filter 链进行处理,最后将响应返回给调用方。
+
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/_index.md
new file mode 100755
index 0000000000..3eaa02c25c
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "质量指标"
+linkTitle: "质量指标"
+weight: 80
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/performance.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/performance.md
new file mode 100755
index 0000000000..418f23b8b1
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/performance.md
@@ -0,0 +1,8 @@
+---
+type: docs
+title: "性能"
+linkTitle: "性能"
+weight: 10
+---
+
+欢迎认领补充此文档。
\ No newline at end of file
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/stability.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/stability.md
new file mode 100644
index 0000000000..28b7ed21b4
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/quality/stability.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "稳定性"
+linkTitle: "稳定性"
+weight: 10
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/quickstart.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/quickstart.md
new file mode 100755
index 0000000000..e86dc1e4b9
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/quickstart.md
@@ -0,0 +1,163 @@
+---
+type: docs
+title: "快速开始"
+linkTitle: "快速开始"
+weight: 10
+---
+
+让我们从将 HTTP 请求转换为 Dubbo2 请求的案例来快速展示 Pixiu 的能力。
+
+## 用例
+
+Pixiu 将 Client 的 HTTP 请求转换为 Dubbo2 请求,然后转发给背后的 Dubbo Server,然后将 Dubbo Server 的响应转换为 HTTP 响应,最后返回给 Client。
+
+### 架构图
+
+![Architecture](/imgs/pixiu/user/quick_start_architecture.png) 
+
+### 案例
+
+案例路径请查看 `/samples/dubbogo/simple/resolve`
+
+#### Dubbo Server 实现和启动
+
+Dubbo Server 提供用户增删改查的相关接口,其具体的代码实现见案例路径下的 `server`
+
+Dubbo Server 的配置如下所示,注册了 Dubbo2 协议的 interface `com.dubbogo.pixiu.UserService`。
+
+```yaml
+dubbo:
+  registries:
+    zk:
+      protocol: zookeeper
+      timeout: 3s
+      address: 127.0.0.1:2181
+  protocols:
+    dubbo:
+      name: dubbo
+      port: 20000
+  provider:
+    registry-ids: zk
+    services:
+      UserProvider:
+        group: test
+        version: 1.0.0
+        cluster: test_dubbo
+        serialization: hessian2
+        interface: com.dubbogo.pixiu.UserService
+```
+
+#### Pixiu 配置和启动
+
+为了用例的场景,Pixiu 需要启动对应的 HTTP Listener 进行 HTTP 请求的监听,所以就会使用到 `httpconnectionmanager`。
+然后因为要将 HTTP 请求转换为 Dubbo请求,所以需要使用 `dgp.filter.http.dubboproxy`,这里我们将其`auto_resolve` 设置为true,表示开启 HTTP to Dubbo 默认转换协议(具体定义请看[附录](/zh-cn/docs/user/appendix/http-to-dubbo-default-stragety.html))。
+
+Pixiu 的具体配置如下所示
+
+```
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP"
+      address:
+        socket_address:
+          address: "0.0.0.0"
+          port: 8883
+      filter_chains:
+          filters:
+            - name: dgp.filter.httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "*"
+                http_filters:
+                  - name: dgp.filter.http.dubboproxy
+                    config:
+                      dubboProxyConfig:
+                        auto_resolve: true
+                        registries:
+                          "zookeeper":
+                            protocol: "zookeeper"
+                            timeout: "3s"
+                            address: "127.0.0.1:2181"
+                            username: ""
+                            password: ""
+```
+
+
+#### Client 实现
+
+Client 就是简单的 HTTP Client 实现,但是需要按照前文提及的 HTTP to Dubbo 默认转换协议在 HTTP 请求的 Path 和 Header 中填入对应的数据,具体如下所示。
+
+```
+	url := "http://localhost:8883/UserService/com.dubbogo.pixiu.UserService/GetUserByName"
+	data := "{\"types\":\"string\",\"values\":\"tc\"}"
+	client := &http.Client{Timeout: 5 * time.Second}
+	req, err := http.NewRequest("POST", url, strings.NewReader(data))
+	req.Header.Set("x-dubbo-http1.1-dubbo-version", "1.0.0")
+	req.Header.Set("x-dubbo-service-protocol", "dubbo")
+	req.Header.Set("x-dubbo-service-version", "1.0.0")
+	req.Header.Set("x-dubbo-service-group", "test")
+
+	assert.NoError(t, err)
+	req.Header.Add("Content-Type", "application/json")
+	resp, err := client.Do(req)
+```
+
+
+#### 案例启动
+
+项目提供了快速启动脚本,需要本地先安装有 Go 语言开发环境。
+
+
+```
+# cd 到案例总目录
+cd samples/dubbogo/simple/
+
+# 进行环境准备,启动 zk 和准备对应配置文件
+./start.sh prepare resolve
+
+# 启动 dubbo server
+./start.sh startServer resolve
+
+# 启动 pixiu 
+
+./start.sh startPixiu resolve
+
+# 启动 Client 测试用例
+
+./start.sh startTest resolve
+
+# 或者使用 curl 
+
+curl -X POST 'http://localhost:8883/UserService/com.dubbogo.pixiu.UserService/GetUserByName' -d '{"types":"string","values":"tc"}' -H 'Content-Type: application/json' -H 'x-dubbo-http1.1-dubbo-version':'1.0.0' -H 'x-dubbo-service-protocol':"dubbo" -H 'x-dubbo-service-version':'1.0.0' -H 'x-dubbo-service-group':'test'
+
+# 返回值 {"age":15,"code":1,"iD":"0001","name":"tc","time":"2021-08-01T18:08:41+08:00"}
+
+```
+
+#### docker示例
+```shell
+docker pull phial3/dubbo-go-pixiu:latest
+
+docker run --name pixiuname -p 8883:8883 \
+    -v /yourpath/conf.yaml:/etc/pixiu/conf.yaml \
+    -v /yourpath/log.yml:/etc/pixiu/log.yml \
+    apache/dubbo-go-pixiu:latest
+
+# http请求调用dubbo服务转换,首先启动provider,这里使用zookeeper作为注册中心
+cd samples/dubbogo/simple/resolve/server
+
+# 添加需要的环境变量,指定provider的配置文件位置
+export DUBBO_GO_CONFIG_PATH="../profiles/dev/server.yml"
+export APP_LOG_CONF_FILE="../profiles/dev/log.yml"
+
+# 启动provider
+go run server.go user.go
+
+# 进入到test目录下,启动test示例
+cd samples/dubbogo/simple/resolve/test
+
+go test  pixiu_test.go
+```
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/_index.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/_index.md
new file mode 100755
index 0000000000..1e7a812f9f
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/_index.md
@@ -0,0 +1,8 @@
+
+---
+type: docs
+title: "案例介绍"
+linkTitle: "案例介绍"
+weight: 70
+---
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_proxy.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_proxy.md
new file mode 100644
index 0000000000..b970d2904b
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_proxy.md
@@ -0,0 +1,65 @@
+---
+type: docs
+title: "Http Proxy 案例介绍"
+linkTitle: "Http Proxy 案例介绍"
+weight: 10
+---
+
+### HTTP 代理
+
+HTTP 代理案例展示了 Pixiu 接收外界 HTTP 请求然后转发给背后的 HTTP Server 的功能。
+
+![](/imgs/pixiu/user/samples/http_proxy.png)
+
+案例代码具体查看 `/samples/http/simple`。案例中的目录结构和作用如下所示:
+
+```
+- pixiu # pixiu 配置文件
+- server # http server
+- test # client or unit test
+```
+
+
+我们来具体看一下有关 pixiu 的具体配置文件。
+
+```
+static_resources:
+  listeners:
+    - name: "net/http"
+      protocol_type: "HTTP" # 使用 HTTP Listener
+      address:
+        socket_address:
+          address: "0.0.0.0" # 监听地址设置为 0.0.0.0
+          port: 8888  # 端口设置为 8888
+      filter_chains:
+          filters:
+            - name: dgp.filter.httpconnectionmanager  # NetworkFilter 设置为 httpconnectionmanager
+              config:
+                route_config:
+                  routes:
+                    - match:
+                        prefix: "/user"    # 设置路由规则,将 /user 前缀的请求转发给名称为 user 的 cluster 集群
+                      route:
+                        cluster: "user"
+                        cluster_not_found_response_code: 505
+                http_filters:
+                  - name: dgp.filter.http.httpproxy  # 使用 dgp.filter.http.httpproxy 这个 HttpFilter 来进行转发
+                    config:
+
+  clusters:
+    - name: "user"  # 配置一个名称为 user 的 集群,其中有一个实例,地址是 127.0.0.1:1314
+      lb_policy: "random" 
+      endpoints:
+        - id: 1
+          socket_address:
+            address: 127.0.0.1
+            port: 1314
+```
+
+
+可以先启动 `Server` 文件夹下的 Http Server,然后再使用如下命令启动 `Pixiu`,最后执行 test 文件夹下的单元测试。注意,-c 后是本地配置文件的绝对路径。
+
+```
+pixiu gateway start -c /pixiu/conf.yaml
+```
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_to_dubbo.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_to_dubbo.md
new file mode 100644
index 0000000000..0edb1d4d43
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/http_to_dubbo.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "Http to Dubbo 案例介绍"
+linkTitle: "Http to Dubbo 案例介绍"
+weight: 20
+---
+
+欢迎认领补充此文档。
+
diff --git a/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/https.md b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/https.md
new file mode 100644
index 0000000000..7f88285869
--- /dev/null
+++ b/content/zh/docs3-v2/dubbo-go-pixiu/user/samples/https.md
@@ -0,0 +1,9 @@
+---
+type: docs
+title: "Https 案例介绍"
+linkTitle: "Https 案例介绍"
+weight: 30
+---
+
+欢迎认领补充此文档。
+
diff --git a/static/imgs/pixiu/overview/pixiu-overview.png b/static/imgs/pixiu/overview/pixiu-overview.png
new file mode 100644
index 0000000000..f968ec640b
Binary files /dev/null and b/static/imgs/pixiu/overview/pixiu-overview.png differ
diff --git a/static/imgs/pixiu/overview/pixiu-sidecar.png b/static/imgs/pixiu/overview/pixiu-sidecar.png
new file mode 100644
index 0000000000..eb6bb01713
Binary files /dev/null and b/static/imgs/pixiu/overview/pixiu-sidecar.png differ
diff --git a/static/imgs/pixiu/overview/terminology.png b/static/imgs/pixiu/overview/terminology.png
new file mode 100644
index 0000000000..e654d9a478
Binary files /dev/null and b/static/imgs/pixiu/overview/terminology.png differ
diff --git a/static/imgs/pixiu/trie-1.png b/static/imgs/pixiu/trie-1.png
new file mode 100644
index 0000000000..b10862e434
Binary files /dev/null and b/static/imgs/pixiu/trie-1.png differ
diff --git a/static/imgs/pixiu/trie-2.png b/static/imgs/pixiu/trie-2.png
new file mode 100644
index 0000000000..0e48774fde
Binary files /dev/null and b/static/imgs/pixiu/trie-2.png differ
diff --git a/static/imgs/pixiu/trie-3.png b/static/imgs/pixiu/trie-3.png
new file mode 100644
index 0000000000..2b44db1720
Binary files /dev/null and b/static/imgs/pixiu/trie-3.png differ
diff --git a/static/imgs/pixiu/trie-4.png b/static/imgs/pixiu/trie-4.png
new file mode 100644
index 0000000000..ecbbca3b20
Binary files /dev/null and b/static/imgs/pixiu/trie-4.png differ
diff --git a/static/imgs/pixiu/trie-5.png b/static/imgs/pixiu/trie-5.png
new file mode 100644
index 0000000000..05b710f307
Binary files /dev/null and b/static/imgs/pixiu/trie-5.png differ
diff --git a/static/imgs/pixiu/trie-6.png b/static/imgs/pixiu/trie-6.png
new file mode 100644
index 0000000000..7da5402c6c
Binary files /dev/null and b/static/imgs/pixiu/trie-6.png differ
diff --git a/static/imgs/pixiu/trie-7.png b/static/imgs/pixiu/trie-7.png
new file mode 100644
index 0000000000..c4b2c7d34f
Binary files /dev/null and b/static/imgs/pixiu/trie-7.png differ
diff --git a/static/imgs/pixiu/user/appendix/img1.png b/static/imgs/pixiu/user/appendix/img1.png
new file mode 100644
index 0000000000..a654ce0f9a
Binary files /dev/null and b/static/imgs/pixiu/user/appendix/img1.png differ
diff --git a/static/imgs/pixiu/user/appendix/img2.png b/static/imgs/pixiu/user/appendix/img2.png
new file mode 100644
index 0000000000..372e72602c
Binary files /dev/null and b/static/imgs/pixiu/user/appendix/img2.png differ
diff --git a/static/imgs/pixiu/user/quick_start_architecture.png b/static/imgs/pixiu/user/quick_start_architecture.png
new file mode 100644
index 0000000000..e9a1a7b604
Binary files /dev/null and b/static/imgs/pixiu/user/quick_start_architecture.png differ
diff --git a/static/imgs/pixiu/user/samples/http_proxy.png b/static/imgs/pixiu/user/samples/http_proxy.png
new file mode 100644
index 0000000000..8a8e331eed
Binary files /dev/null and b/static/imgs/pixiu/user/samples/http_proxy.png differ