Dubbo-go 发布 1.5 版,朝云原生迈出关键一步

引语

计算机技术浪潮每 10 年都有一次技术颠覆,相关知识体系最迟每 5 年都会革新一次,大概每两年贬值一半,在应用服务通信框架领域亦然。凡是有长期生命的通信框架,大概有 5 年的成长期和 5 年的稳定成熟期。每个时代都有其匹配的应用通信框架,在 20 年前的 2G 时代,强跨语言跨平台而弱性能的 gRPC 是不会被采用的。

每个通信框架,不同的人从不同角度看出不同的结论:初学者看重易用易学,性能测评者注重性能,应用架构师考虑其维护成本,老板则考虑则综合成本。一个应用通信框架的性能固然重要,其稳定性和进化能力更重要,得到有效维护的框架可在长时间单位内降低其综合成本:学习成本、维护成本、升级成本和更换成本。

什么是 Dubbo-go?第一,它是 Dubbo 的 Go 语言版本,全面兼容 Dubbo 是其第一要义;第二,它是一个 Go 语言应用通信框架,会充分利用作为云原生时代第一语言---Go 语言的优势,扩展 dubbo 的能力。

2008 年诞生的 Dubbo 已有十多年历史,依靠阿里和其社区,历久弥新。2016 年发布的 Dubbo-go 也已进入第五个年头,如今全面兼容 Dubbo v2.7.x 的 Dubbo-go v1.5 终于发布了。

回首过往,Dubbo-go 已经具备如下能力:

  • 互联互通:打通了 gRPC 和 Spring Cloud 生态;
  • 可观测性:基于 OpenTracing  和 Prometheus,使得其在 Logging、Tracing 和 Metrics 方面有了长足进步;
  • 云原生:Dubbo-go 实现了基于 Kubernetes API Server 为注册中心的通信能力,做到了升级成本最低。

毋庸讳言,相较于现有成绩,发展阶段的 Dubbo-go 对未来有更多的期待之处:

  • 易用性:Dubbo-go 的入门成本并不低,把很多感兴趣者挡在了门外,但好消息是,随着 Dubbo-go 在阿里内部的逐步推开,阿里中间件团队对其进行了进一步的封装,经生产环境检验后会开放给社区使用;
  • 云原生:目前的 Dubbo-go 的基于 kubernetes 的方案,从技术分层角度来看, Kubernetes API Server 终究是系统的运维态组件,不应该暴露给应用层,否则会造成 APIServer 自身通信压力过大,且系统整体风险很高:应用层使用不当,或者框架自身的流量方面的 bug,可能会把 APiServer 打垮,后果就是造成整体后端服务能力的瘫痪!所以应用层需要感知的是 Kubernetes 提供给应用层的 Operator,不断进化的 Dubbo-go 计划在 v1.6 版本中发布 Dubbo-go Operator。

雄关漫道真如铁,而今迈步从头越。Dubbo-go 社区【钉钉群 23331795】与 Dubbo-go 同在。

应用维度注册模型

经过一段时间的努力之后,我们终于完成了应用维度的服务注册与发现。和原本已有的接口维度的注册模型比起来,新的注册模型有两个突出特点:

  • 和主流的注册模型保持一致。目前的主流做法都是按照应用为基本单位来进行注册的,如 Spring Cloud。在支持应用维度注册之后,对于接下来的云原生支持,奠定了基础;
  • 大幅度减轻对注册中心的压力。在该模型之下,从注册中心的视角看过去,集群规模只和实例数量成正比,而不是现有的和服务数量成正比;

当然,我们在设计的时候就考虑到了用户的迁移成本。要迁移到新的注册模型,只需要将现有使用的注册中心换成新的 ServiceDiscoveryRegistry 就可以。

ServiceDiscoveryRegistry 是支持多种实现的。目前来说,我们支持:

  • nacos
  • etcd
  • zookeeper

我们提倡新上线的业务尽量使用 nacos 和 etcd 这种更可靠稳定的注册中心。

Metadata Report 元数据中心

