开源 1 年半 star 破 1.2 万的 Dapr 是如何在阿里落地的?

简介: Dapr 是 2019 年 10 月微软开源的可移植、事件驱动分布式运行时,它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的无状态和有状态的应用程序,从而降低基于微服务架构构建现代云原生应用的准入门槛。

头图.png

作者 | 敖小剑
来源 | 阿里巴巴云原生公众号

Dapr 是 2019 年 10 月微软开源的可移植、事件驱动分布式运行时,它使开发人员能够轻松地构建运行在云平台和边缘的弹性而微服务化的无状态和有状态的应用程序,从而降低基于微服务架构构建现代云原生应用的准入门槛。

在今年 2 月份刚刚发布了 v1.0 正式版本。虽然推出至今不过一年半时间,但 Dapr 发展势头十分迅猛,目前已经在 GitHub 上收获了 1.2w 星。阿里是 Dapr 开源项目的深度参与者和早期采用者,率先进行了生产落地,集团内部有十几个应用在使用 Dapr;目前已有 2 位 Dapr成员,是 Dapr 项目中除微软之外代码贡献最多的公司。

拉到文末可以了解 Dapr 入门教程体验方式

为什么阿里会选择Dapr?

在阿里巴巴,Java 使用非常广泛,不仅仅业务应用大量使用 Java,大量中间件和基础能力的服务器端也是使用 Java 开发。在过去十几年间,我们围绕 Java 建立了非常完备的生态体系,经历过各种严酷的考验。

而随着业务形态的日渐丰富,多语言的需求在不断的增加,如 nodejs / golang / c / c++ / rust 等。特别是在微服务流行之后,根据实际情况而选择使用不同的编程语言开发微服务成为趋势。但效仿 Java ,为每一种编程语言都打造一套功能完备的生态体系在成本上是不现实的。因此,需要一个成本可控的方案来解决多语言问题,让微服务开发能真正的实现“语言自由”。

随着云的采用,业务应用的形态也开始朝云原生方向发展,越来越多的业务应用(尤其是前台业务)开始拥抱 FaaS 和 Serverless  作为应用托管和资源调度的解决方案。而在 FaaS 和 Serverless 场景下,需要更轻量化的解决方案以满足快速启动和伸缩的需求 —— 传统类库模式下由于需要集成大量的 SDK,业务应用变得非常的臃肿。而在 Function 形态下更加的不协调,以 nodejs 为例:几百行的 nodejs Function 代码依然需要依赖多达几十兆的 node module。同时 FaaS 和 Serverless 也对多语言的支持提供了更高的要求。因此,在 FaaS 和 Serverless 这种新型形态下有必要提供有别于传统类库方式的、更轻量化的、支持多语言的解决方案。

显然,Servicemesh 倡导的 Sidecar 模式是解决上述问题的绝佳方案。在过去几年间,随着 Servicemesh 的发展和采用, Sidecar 模式已经得到充分验证:Sidecar 模式非常符合云原生的理念,特别是在多语言支持和应用轻量化方面具备天然优势。

我们非常认可 Bilgin Ibryam 在"Multi-Runtime Microservices Architecture" 一文中提出的 Multiple Runtime / Mecha Runtime 的理念,尤其是他对分布式应用需求的分析,很符合我们的实际情况:

1.png

而 Dapr 是第一个实践 Multiple Runtime 理念的开源项目,我们从这个项目发布开始就密切关注它,因为 Dapr 可以很好的解决我们面临的问题:Sidecar 模式天然提供了对多语言的支持,各种客户端 SDK 被 Dapr Runtime 替代之后应用也得以轻量化。

此外,从长期战略的角度考虑,我们在 2020 年提出了"三位一体"的理念,即将“自研技术”、“开源项目”、“商业产品”形成统一的技术体系,最大化技术的价值。而当前的实际情况是三者有完全不同的产品和技术方案,导致当我们需要将某个产品在阿里内部、公有云、客户私有云等不同的平台上进行迁移时,或者是跨多个平台部署时,就会遇到非常大的挑战。Dapr 面向能力编程的理念,强调可移植性和可扩展性的标准 API,平台中立、无供应商锁定的设计,深深的吸引了我们。

“在阿里云,我们相信 Dapr 将引领微服务的发展。通过采用 Dapr,我们的客户现在可以以更快的速度来构建可移植和健壮的分布式系统。”

—— 阿里云资深技术专家 李响

在 2020 年年中,我们开始基于 Dapr 项目进行了内部小规模的试点,在实际的落地过程中探索和验证 Dapr 的理念。我们也积极参与到 Dapr 开源项目的建设中,提交了大量的改进建议和代码。

