开源 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,一经查实,立即删除!

相关文章

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、本次仅开放陆行鸟区转向莫古力区指定服务器功能。我们将在莫古力区…

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

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

一文详解物化视图改写

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

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

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

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

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

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

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

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

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

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

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

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

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

饿了么EMonitor演进史

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

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

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

宿主机进程挂载到容器内_迄今为止最严重的容器逃逸漏洞:Docker cp命令漏洞分析(CVE201914271)...

摘要在过去几年中,我们在各种容器平台(包括Docker、Podman和Kubernetes)中发现了copy(cp)命令中存在多个漏洞。其中,迄今为止最严重的的一个漏洞是在今年7月被发现和披露的。然而,在该漏洞发布的当时,并没有立即引起太多关注&…

知乎的 Flink 数据集成平台建设实践

简介: 本文由知乎技术平台负责人孙晓光分享,主要介绍知乎 Flink 数据集成平台建设实践。内容如下: 1. 业务场景 ; 2. 历史设计 ; 3. 全面转向 Flink 后的设计 ; 4. 未来 Flink 应用场景的规划。 本文由知乎…

阿里云总裁张建锋:新型计算体系结构正在形成

10月19日,在2021云栖大会上,阿里云智能总裁张建锋以“云深处,新世界”为主题,首次阐释了一个全新的云上世界。他认为,一个以云为核心的新型计算体系结构正在形成,随着云网端技术进一步融合,未来…

汽车之家基于 Flink 的数据传输平台的设计与实践

简介: 数据接入与传输作为打通数据系统与业务系统的一道桥梁,是数据系统与架构中不可或缺的一个重要部分。数据传输系统稳定性和准确性,直接影响整个数据系统服务的 SLA 和质量。此外如何提升系统的易用性,保证监控服务并降低系统…

exe打包工具哪个最好_一键分发工具哪个最好用?30万人选择这款

因为现代化媒体的优势不断显现,最近这几年,新媒体领域异常被人们注重,其门槛低、流量效果无可挑剔、转化比较快速等优点,于是聚拢了无数想改变命运的人,为了种种目的,想弄到极其喜人的数据流量,…

融合趋势下基于 Flink Kylin Hudi 湖仓一体的大数据生态体系

简介: 本文由 T3 出行大数据平台负责人杨华和资深大数据平台开发工程师王祥虎介绍 Flink、Kylin 和 Hudi 湖仓一体的大数据生态体系以及在 T3 的相关应用场景。 本文由 T3 出行大数据平台负责人杨华和资深大数据平台开发工程师王祥虎介绍 Flink、Kylin 和 Hudi 湖仓…

阿里云推出“磐久”云原生服务器系列 能效和交付效率大幅提升

10月19日上午,在2021杭州云栖大会上,阿里云正式推出面向云原生时代的“磐久”自研服务器系列,首款搭载自研芯片倚天710的磐久高性能计算系列也同时亮相,该款服务器将在今年部署,为阿里云自用。 据悉,磐久服…