简介:dubbogo 社区近期发布了 dubbogo v1.5.6。该版本和 dubbo 2.7.8 对齐,提供了命令行工具,并提供了多种加载配置的方式。

作者 | 铁城  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/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 月底发布第一个版本。

如果你有任何疑问,欢迎钉钉扫码加入交流群【钉钉群号 31363295】

作者简介

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

在 PC 端登录 start.aliyun.com 知行动手实验室,沉浸式体验在线交互教程。

原文链接:https://developer.aliyun.com/article/783777?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

dubbo-go v1.5.6来喽!相关推荐

  1. Dubbo——服务暴露过程分析

    这篇文章来叙述对dubbo的服务暴露前的准备工作: 使用Spring配置文件,通过main方法来启动spring容器,来观察dubbo服务的启动过程. dubbo配置文件 <context:co ...

  2. dubbo 路由配置_Dubbo-go v1.5.1发布,Dubbo 的 Go实现

    Dubbo-go 团队近期发布了 Dubbo-go v1.5.1,Dubbo-go 是 Apache Dubbo 项目的 Go 实现. 根据团队的介绍,虽然 v1.5.1 是 v1.5 的一个子版本, ...

  3. Dubbo 稳定性案例:Nacos 注册中心可用性问题复盘

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | kiritomoe 来源 | 公众号「Kiri ...

  4. Dubbo入门实例--转载

    原文地址:http://blog.csdn.net/ruishenh/article/details/23180707?utm_source=tuicool 1.   概述 Dubbo是一个分布式服务 ...

  5. Dubbo Cloud Native 实践与思考

    Dubbo Cloud Native 实践与思考 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别重视和关注,尤其是 CNCF(Cloud Native Computing F ...

  6. Dubbo Cloud Native 之路的实践与思考

    Dubbo Cloud Native 实践与思考 Dubbo Cloud Native 实践与思考 分享简介 自我介绍 主要议程 Cloud Native 基础设施 服务发现(Service Disc ...

  7. What‘s new in dubbo-go v1.5.6

    作者 | 铁城  dubbo-go 社区 committer 来源 | 阿里巴巴云原生公众号 dubbogo 社区近期发布了 dubbogo v1.5.6.该版本和 dubbo 2.7.8 对齐,提供 ...

  8. Dubbo 云原生之路:ASF 毕业一周年、3.0 可期

    作者 | 刘军 **导读:**今年是 Dubbo 从 Apache 基金会毕业的一周年,同时也是推进 Dubbo 3.0,即全面拥抱云原生的重要一年.Dubbo 社区策划了[Dubbo 云原生之路]系 ...

  9. 写在 Dubbo go 的第五年

    作者 | 于雨 阿里巴巴云原生公众号后台回复"915"即可查看 dubbogo v1.5.1 项目管理图清晰大图! 引语 dubbogo 项目已进入第五个年头. 项目发展的前两年, ...

最新文章

  1. UI:UITableView表视图
  2. eclipse maven插件创建java web项目(2)
  3. 数据库中的null和c#中的null
  4. linux 关闭端口_手把手教你在Linux中快速检测端口的 3 个小技巧
  5. 搭建Harbor docker镜像仓库
  6. JD_Source Code for problem 1379
  7. PropertyGrid类别排序
  8. 字体转换,woff,ttf,otf,eot,svg
  9. [转载] 关于Windows Boot Manager、Bootmgfw.efi、Bootx64.efi、bcdboot.exe 的详解
  10. 多读书多看报,少吃零食多睡觉—2014总结,2015规划
  11. YNUOJ-开学大作战之补番真开心(2018/8/29)
  12. python画结构图_【实战案例】五分钟!用python绘制系统架构图
  13. ansible常用模块
  14. 【新手必看系列】小鸟云服务器该如何配置?
  15. Google(谷歌)高级搜索
  16. ps批量处理dds转tga
  17. 符号的英文读法(转)
  18. python 导入第三方包_Python第三方包的导入
  19. 计算机上面的字母代表什么意思,电脑主板上面的字母型号是什么意思
  20. 计算广告及搜索广告简介

热门文章

  1. 解决Linux下启动Tomcat遇到Neither the JAVA_HOME nor the JRE_HOME environment variable is defined...
  2. 想学数据分析但不会Python,过来看看SQL吧(下)~
  3. python网址在浏览器能打开_Python - Flask - 在默认浏览器中打开一个网页
  4. camunda 流程执行追踪_九思OA项目管理解决方案:规范企业项目流程,掌握项目进展...
  5. 阐述Linux操作系统之rpm五种基本操作
  6. 一道小时候经常玩的数字游戏
  7. lintcode-102-带环链表
  8. 共享一个资源(卖票)
  9. iOS 友盟统计的bug分析
  10. tensorflow 应用fizzbuzz