v1.5 版本在支持应用维度注册模型时,有很重要的一个问题需要解决,即接口维度的元数据存储。服务维度的注册模型和应用维度的注册模型,本质的区别是往注册中心注册的数据维度的不一致。虽然我们在应用维度注册模型中,将接口维度的数据从注册中心中剔除了,但是在 rpc 的框架中,一个 consumer 要想真正找到想要调用的服务地址,就必须得到 provider 端开放的服务信息。这部分数据,在 v1.5 版本中,我们将它们存储到了元数据中心中。

元数据中心,是一个接口定义。泛指一块存储区域,可以对接口级别的元数据进行存储、读取,provider 端调用存储,consumer 端调用读取。元数据中心中的数据需要保持准确性、实时性。

目前元数据中心,有两个父类(Go 中没有继承,此处说的父子类,单纯指子类对父类的组合关系)实现,一个是 local 实现,一个是 remote 实现。local 实现是将 provider 的内存作为虚拟元数据中心,remote 实现是指依赖 ZooKeeper、etcd、nacos 等注册中心作为元数据中心。目前 remote 有 zookeeper、nacos、etcd 和 consul 的子类实现。即用户可以将元数据信息,通过以上的第三方注册中心进行数据存储和分发。

Invocation 接口支持 attribute 属性

invocation 结构中新增 attribute 属性支持,用于流程内部的属性存储。和 attachment 不同点在于,attachment会从 consumer 传递到 provider,但 attribute 属性不会。

K8s 注册中心

在 v1.5 版本之前,K8s 注册中心的实现是通过直接使用 K8s client 中 Pod 对象的 List&&Watch 接口。在本次迭代中引入了 K8s informer。这样做的原因在于两点,首先一定的程度上来讲 dubbo-go 的 K8s 注册中心也是一个 K8s controller,使用 informer 的模式更加 K8s native。更重要的是社区计划后续向 CRD+Operator 的模式演进,informer 模式是对后续的演进的探索。除了这个铺垫之外,本次迭代还对跨 namespace 的服务发现做了支持。再有就是为了减少对 kube-apiserver List&&Watch 的压力,对 provider 和 consumer 的行为进行了区分,provider 不再进行 Watch 而仅对 kube-apiserver 进行写操作。

优化路由模型

在 1.5 版本之前,Router 模型中属性是包含:优先级与路由属性,Router Chain 只包含路由属性。从中能识别出其实 Router Chain 也是一种特殊 Router。1.5 版本之后,使 Router 更抽象,分离出其优先级属性,新增 Priority Router、Chain 继承 Router 使其变为特殊的 Router,使关系上看起来更加清晰。如下图:

回顾与展望

Dubbo-go 处于一个比较稳定成熟的状态。目前新版本正处于往云原生方向的尝试,应用服务维度注册是首先推出的功能,这是一个和之前模型完全不一样的新注册模型。该版本是我们朝云原生迈进新一步的关键版本。除此之外,包含在该版本也有一些之前提到的优化。

下一个版本 v1.5.1,虽然仍是以兼容 Dubbo 2.7.x 为主要任务,但在分布式能力的增强上,也是我们关注的重点。

分布式事务方面,有一个重要的基于 Seata 扩展实现。通过增加过滤器,在服务端接收 xid 并结合 seata-golang达到支持分布式事务的目的。 从而使 Dubbo-go 在分布式场景下,让用户有更多的选择,能适应更多的个性化场景。

与此同时,在传输链路安全性上,TLS 安全传输链路是该版本重要功能之一。通过提供统一入口,未来能引入更多的与传输链路安全性相关的功能,适应用户不一样的使用场景。

注册中心模型上,支持多注册中心集群负载均衡。业务部署假设是双注册中心(图 1 ),从原来双注册中心中所有 Provider 一起选址。优化成选址时的多了一层注册中心集群间的负载均衡(图 2 )。

(图 1 )

(图 2 )