下面我们将以 Dapr 在阿里的实际落地场景来具体说明 Dapr 是如何帮助我们解决上述问题的。

Dapr 在阿里的实践

1. 概况

目前 Dapr 在阿里巴巴内部还处于实验阶段

我们的首要工作是为内部的中间件开发 Dapr 组件,使业务应用程序可以与这些中间件和实现它们的 Java 语言/ Java Client SDK 解耦。然后通过小规模的业务应用落地,在各种场景下的对 Dapr 进行验证,在验证完成之后计划继续部署较大规模的业务应用。

截止到 2021 年 3 月,Dapr 在阿里内部落地的场景主要集中在 2 个方面:多语言支持和云间迁移。

2. 多语言支持

1)Faas / Serverless 场景

背景:在阿里的电商系统中,存在大量活动和导购需求。

这些需求的特点是"短平快":需要快速开发、快速迭代、生命周期相对比较短。因此这类需求非常适合通过采用 FaaS 的方式来落地。

Faas 对多语言支持有强烈的诉求,肯定不会局限于 Java。而阿里内部大部分应用都是 Java 体系,对多语言的支持比较弱,尤其是新兴语言(如 Dart)或者小众语言(如 Rust)。

而从需求上说,采用 FaaS 的应用也同样需要和内部运行的服务以及各种中间件/基础设施进行通讯,因此 FaaS 平台迫切的需要解决多语言支持问题。

通过 Dapr ,我们很好的解决了 FaaS 的多语言问题,从而使得客户通过 FaaS 实现了开发效率的大幅提升。

2)多语言应用的接入

背景:阿里收购有大量的公司。

这些收购的公司有大量的应用,而这些应用中很多不是 Java 体系,在接入阿里的技术体系时,对多语言支持有明确的需求。

另外,由于业务创新的需要,有些应用对 nodejs 和 golang 有强烈诉求,还有一些应用则需要使用到 Dart 和 C++。

但目前这些语言的生态系统并没有像 Java 那么完善,尤其部分中间件和基础设施已经发展的非常成熟,进入维护状态,不太可能在现在重新开发所有语言的客户端:成本上代价很高,时间上也来不及。

通过 Dapr ,我们可以为这些应用提供多语言解决方案。

3)复杂的 Java 遗留系统

背景:基于 Java ClassLoader 机制而设计的复杂系统。

为了解决类冲突问题,隔绝不同的业务模块,阿里针对  Java 系统设计了基于 ClassLoader 机制的复杂系统,这些系统的设计往往非常复杂,应用也非常臃肿。

此外,部分业务团队为了能和现有的中间件进行互通,自行维护了一套多语言的中间件 SDK,而这些 SDK 本来应该由中间件团队维护并保持同步更新。这也带来了稳定性方面的隐患和风险。

我们期望将这些遗留的系统迁移到 Dapr 中,统一实现中间件 SDK 的维护和更新。比较特殊的是这里存在一个需求:最好能让业务开发团队尽量不做代码层面的调整,以减少迁移时对业务应用的冲击。

所以针对 Java 遗留系统,在迁往 Dapr 时,我们额外设计了一个 Java 适配层:将原来的 Java 调用适配到 Dapr 的客户端 API 上。

以上三种多语言的落地实践场景,如下图所示:

2.png

3. 云间迁移

背景:业务应用对外输出时有跨平台需求。

阿里的部分业务,如钉钉文档,原本是提供给阿里内部和外部用户直接使用的,此时钉钉文档只需要部署在阿里内部的业务集群里,直接访问阿里内部的生态体系。

但是随着 SaaS 业务的发展,以及部分信息安全敏感的用户对于数据安全的强烈诉求, 需要将钉钉文档部署到用户 VPC 下或者公有云下。

为此,我们需要将钉钉文档的系统从阿里内部迁移到公有云上进行部署,而钉钉文档使用的底层技术需要从阿里内部的技术体系迁移到使用开源技术或阿里云的商业化产品上。

借助 Dapr 的标准 API 和可扩展的组建模型,我们采取的策略是让用户不需要修改任何代码,直接通过 Dapr Runtime 屏蔽底层使用的中间件:部署在不同平台时,通过激活 Dapr 中的不同的 Component 来提供一致的能力。

以消息通讯威力,当应用需要访问消息系统时:

  • 在阿里内部:通过 Rocketmq.yaml 激活 Rocketmq 组件。
  • 在公有云上:通过 Kafka.yaml 激活 kafka 组件。

通过 Dapr 的可移植性,上层的钉钉文档应用现在可以和底层的基础设施(如消息系统)解耦,从而实现在不同的云平台之间平滑迁移:

3.png

最终帮助我们的业务团队实现了他们的业务目标:使 Dingtalk 在任何地方部署成为可能。

