作者 | 铁城 dubbo-go 社区 committer
起源 | 阿里巴巴云原生公众号
dubbogo 社区近期公布了 dubbogo v1.5.6。该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置的形式。
相干改良切实太多,本文只列出相干重大 feature 和 性能晋升项。
1. 命令行工具
相熟 dubbo 的敌人可能晓得 dubbo 反对 telnet 命令行在线调试。
本次公布也减少了 dubbo-go 的 cli 命令行工具,能够不便用户直连特定服务,通过编写 json 文件来定义传输构造和数据,发动调用进行在线调试,打印返回数据和耗时状况。
目前反对嵌套 struct,然而只反对单个参数的申请包和回包。数据类型因为须要在 json 中定义,只反对 golang 根本数据类型:字符串、整形、浮点。
社区后续会再发一篇文章,着重解说其原理和实现。相干 pr 为 https://github.com/apache/dubbo-go/pull/818,由 dubbogo 最年老的 00 后 apache committer 李志信同学实现。
2. 代理实现扩大
重构 Proxy,增加 ImplementFunc 函数,容许我的项目对 Proxy 的代理进行从新实现。在应用 ProxyFactory 自定义注册的场景下,创立的 proxy.Proxy 也自定义实现,能够对返回数据进行批改。
次要利用场景为在网关泛化调用场景下。懂得的人天然懂。
相干 pr https://github.com/apache/dubbo-go/pull/1019,由本文作者亲自操刀。
3. 启动时指定配置文件的门路
用户应用之前版本的 dubbogo 时,始终吐槽其只提供环境变量的形式,加载指定的配置文件。
export CONF_PROVIDER_FILE_PATH="../profiles/dev/server.yml"
export CONF_CONSUMER_FILE_PATH="../profiles/dev/server.yml"
export APP_LOG_CONF_FILE="../profiles/dev/log.yml"
v1.5.6 提供了新的配置文件加载接口:在启动命令行通过 proConf、conConf、logConf 三个 flag 设定配置文件门路。
服务提供方:
go run . -proConf ../profiles/dev/server.yml -logConf ../profiles/dev/log.yml
服务生产方:
go run . -conConf ../profiles/dev/client.yml -logConf ../profiles/dev/log.yml
相干 pr https://github.com/apache/dubbo-go/pull/1039,由南京信息工程大学大三学生 陈家鹏实现。
4. 自定义加载 ServerConfig 和 ReferenceConfig
新增 ConfigPostProcessor 接口,用户能够根据该接口提供两个的办法,在部署 dubbogo 服务时加载自定义的配置。
// 服务提供方配置
PostProcessServiceConfig(*common.URL)
// 服务生产方配置
PostProcessReferenceConfig(*common.URL)
相干 pr https://github.com/apache/dubbo-go/pull/943,由行将奔五十的 dubbo chairman 北纬亲自操刀实现,chairman 同志老当益壮,号召大家向 chairman 筒子学习。
5. 扩大 URL 的比拟
在 common/url.go 外面提供 CompareURLEqualFunc,能够让用户自定义 URL 比拟,进步比对效率。相干技术细节见如下链接。
common/url.go:
https://github.com/apache/dubbo-go/pull/854/files#diff-5111f14762c010c3029a67743796fea97ab1015d35c96670a4cfa25f30145464
目前的 URL 实现并未达到最终状态。将来的 dubbogo 3.x 版本中,将借鉴 dubbo 的 URL 实现,将 common.URL 拆分为 ServiceConfigURL、ServiceAddressURL 和 InstanceAddressURL,别离对应配置核心、注册核心和元数据中心的 schema,尽量将变更压力升高到最低粒度。
该性能对应的 pr https://github.com/apache/dub… 由阿里双十一中间件大队长展图同学实现。展图同学始终奋战在编程一线。
6. 注册核心优化
复用了 zookeeper 链接以及优化了服务发现核心逻辑,大大减少了与 zookeeper 的 tcp 链接数目,缩小了应用的 goroutine 数目,升高了 dubbo-go 的内存占用量。
咱们会把同样的逻辑服用到 nacos、etcd、consul 等各个注册核心,通过缩小 goroutine 数目,加重注册核心压力,并缩小 consumer 和 provider 内存的应用。
该性能对应的 pr https://github.com/apache/dub… 由当初蚂蚁中间件工作的 王文学 同学在涂鸦工作时实现。
7. API 模式进行配置
以前版本的 dubbogo 只提供了从配置文件读取配置选项,该性能减少以 API 的形式进行配置,用户能够通过调用相干 API 初始化配置。
用户能够通过 API 进行相干参数设定,无需再加载配置文件。
能够参考示例:https://github.com/apache/dubbo-go-samples/tree/master/config-api
相干 pr https://github.com/apache/dub… 也是由李志信实现。
8. grpc 优化
- 买通 dubbo-go 中 consumer config 的超时工夫 connect_timeout 和 gRPC server 的超时工夫,用户能够自定义 gRPC 超时工夫机制。
# connect timeout
connect_timeout: "3s"
# application config
application:
organization: "dubbo.io"
name: "GreeterGrpcConsumer"
module: "dubbo-go greeter grpc client"
version: "0.0.1"
environment: "dev"
- 将解决注册核心服务变更事件的机制改为同步,避免 provider 端服务频繁重启导致高低线事件处理程序出错。
- 应用 gRPC 协定时,异步期待 dubbo-go 的 service 都裸露完后,才将所有 dubbo-go service 对应的 gRPC service 注册到 gRPC server 上并启动 gRPC server。以此修复 provider 端的只能注册一个 service 的问题。
总体性能由 https://github.com/apache/dub… 等多个 pr 形成,由 All In 了 dubbogo 的 上海识装信息科技有限公司【出名 APP 得物所在公司】工程师 柯瞻、dubbogo 社区负责人 于雨、阿里工程师云兴 以及 南京某公司的张天同学 独特负责实现。
9. hessian2 go 最新 feature
除了 dubbo-go 本身的改良外,dubbo-go-hessian2 我的项目截止目前最新版本 v1.9.2 也做了如下重大改良:
- 内置反对 java.util.Locale:https://github.com/apache/dubbo-go-hessian2/pull/264
- 内置反对 java.util.UUID:https://github.com/apache/dubbo-go-hessian2/pull/256
- 反对编码 no pojo object:https://github.com/apache/dubbo-go-hessian2/pull/243
- 内置反对 java.sql.Time:https://github.com/apache/dubbo-go-hessian2/pull/219
- 内置反对 java.sql.Date:https://github.com/apache/dubbo-go-hessian2/pull/221
dubbo-go-hessian2:https://github.com/apache/dubbo-go-hessian2
总体 pr 由 dubbo-go-hessian2 我的项目负责人 望哥、李志信、张艳明等同学实现。
10. 回顾与瞻望
dubbogo 目前处于一个比较稳定成熟的状态,1.5 版本会被继续保护,以修复 BUG 和进行一些必要的最低幅度的优化。
更多信息:https://github.com/apache/dubbo-go/releases/tag/v1.5.6
目前最新的朝云原生方向的倒退 3.0 版本基于 v1.5.x,在兼容 dubbo 3.0 的同时,将向后兼容 v2.7.x,打算于 4 月底公布第一个版本。
如果你有任何疑难,欢送钉钉扫码退出交换群【钉钉群号 31363295】:
作者简介
铁城 (Github ID cityiron),dubbo-go 社区 committer,次要参加 dubbo-go 1.5 版本迭代、dubbo-go 3.0 服务路由和云原生方面工作、以及 dubbo-go-pixiu 我的项目负责人。目前就任于阿里盒马事业群,从事交易流程工作,善于应用 Java/Go 语言,专一于云原生和微服务等技术方向。
在 PC 端登录 start.aliyun.com 知口头手实验室,沉迷式体验在线交互教程。