以前的 dubbo-go RPC 层直接复用了 getty 框架 的 RPC,未能实现协议和应用通信地址的隔离。阿里中间件展图同学重构了 dubbo-go  RPC 层,实现了连接复用:可以实现 consumer 与 provider 端的同一个 TCP 连接上进行多协议通信。相关 PR 业已合并,会在 dubbo-go v1.5.1 中发布。

目前下一个版本正在紧锣密鼓的开发中,具体规划及任务清单 ,都已经在 Github 上体现。

 

本文作者:于雨、何鑫铭 等

原文链接:https://developer.aliyun.com/article/769114?utm_content=g_1000161684

本文为阿里云原创内容,未经允许不得转载。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/515383.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互联网究竟是怎么诞生的?

作者 | 小枣君来源 | 鲜枣课堂(ID:xzclasscom)1957年10月4日,苏联发射了人类第一颗人造卫星——斯普特尼克一号。斯普特尼克一号(Спутник-1)这颗卫星的升空,轰动了整个世界,也…

引入阿里云GA,商米加速IoT产品和解决方案全球化布局

在全球化战略布局下,今年以来,商米联合全球合作伙伴推出了多款智能IoT 产品和数字化解决方案,为商户提供更专业地服务。同时,今年6月份,商米还引入阿里全球加速GA,加速实现信息化办公系统全球部署&#xff…

企业方案 vscode

