Dubbo-go-pixiu 是一款高性能 API 网关,支持 Dubbo 和 Http 等多种协议。具体介绍文章可以参考《Dubbo 跨语言调用神兽:dubbo-go-pixiu》

近期社区发布了 0.4.0 版本,具体请查看 v0.4.0。相关改进实在太多,本文只列出相关重大 feature、bugfix 、 性能提升项。

1 动态从 Spring Cloud 和 Dubbo 注册中心拉取路由和集群配置数据

Pixiu 原本依赖本地配置文件读取路由和 upstream 集群配置数据,对于真实生产场景十分不方便。因此,Pixiu 需要支持从集群注册中心动态获取路由和集群配置数据的功能。

如上图所示,服务A、B、C 进行服务注册,将自身元数据存储在注册中心。而 Pixiu 则从注册中心拉取注册的服务元数据,构建自己的路由规则和转发集群配置。当客户端发送请求时,Pixiu 会基于构建的转发规则,将请求转发给对应的后端服务。

社区同学分别就目前主流的两大微服务解决方案 Spring Cloud 和 Dubbo 进行了相关特性开发,相关的 pr 为 https://github.com/apache/dubbo-go-pixiu/pull/255https://github.com/apache/dubbo-go-pixiu/pull/256

目前,该特性只支持从 zk 和 nacos 拉取元数据,更多服务注册中心的支持工作正在进行中,欢迎感兴趣的同学参与,可以加入钉钉群 31203920。

2 支持 Http 协议 转换为 gRPC 协议

gRPC 协议已经是事实上的云原生基础通信协议。etcd、istio、dapr 等大量云原生中间件都提供 gRPC 相关的 API 接口供外界使用,dubbogo 3.0 也是基于 gRPC 构建了完全兼容 gRPC 的 triple协议。

但是对于外部系统而言,传统 HTTP 请求仍然是最为简单和稳定的通信手段,所以 Pixiu 提供了 Http 协议请求转换为 gRPC 协议请求的能力,方便将内部服务的 gRPC API 以 Http 的形式进行对外暴露。具体模式如下图所示,Pixiu 负责将客户端的 Http 请求进行解码,然后编码为 gRPC 请求,并转发给后端服务。

目前 Pixiu 是基于本地配置的 proto 文件进行相关协议的编解码工作的,具体pr 为 https://github.com/apache/dubbo-go-pixiu/pull/244。下一阶段将通过 gRPC 的反射能力,来动态获取 proto 配置信息,减少网关处的配置工作。

3 支持 jaeger 规范的链路传播协议

可观测性是大型软件系统的重要质量指标之一,而分布式链路追踪是其中的重中之重。

Pixiu 基于 opentelemetry 规范构建了分布式链路追踪体系,并支持将数据上传到 jaeger 上进行记录和展示。Pixiu 还会将 Span 相关信息向 upstream 服务传递,由此开发者可以看到每一个经过 Pixiu 进行转发的网络请求的完整处理链路,方便用户进行链路追踪和排查线上问题。

OpenTelemetry 合并了 OpenTracing 和 OpenCensus 项目,提供了一组 API 和库来标准化遥测数据的采集和传输,使用该规范可用方便的在不同分布式链路追踪数据存储端进行切换。目前 Pixiu 支持将数据上传到 jaeger 上,后续可以进行扩展,支持不同种类的 TracerProvider。

使用 Jaeger 进行追踪的效果图如下所示。

具体的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/236

4 支持 cors 策略

Pixiu 支持跨域资源共享策略,具体的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/249

5 支持 HTTPS 安全加密

Pixiu 支持 HTTPS 安全加密,具体的 pr 是 https://github.com/apache/dubbo-go-pixiu/pull/213

6 添加了更多的案例项目

Pixiu 项目的 samples 文件夹下添加了更多案例项目,包括并不限于:

spring cloud 和 Dubbo 集群的服务发现案例,路径是 samples/springcloud 和 samples/dubbogo/simple/registry;

分布式链路追踪案例,路径是samples/dubbo/simple/jaeger;

http to grpc 案例,路径是 samples/http/grpc/。

7 docker 示例

目前 Pixiu 社区开发了一个 docker 镜像,方便你进行测试,当前支持dubbo服务的zookeeper和nacos注册中心,配置指定环境变量的注册中心(你自己的dubbo服务注册中心地址)地址即可使用:

docker pull phial3/dubbo-go-pixiu:0.0.1
docker run --name you-pixiu-name -e DUBBO_REGISTRY_ADDRESS=zookeeper://10.170.224.25:2181 phial3/dubbo-go-pixiu:0.0.1
docker run --name you-pixiu-name -e DUBBO_REGISTRY_ADDRESS=nacos://10.170.224.25:8848 phial3/dubbo-go-pixiu:0.0.1