阿里的 Dapr 未来规划

未来我们将继续通过应用试点的方式对 Dapr 进行验证,包括:

  • 适用场景
  • 性能
  • 稳定性
  • 可移植性

同时我们将继续开发 Dapr 的组件,以集成更多的中间件和基础设施,包括内部产品和阿里云上支持的商业产品。其中对阿里云商业产品的集成代码,我们将在验证通过之后贡献给 Dapr 项目,从而为 Dapr 提供阿里云支持。这些项目预计将包括:

  • Apache Dubbo 的 RPC 支持
  • Apache RocketMQ 的消息传递支持
  • Nacos 的动态配置支持
  • 阿里云 RDS 的 MySQL 支持
  • 阿里云缓存服务的 Redis 支持

作为 Multiple Runtime 架构的先驱者和 Dapr 项目的早期采用者,我们将继续和 Dapr 社区合作,在落地的过程中努力完善 Dapr 的功能、性能、稳定性等关键指标,和社区一起联手打造云原生时代的DistributedAPplicationRuntime!

原文链接

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

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

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

相关文章

hashmap value占用空间大小_java-测量和监视大型HashMap的大小

首先,有一篇来自Alexey Shipilev(Oracle的前JVM工程师,现在在Redhat的)的this篇很棒的文章,解释说这并不是那么容易.Java中的每个对象都有两个标头,它们的大小可以取决于平台或jvm的启动配置(UseCompressedOops).然后,在字段和对象自身之间进行填充和对齐(8字节对齐).然后,有一…

cron 每年执行一次_crontab服务执行定时脚本,在指定时间内让php执行处理业务逻辑...

技小白 2019-12-19 11:45:33crontab-e编辑某个用户的cron服务设置执行脚本crontab-l列出某个用户cron服务列表信息crontab-r删除某个用户的cron服务定时任务crontab格式分小时日月星期命令******0-590-231-311-120-6command注:“*”代表取值范围内的数字“/”代表每…

Fluid 给数据弹性一双隐形的翅膀 -- 自定义弹性伸缩

简介: 弹性伸缩作为 Kubernetes 的核心能力之一,但它一直是围绕这无状态的应用负载展开。而 Fluid 提供了分布式缓存的弹性伸缩能力,可以灵活扩充和收缩数据缓存。 它基于 Runtime 提供了缓存空间、现有缓存比例等性能指标, 结合自身对于 Run…

ff14注册完服务器可以转,FF14怎么转服 FF14转服条件一览-游侠网

你知道FF14怎么转服吗?如果想要换服务器,都有哪些特别的要求呢?下面为大家带来的是FF14转服条件一览,大家一起来了解一下吧。转服条件一览跨区角色转移试行规则1、本次仅开放陆行鸟区转向莫古力区指定服务器功能。我们将在莫古力区…

阿里平头哥发布自研云芯片倚天710,性能超越业界标杆20%

10月19日,2021云栖大会现场,阿里巴巴旗下半导体公司平头哥发布自研云芯片倚天710。该芯片是业界性能最强的ARM服务器芯片,性能超过业界标杆20%,能效比提升50%以上。倚天710是阿里云推进「一云多芯」策略的重要一步,也是…

业务团队如何统一架构设计风格?

简介: 首次上线应用,面对业务框架搭建你是否曾感到无从下手?维护线上应用,面对大量历史包袱你是否正避坑不及深陷泥潭?为何同样是业务应用,不同人的设计风格千差万别?为何最初的设计经过多个迭代…

javacurrentmap_Java ConcurrentHashMap.forEach方法代码示例

import java.util.concurrent.ConcurrentHashMap; //导入方法依赖的package包/类public static void main(String[] args) {ConcurrentHashMap> userHash new ConcurrentHashMap<>();HashFiller hashFiller new HashFiller(userHash);Thread[] threads new Thread[…

python接口测试实战_Python接口测试实战01:七种武器

工欲善其事必先利其器&#xff0c;在正式开始介绍使用Python做接口测试前&#xff0c;我们先准备好相应的工具&#xff0c;这样就能快速上手接口测试了。 0. Python 在测试领域Python其实大有可为&#xff0c;不管是Web、移动端、接口、嵌入式测试都能看到Python的身影。而且因…

一文详解物化视图改写

简介&#xff1a; 本文主要介绍什么是物化视图&#xff0c;以及如何实现基于物化视图的查询改写。 作者&#xff1a;阿里云数据库OLAP产品部 云曦 预计算和缓存是计算机领域提高性能以及降低成本的最常见的手段之一。对于那些经常重复的请求&#xff0c;如果可以通过缓存回答…

close_wait过多服务器无响应,记一次大量CLOSE_WAIT连接导致的服务宕机