文章目录1. 下载插件2. 配置1. 下载插件 2. 配置 {"mithrilEmmet.vnodeFactoryFunctionName": "m", // Specifies the name of vnode factory function. E.g. for mithril, use m; for hyperscript, use h."mithrilEmmet.outputDefaultTagName"…

问答题:如何构建一套满足GPT-3的存储系统?

这几天GPT-3成为人工智能甚至整个科技圈最为热门的话题。作为著名人工智能科研公司 OpenAI 开发的文字生成 (text generation) 人工智能,GPT-3的相关论文在2020年5月份就已经发表,由于使用了45TB的数据,并采用了天文数字级别的1,750亿参数量而…

抖音实战~手机号一键注册登录流程(验证码)

文章目录一、 一键注册登录流程二、前端2.1. 验证码获取流程2.2. 验证码获取代码三、后端验证码3.1. 前置处理3.2. 拦截器添加3.3. 获取验证码一、 一键注册登录流程 二、前端 2.1. 验证码获取流程 1.点击->获取验证码调用后端获取验证码api接口2.验证码59秒倒计时3.重复点…

《2021中国数据资产化工具市场研究报告》隆重发布

早在五年前,数据是21世纪“新石油”的口号就已响彻行业。 在2020年4月,我国首次将“数据”与土地、劳动力、资本、技术并列为五大生产要素,并提出要“加快培育数据要素市场,完善数据要素的市场化配置机制”。企业作为市场主体&am…

秒懂云通信:如何用阿里云语音通知服务(小白指南)

简介: 手把手教你如何使用阿里云语音通知服务,超详细控制台步骤解析,快速上手!更有1650元短信体验代金券和免费试用,点击速抢:https://yqh.aliyun.com/live/cloudcommunication-videos 一、如何开通阿里云…

Mysql如何统计表的大小

在开发中遇到一个问题,我要统计哪个表中的数据增长度快。于是就想要找出每个表的大小。 SELECT CONCAT(table_schema,.,table_name) AS Table Name, CONCAT(ROUND(table_rows/1000000,4),M) AS Number of Rows, CONCAT(ROUND(data_length/(1024*1024),4),M) AS Dat…

抖音实战~个人中心模块

文章目录一、个人中心主页1. 主页元素2. 表设计3. 计数方案评估二、用户信息查询~接口设计2.1. 用户信息查询流程图2.2. 用户信息查询流程三、用户信息更新~接口设计3.1. 流程图3.2. 流程简述四、用户背景图用户头像~接口设计4.1. 更新/上传图片流程图4.2. 更新/上传~流程简述五…

分布式系统架构与云原生—阿里云《云原生架构白皮书》导读

简介: 有幸作为阿里云MVP提前获得了阿里云云原生团队编写的《云原生架构白皮书》,希望通过自己对于云原生的理解为开发者提供一篇观后感或者是能够参考的博文 1 云原生与分布式系统架构的关系 1.1 云原生架构的定义 《云原生架构白皮书》中对于云原生…

纵行科技携手意法半导体推ZETA/LoRa双模智能路由,加速LPWAN 2.0泛在物联布局!

物联网在接入各行业的过程中使用了各种各样的行业标准和协议,联盟的形式可以加速聚拢物联网产业链生态,促进物联网应用更好更快地落地,因此成为物联网领域内厂商们欢迎的合作共赢方式。 ZETA就是众多物联网联盟中的一个,这是由基于…

阿里云飞天AI加速器+Serverless容器,帮助图森未来提升资源利用率

简介: 今年年初,图森未来的无人驾驶卡车还上了“钢铁侠”的扮演者小罗伯特唐尼主持的科技聚集剧集《The Age of A.I.》(《AI时代》),在剧中不仅顺利完成无人驾驶的行驶任务,还与围追堵截的摄像车“斗智斗勇…

应用中心最佳实践之——使用应用组完成多集群一键部署

简介: 在现实中的应用交付实践中,常常需要将同一应用同时部署到多个集群中。应用中心支持将同一个数据源定义的应用,通过应用组的形式一键部署到多个集群中,实现统一管理。 作者:指北 背景 在现实中的应用交付实践中…

vue cil安装axios

Vue cil 安装axios1、安装axioscnpm install axios 如果没有安装cnpm的可能安装不成功,这里列出安装cnpm,使用淘宝镜像。 npm install -g cnpm --registryhttps://registry.npm.taobao.org2、使用方法 2.1、首先在main.js配 import axios from "…

从程序员到上市公司合伙人,怎么少踩坑?

‍‍‍‍科技发展日新月异,对于程序员来说,不断地自我修炼必须提上日程。某种程度上,阅读是一条通往成功的捷径。当你被技术难题卡住时,去读书吧,去书里寻找答案当你感到人生困顿迷茫时,去读书吧&#xff0…

读完《云原生架构白皮书》,我们来谈谈开放应用模型(OAM)

简介: 受阿里云邀请,我有幸在《云原生架构白皮书》发布前试读了该书,本文结合白皮书内容,谈谈开放应用模型(OAM) 前言 7月21日阿里云发布了《云原生架构白皮书》,该书由阿里云众多技术专家共同…

抖音实战~手机号密码一键注册登录流程(限制手机终端登录)

文章目录一、手机号密码二、前端2.1. 点击登陆流程2.2. 点击登录源码三、后端登录3.1. 登录流程图3.2. 流程简述3.3. 手机号验证码登录流程一、手机号密码 二、前端 2.1. 点击登陆流程 1.先校验手机号是否合法?不合法,则提示“请输入正确的手机号”2.再…

揭秘!信息检索技术高端玩法

《SIGIR 顶会论文解读》重磅发布 由 7 位阿里巴巴技术专家精心打造,内容覆盖推荐系统 、成交转化模型 、 回音室效应 、 全空间多任务转化率预估建模 、 DeepMatch 召回模型 、 跨领域冷启动用户推荐网络 、 表示学习模型等信息检索领域新技术。 精彩内容抢先看 1、…

VSCODE远程连接服务器,远程开发。

在开发中有时需要远程开发,需要远程连接服务器,所以需要学习一下如何远程连接。 1、安装vscode的插件:Remote-ssh 需要看清楚,是这个插件不要安装错了 2、安装好后打开命令行,快捷键 CtrlShiftp,输入ssh查…

【技术史】数据中台的前世今生

数据中台自14年至今,已然成为了2B、2G业务最热门的话题,政府机构、企事业单位、互联网公司等进行着数字化、数据化、智能化转型。市场普遍认为,阿里巴巴将自身数据中台建设能力对外赋能是拉起本轮数据中台浪潮的根本所在。 本文将带你全面了…