|Dubbo 跨语言调用神兽:dubbo-go-pixiu( 二 )
可扩展 不同的使用场景有着各自独特的需求 。 为满足不同用户的定制化需求 , Pixiu 使用了插件模式 。 开发者可以通过编写 go plugin , 将自身特有的业务逻辑以 filter 形式内嵌至 Pixiu 网关中 , 实现诸如企业登录鉴权等功能 。
图 1: Pixiu 核心功能列表
Pixiu 的架构设计 图 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 跨语言调用神兽:dubbo-go-pixiu】Dubbo client 的实现对比 HTTP client 会稍微复杂 , 其基础为 Dubbo 服务的泛化调用 。 泛化调用技术是 Dubbo 提供的一个很基础的功能只需要知道调用的方法名、参数类型和返回值类型 , 即可发起服务调用 。 客户端对服务端的泛化调用既可以通过注册中心发现服务 , 也可以直连服务端 , 实现对服务的动态调用 。
如下面代码所示 , Pixiu 通过动态配置 referenceConfig , 然后通过 GetRPCService 生成 Dubbo 的 Generic Client(泛化调用客户端)进行下一步的调用 。
- 跨境|跨境电商迈入数字化变革期
- 鸿蒙的跨屏协同,安卓也可拥有
- 电子商务|欧洲跨境电商销售额市场排名公布,第一名令人意外!
- 拼多多争抢618
- |未来5年,跨境电商是取代房子的最好投资
- 文艺辣评丨新东方直播:一场语言的行为艺术?
- c语言|负责任地推荐这3部手机,好看又配置强,用到2026年不成问题
- 徐立|恒讯科技分析:跨境电商vps和跨境电商vpn谁更有优势?
- 奈飞|Ajax跨域请求的两种实现方式
- 华为mate|华为跨界造车成功,扯下了多少“巨头”的遮羞布?