如果你有任何疑问,欢迎加入 dubbogo社区群【钉钉搜索群号 23331795 或者 钉钉扫码如下群二维码】

作者:张天,山东人,2018 年从南京大学毕业。目前就职于南京本地一家创业公司。

What's new in dubbo-go-pixiu 0.4.0的更多相关文章

  1. Nacos发布0.5.0版本,轻松玩转动态 DNS 服务

    阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...

  2. Nacos Committers 团队首亮相,发布 0.9.0 版本

    223 天,发布 14 个版本,19 位 Committers,39 位 Contributors. 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Na ...

  3. 微软Visual Studio Code 0.8.0发布,新增多种主题

    月30日,Build 开发者大会上,正式宣布了 Visual Studio Code 项目;并将其定义为:一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和 ...

  4. Ubuntu14.04 64位机上安装cuda8.0 cudnn5.0操作步骤 - 网络资源是无限的

    查看Ubuntu14.04 64位上显卡信息,执行: lspci | grep -i vga lspci -v -s 01:00.0 nvidia-smi 第一条此命令可以显示一些显卡的相关信息:如果 ...

  5. Xamarin For Visual Studio 3.0.54.0 完整离线破解版(C# 开发Android、IOS工具 吾乐吧软件站分享)

    Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xamarin For iOS,最新版的已经把两个独立的插件合并为一个exe安装包了.为了区分 ...

  6. 《征服 C 指针》摘录1:什么是空指针?区分 NULL、0 和 '\0'

    一.什么是空指针? 空指针 是一个特殊的指针值. 空指针 是指可以确保没有向任何一个对象的指针.通常使用宏定义 NULL 来表示空指针常量值. 空指针 确保它和任何非空指针进行比较都不会相等,因此经常 ...

  7. Oracle Database 11g Release 2(11.2.0.3.0) RAC On Redhat Linux 5.8 Using Vmware Workstation 9.0

    一,简介 二,配置虚拟机 1,创建虚拟机 (1)添加三块儿网卡:   主节点 二节点 eth0:    公网  192.168.1.20/24   NAT eth0:    公网  192.168.1 ...

  8. kafka0.9.0及0.10.0配置属性

    问题导读1.borker包含哪些属性?2.Producer包含哪些属性?3.Consumer如何配置?borker(0.9.0及0.10.0)配置Kafka日志本身是由多个日志段组成(log segm ...

  9. Missing artifact com.oracle:ojdbc14:jar:10.2.0.4.0

    下载jar,导入到maven中cmd中输入:mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=1 ...

随机推荐

  1. delete() and free() in C++

    In C++, delete operator should only be used either for the pointers pointing to the memory allocated ...

  2. 【Python】【Module】json and pickle

    Python中用于序列化的两个模块 json     用于[字符串]和 [python基本数据类型] 间进行转换 pickle   用于[python特有的类型] 和 [python基本数据类型]间进 ...

  3. list.jsp页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %><%@tag ...

  4. 【C/C++】字符数组:char,char*,char a[], char *a[], char **s 的区别与联系/const char*和char*的区别

    一.char,char*,char a[], char *a[], char **s 的区别与联系 C语言中的字符串是字符数组,可以像处理普通数组一样处理字符串. 可以理解为在内存中连续存储的字符. ...

  5. 『学了就忘』Linux启动引导与修复 — 74、Linux系统的修复模式(光盘修复模式)

    目录 1.光盘修复模式概念 2.光盘修复模式修复系统问题 (1)准备系统光盘 (2)进入BIOS (3)修改BIOS的启动顺序 (4)进入光盘修复模式 (5)修复系统 (6)修复系统实操 (7)总结 ...

  6. <转>Android多线程总结

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yuchen.blog.51cto.com/2739238/593019 --An ...

  7. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

  8. Sql 查询语句优化

    sql查询很慢,很多时候并不是数据量大,而是sql语法使用不正确,本文讲述了基础语法使用,避免一些不必要的坑. explain select * from user;--查询执行时间 目录 Sql 优 ...

  9. 数据类型Table.TransformColumnTypes(Power Query 之 M 语言)

    数据源: 任意数据源 目标: 设置适合的数据类型 操作过程: 选取指定列>[主页]>[数据类型]>选取 选取指定列>[转换]>[数据类型]>选取 选取指定列> ...

  10. 录入任务信息(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 日历设置好了,就该录入任务了.当然在录入任务之前还要对任务进行一下面分解,就是一个项目,要分几个大步完成,每个大步又分几个 ...