最近线上服务出现了一段时间的无法响应&#xff0c;在此总结一下问题的排查过程。监控信息监控显示CPU和内存没有异常波动&#xff0c;TCP连接中有大量的CLOSE_WAIT状态的连接。看一下TCP连接断开的过程&#xff1a;也就是说客户端发起了断开连接的包&#xff0c;服务端收到数据…

【Java JVM】Java 实例对象的访问定位

Java 程序会通过栈上的 reference 数据来操作堆上的具体对象。 但是 reference 类型在《Java虚拟机规范》里面只规定了它是一个指向对象的引用, 并没有定义这个引用应该通过什么方式去定位, 访问到堆中对象的具体位置, 所以对象访问方式也是由虚拟机实现而定的&#xff0c;主流…

阿里云智能总裁张建锋:保护客户数据安全是第一原则

10月19日&#xff0c;阿里云智能总裁张建锋在2021云栖大会再次重申&#xff0c;保护客户数据安全是阿里云第一原则。“我们绝对尊重用户的数据归属权和控制权&#xff0c;并严格保障用户的隐私安全&#xff0c;这是阿里云最重要的基石。” 2015年&#xff0c;阿里云在行业中率先…

独家对话阿里云函数计算负责人不瞋:你所不知道的 Serverless

简介&#xff1a; 如果你是一名互联网研发人员&#xff0c;那么极有可能了解并应用过 Serverless 这套技术体系。纵观 Serverless 过去十年&#xff0c;它其实因云而生&#xff0c;也在同时改变云的计算方式。如果套用技术成熟度曲线来描述的话&#xff0c;那么它已经走过了萌芽…

nginx location 匹配 多个规则_三道小练习助你弄懂 Nginx location 匹配

在 Nginx 中我们可以通过配置 location 指令块&#xff0c;来决定一个请求 url 如何处理。如果我们编写了多条 location 指令块&#xff0c;如何保证各个 location 不会产生冲突&#xff1f;如何理清 location 的匹配顺序&#xff1f;带着这两个问题&#xff0c;我们先来做几道…

rational rose 启动选择_Rational Rose打开问题

这是为了方便自已解决问题的&#xff0c;有需要解决Rational Rose软件安装问题的朋友们可以去看看这位大佬。进入Rational rose出现遇到这种情况时的解决情况&#xff1a;1)在windows/SysWOW64下找到之前已经粘贴的flexlm.cpl文件&#xff0c;双击打开它。2)在Setup页中lmgrd.e…

手机淘宝轻店业务 Serverless 研发模式升级实践

简介&#xff1a; 随着 Serverless 在业界各云平台落地&#xff0c;阿里内部 Serverless 研发平台、各种研发模式也在业务中逐步落地&#xff0c;如火如荼。在此契机下&#xff0c;淘系团队启动了轻店 Serverless 研发模式升级战役&#xff0c;基于阿里集团底层设施建设、上层技…

服务器 独立显卡 显示不出来,dell服务器R720+独立显卡GTX1650,进不去系统,UEIF报错...

戴尔服务器dell R720的显卡问题。操作系统是win2008R2。现在是安装的华硕750ti&#xff0c;运行ok&#xff0c;多个屏幕。买了技嘉gtx1650&#xff0c;刚出的显卡安装了。在集成显卡情况下打了驱动&#xff0c;设备管理显示识别了。但是切换到GTX1650显卡下启动系统&#xff0c…

阿里开源玄铁RISC-V系列处理器,推动RISC-V架构走向成熟

10月19日&#xff0c;2021云栖大会现场&#xff0c;阿里云智能总裁张建锋宣布&#xff0c;平头哥开源玄铁RISC-V系列处理器&#xff0c;并开放系列工具及系统软件。这是系列处理器与基础软件的全球首次全栈开源&#xff0c;将推动RISC-V架构走向成熟&#xff0c;帮助RISC-V软硬…

饿了么EMonitor演进史

简介&#xff1a; 可观测性作为技术体系的核心环节之一&#xff0c;跟随饿了么技术的飞速发展&#xff0c;不断自我革新。 序言 时间回到2008年&#xff0c;还在上海交通大学上学的张旭豪、康嘉等人在上海创办了饿了么&#xff0c;从校园外卖场景出发&#xff0c;饿了么一步一…

注入点批量收集工具_原来微信群也是能够批量管理的,学到了

运营微信社群的人都知道&#xff0c;在没有工具的时代&#xff0c;自己总会人肉管理的一批微信群&#xff0c;少则几个&#xff0c;多个几十个上百个&#xff0c;那么现在微信群的管理到了工具时代&#xff0c;怎么批量管理比较好呢&#xff1f;微信群区别于论坛&#xff0c;作…