What's new in dubbo-go-pixiu 0.4.0
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/255 和 https://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的更多相关文章
- Nacos发布0.5.0版本,轻松玩转动态 DNS 服务
阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...
- Nacos Committers 团队首亮相,发布 0.9.0 版本
223 天,发布 14 个版本,19 位 Committers,39 位 Contributors. 在宣布开源后的第 223 天,Nacos 发布了其第14个版本 - 0.9.0,该版本提升了 Na ...
- 微软Visual Studio Code 0.8.0发布,新增多种主题
月30日,Build 开发者大会上,正式宣布了 Visual Studio Code 项目;并将其定义为:一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和 ...
- Ubuntu14.04 64位机上安装cuda8.0 cudnn5.0操作步骤 - 网络资源是无限的
查看Ubuntu14.04 64位上显卡信息,执行: lspci | grep -i vga lspci -v -s 01:00.0 nvidia-smi 第一条此命令可以显示一些显卡的相关信息:如果 ...
- Xamarin For Visual Studio 3.0.54.0 完整离线破解版(C# 开发Android、IOS工具 吾乐吧软件站分享)
Xamarin For Visual Studio就是原本的Xamarin For Android 以及 Xamarin For iOS,最新版的已经把两个独立的插件合并为一个exe安装包了.为了区分 ...
- 《征服 C 指针》摘录1:什么是空指针?区分 NULL、0 和 '\0'
一.什么是空指针? 空指针 是一个特殊的指针值. 空指针 是指可以确保没有向任何一个对象的指针.通常使用宏定义 NULL 来表示空指针常量值. 空指针 确保它和任何非空指针进行比较都不会相等,因此经常 ...
- 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 ...
- kafka0.9.0及0.10.0配置属性
问题导读1.borker包含哪些属性?2.Producer包含哪些属性?3.Consumer如何配置?borker(0.9.0及0.10.0)配置Kafka日志本身是由多个日志段组成(log segm ...
- 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 ...
随机推荐
- oracle 外部表查alter日志
--创建文件夹,路径是alter日志的路径 create or replace directory data_dir as '/u01/app/oracle/diag/rdbms/orcl/orcl/ ...
- C++ friend详解
私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. C++ 是 ...
- 【Linux】【Basis】【RHEL】KickStart for RHEL6.8
1. 概念: 自动安装的脚本,这篇文章以RHEL6.8为例 kickstart for RHEL6.8官方教程:https://access.redhat.com/documentation/en-U ...
- SpringBoot的定时任务
springBoot定时任务可分为多线程和单线程,而单线程又分为注解形式,接口形式 1.基于注解形式 基于注解@Scheduled默认为单线程,开启多个任务时,任务的执行时机会受上一个任务执行时间的影 ...
- QQ表情的添加
<!DOCTYPE html><html><head> <meta charset="UTF-8" /> <title> ...
- IOS开发入门教程-总结篇-写给狂热的编程爱好者们
程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 写在前面的话 学习iOS应用程序开发已有一段时间,最近稍微闲下来了,正好也想记录一下前阶段的整个学习过程.索性就从最基础的开始,一步一 ...
- 初识shellcode
以前只是知道shellcode就是一段恶意代码,直到今天学习了shellcode的知识,才发现这东西真是博大精深.同时也学习到了一些新的指令,在这里记录一下. 通常pwn题目就是为了拿到shell,目 ...
- CF1059A Cashier 题解
Content 定义一天长度为 \(L\),每次休息的时间为 \(a\).一天会有 \(n\) 个客人到访,第 \(i\) 个客人会在 \(t_i\) 的时刻到访,会停留 \(l_i\) 的时间.只有 ...
- 在执行java代码时,设置了断点,然后莫名的没执行完方法内的代码就结束了,此刻一般在出错处代码用try,catch包括起来
在执行java代码时,设置了断点,然后莫名的没执行完方法内的代码就结束了,此刻一般在出错处代码用try,catch包括起来就能看到是什么异常了,记住try,catch语句的作用
- Linux使用docker部署nacos
官网地址:https://nacos.io/zh-cn/docs/quick-start-docker.html 先把sql文件导入到mysql中 我也放了基础的sql /* * Copyright ...