dubbogo v1.5.6 发布,性能提升并带来多项新特性

知了一笑 2021-04-26 11:44:07 ⋅ 788 阅读

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/dubbo-go/pull/854 由阿里双十一中间件大队长展图同学实现。展图同学一直奋战在编程一线。

6. 注册中心优化

复用了 zookeeper 链接以及优化了服务发现中心逻辑,大大减少了与 zookeeper 的 tcp 链接数目,减少了使用的 goroutine 数目,降低了 dubbo-go 的内存占用量。

我们会把同样的逻辑复用到 nacos、etcd、consul 等各个注册中心,通过减少 goroutine 数目,减轻注册中心压力,并减少 consumer 和 provider 内存的使用。

该功能对应的 pr https://github.com/apache/dubbo-go/pull/1010 由现在蚂蚁中间件工作的 王文学 同学在涂鸦工作时实现。

7. API 形式进行配置

以前版本的 dubbogo 只提供了从配置文件读取配置选项,该功能增加以 API 的方式进行配置,用户可以通过调用相关 API 初始化配置。

用户可以通过 API 进行相关参数设定,无需再加载配置文件。

可以参考示例: https://github.com/apache/dubbo-go-samples/tree/master/config-api

相关 pr https://github.com/apache/dubbo-go/pull/1020 也是由李志信实现。

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/dubbo-go/pull/1056 等多个 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 月底发布第一个版本。

作者简介:

铁城 (Github ID cityiron),dubbo-go 社区 committer,主要参与 dubbo-go 1.5 版本迭代、 dubbo-go 3.0 服务路由和云原生方面工作、以及 dubbo-go-pixiu 项目负责人。目前就职于阿里盒马事业群,从事交易流程工作,擅长使用 Java/Go 语言,专注于云原生和微服务等技术方向。


全部评论: 0

    我有话说:

    JavaScript 引擎 V8 发布 8.3 版本,性能提升

    JavaScript 引擎 V8 发布了 8.3 版本

    Kuma 1.0 GA 发布,70 功能和改进

    Kuma 1.0 GA 现已发布,包含了 70 功能和改进。Kuma 是一个现代的通用服务网格控制平面,基于 Envoy 搭建,Envoy 是一个为云原生应用设计

    Objeck v5.6.1 发布,面向对象程序设计语言

    Objeck-lang v5.6.1 发布了,本次更新内容主要为增加对 Apple Silicon 的支持。 Objeck 是一种受 Java 启发,同时受 Scheme 和 UML 影响的面向对象

    Spring Boot 2.1.0特性 ,准备好了吗?!

    Spring Boot官方在10月30号正式发布v2.1.0.RELEASE版本,由于本人最近比较忙,直到今天才着重抽空学习和了解这次升级一共带来了9大特性,根据官方描述,正在逐渐支持 java

    Apache Spark 3.0 发布,包含3400 个补丁,TPC-DS 性能提升2倍。

    Spark 是用于大数据处理,数据科学,机器学习和数据分析等领域的统一引擎。

    Spring Framework 5.3.4 和 5.2.13 发布

    Spring Framework 5.3.4 和 5.2.13 已发布5.3.4 版本包括 62 修复和改进,5.2.13 包含 18 修复和改进。具体如下。 v5.3.4 部分特性

    前端性能分析工具-Keepfast

    能够分析网站的资源构建性能和页面性能,生成性能报告提供优化建议,让性能监控更方便。

    Spring Framework 5.3.6 & 5.2.14 发布

    Spring Framework 5.3.65.2.14 现已发布,分别包含 19 与 11 修复和改进。 主要更新内容 5.3.6

    AppCode 2020.1 稳定版发布性能大大提高

    AppCode 是一个全新的 Objective-C、Swift 的集成开发环境,用于帮助开发 Mac、iPhone 和 iPad 的应用程序。

    Rails 6.1 稳定版发布:支持水平分区、改进数据库支持、Strict Loading

    Rails 6.1 稳定版已发布,其开发团队表示,过去的几个月里他们实现了对数据库支持的改进、支持在后台销毁关联异步(Associations Async)进程以及将错误转化为对象等。 按数据库

    移动H5前端五大性能优化方案(实战篇)

    移动H5前端五大性能优化方案(实战篇)

    分布式 NewSQL 数据库TiDB 3.1.0 版本发布,修复问题

    TiDB 是一款定位于在线事务处理/在线分析处理的融合型数据库产品,实现了一键水平伸缩,强一致性的副本数据安全,分布式事务,实时 OLAP 等重要特性

    重磅官宣:Nacos2.0发布性能提升10倍

    继 Nacos 1.0 发布以来,Nacos 迅速被成千上万家企业采用,构建起强大的生态。但是随着用户深入使用,逐渐暴露一些性能问题,因此我们启动了 Nacos 2.0 的隔代产品设计,时隔半年

    FydeOS v11 发布,全新 Linux 终端提供功能

    .*,同步了上游所有关于浏览器的特性。 添加自动...

    2018 国产开源软件新秀Kooteam 0.1.2 发布,解决低配服务器性能问题

    KooTeam是一款轻量级的在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发,知识库管理等工具。

    Chrome 87 发布,获多年来最大性能提升

    Chrome 87 正式版现已发布。谷歌方面表示,由于进行了许多底层改进,本月的更新代表了年来 Chrome 性能的最大提升。 此版本包含的一些更新内容有: 现在,Chrome 会优先