简介: Dapr 是 2019 年 10 月开源的分布式运行时。早在 Dapr 开源初期,阿里云就开始参与 Dapr 社区建设和代码开发,目前已有两位 Dapr 成员,是 Dapr 项目中除微软以外代码贡献最多的公司。做为 Dapr 项目的早期采用者,阿里在 Dapr v1.0 发布以前就在内部小规模的试点。本文由 Dapr 社区成员敖小剑翻译。
今天,咱们很高兴地发布分布式应用运行时(Distributed APplication Runtime / Dapr)的 v1.0 版本,它已经达到了生产就绪所需的稳定性和企业准备。Dapr 是一个开源、可移植、事件驱动的运行时,它使开发人员可以轻松地构建运行在云平台和边缘的弹性而微服务化的应用程序,不管是无状态仍是有状态。Dapr 让开发人员可以专一于编写业务逻辑,而不是解决分布式系统的挑战,从而显著提升生产力并减小开发时间。Dapr 下降了基于微服务架构构建现代云原生应用的准入门槛,而经过这次发布的 v1.0 版本,Dapr 应用能够部署到生产场景中的自托管基础设施或 Kubernetes 集群。编程
自 2019 年 10 月首次发布 以来,Dapr 已有 14 个版本,每一个版本都创建在大量的社区和用户反馈基础上,以推进改进、稳定性和性能。这些版本立足于构建真实的应用,反映了当今开发者在开发云原生应用时的实际状况;不管是在云平台、边缘仍是私有基础设施上,社区都在加紧贡献与 Azure、AWS、阿里巴巴和 Google cloud 集成的 Dapr 组件。后端
从成立之初开始,Dapr 开源项目就面向那些正在构建新的现实世界绿色地带(greenfield)应用的开发者,以及那些在云原生架构中迁移和利用现有应用和组件的开发者。Dapr 方法的关键是知足开发者和企业的现状,帮助他们实现应用的现代化,并利用他们在云原生和微服务架构中的现有技能。在 v1.0 版本中,咱们专一于将 Kubernetes 做为运行生产应用的主要托管环境,随着 Dapr 的进一步成熟,咱们但愿在无服务器(serverless)环境中看到 Dapr。在过去的一年半时间中,咱们与早期采用者和合做伙伴紧密合做,所以 Dapr 如今已经成为多个基于 Kubernetes 的生产和预生产应用的核心。在这个用户驱动的过程当中,Dapr 社区改进了 Java、.NET 和 Python SDK 的原生语言体验,用真实的工做负载测试了规模和性能,增长了安全特性,并证实了 Dapr 的 Actor 编程模型是工做流和物联网(IoT)场景的最佳选择。如下是一些早期采用者的故事,以凸显 Dapr 现在的使用状况。安全
ZEISS 面临的挑战是维护和更新一个具备 20 年历史的带有硬编码业务规则的后端系统。原来的订单验证和路由解决方案是基于一个具备固定容量的单体架构,开发人员在不直接在系统中从新配置表格的状况下,没法轻松的更新、从新路由或跟踪订单。此外,业务部门没法直接控制其订单处理流程。因为存在大量的系统依赖,变动老是须要代价高昂而耗时的开发人员干预。为了解决这个问题,ZEISS 使用 Azure 和 Dapr 开发了一个新的应用程序,能够更快地完成客户订单,同时还加快了开发速度,并改善了公司的业务连续性。你能够在 这里 阅读更多关于他们的故事。服务器
Ignition Group 打造的订单处理软件能够跟踪产品、管理订阅和处理来自各类来源的支付。订单处理涉及许多依赖,有一个采购跟踪机制,这个机制会调用客户订阅,触发会计和计费流程,并肯定适当的支付渠道。Ignition Group 但愿微服务能给其工做流逻辑带来好处——高可用性、弹性、可扩展性和性能。使用 Dapr 和 .NET Core,Ignition Group 构建了一个新的、可扩展性更好的、可维护的订单处理和支付系统,该系统目前已在生产中运行。Ignition Group 今天已经运行在生产中,你能够在 这里 阅读更多关于他们的故事。网络
Roadwork 是一家为自主系统提供端到端平台的初创公司,让用户产生可执行的洞察力并据此行动。目前,他们专一于数据提取技术,并以全面集成自主系统为路径。经过对 Dapr 与 KEDA 的梳理,他们在 Kubernetes 上建立了一个生产服务,根据传入的客户负载请求,自动扩展应用和集群。Dapr 提供了使用 RabbitMQ 的 pub/sub 的抽象和集成,其可以轻松拥有 竞争消费者模式。今天,Roadwork 的第一个产品 Scraper.ai 已经在生产中运行。在 这里 了解更多信息。架构
是社区的努力让 Dapr 成长到 v1.0。自 Dapr 首次公布以来,开源社区团结在 Dapr 周围并不断成长,使人惊叹——从 2019 年 10 月的 114 个贡献者增加到今天的 700 个。在短短的 16 个月内,增加了 6 倍多!框架
社区对项目的贡献涉及到 Dapr 的每个仓库,范围包括提交问题、参与功能提案讨论、提供样本,固然也包括贡献代码。社区成员对项目贡献最大的部分包括 Dapr 运行时、文档、CLI 和 SDK。另一个关键的贡献领域是建立了一个丰富的组件生态系统。可供开发人员使用的组件超过 70 个,使 Dapr 成为一个能够适用于普遍场景的解决方案,包括开源技术和云提供商的特定集成。当开发人员但愿建立具备高可移植性的云平台无关的应用程序时,这些使得 Dapr 成为一个有吸引力的选择。less
贡献并不局限于我的,还包括阿里云、HashiCorp、微软等组织,以及上文提到的 ZEISS 和 Ignition Group 等早期采用者。Dapr 生态系统还包括合做伙伴的技术栈,这些技术栈为使用 Dapr 的开发者提供了附加值。例如,New Relic 提供了关于他们的监控工具如何与 Dapr 无缝工做的指导,这要归功于 Dapr 使用的标准跟踪协议,这些协议能够在不改变任何代码的状况下轻松地检测您的应用程序。运维
培养一个开放和包容的社区是 Dapr 项目的首要目标。做为该承诺的一部分,咱们分享了 向开放治理模式的过渡,这也是咱们保持 Dapr 开放、供应商中立和包容性的方式。咱们的愿景是继续这一旅程,并打算在不久的未来让 Dapr 加入一个开放软件基金会。同时,咱们邀请您经过 GitHub、Dapr 社区按期会议 和最近推出的 Discord 服务器 与 Dapr 社区互动。编程语言
"在阿里云,咱们相信 Dapr 将引领微服务的发展。经过采用 Dapr,咱们的客户如今能够以更快的速度来构建可移植和健壮的分布式系统。"—— 阿里云资深技术专家 李响
在最近的几个月中,咱们已经发布了三个 v1.0 版本的候选版本,专一于从社区得到反馈,并为 v1.0 版本作准备。在性能、安全、高可用性(HA)和一致性等方面更深刻地关注于生产就绪。完整的发布说明能够在 这里 得到,如下是一些亮点:
对于 v1.0 版本,Kubernetes 是首选的托管环境,它与 Dapr 控制平面和 Dapr sidecar架构深度集成。例如,在运维上,经过 Dapr CLI "init" 和 "upgrade" 命令简化了 Dapr 在 Kubernetes 上的安装和升级,这些命令能够拉取正确的 Dapr 运行时版本,并确保这些版本以受控的方式推出,包括迁移正在使用中的证书。您能够在 HA 模式下安装 Dapr 控制平面,确保多个实例同时运行,并且 Dapr sidecar 有一个健康端点,能够实现 Kubernetes 就绪(readiness)和活泼度(liveness)探针以肯定其健康状态。在整个发布候选版本的过程当中,咱们与早期采用者密切合做,以确保他们可以以可运维的方式迁移到每一个 Dapr 运行时版本,而不是构建新的集群。请参阅 生产部署指南 以了解更多信息。
在云原生应用中,性能是相当重要的,而 Dapr 对高性能很是重视。一个常常被提起的话题是,由 sidecar 模型为应用程序完成全部繁重工做所带来的影响,以及数据平面性能的权衡取舍。其中一个特别关注的领域是服务调用构建块,在这里,当经过两个 Dapr sidecar 在两个应用之间调用并收到响应时,Dapr 在 p90 时增长了约 1.2ms 的端到端延迟,在 p99 时增长了约 2ms。因而可知,Dapr 具备极低的服务间延迟,并针对高吞吐量场景进行了优化。
Dapr 有超过 70 个由社区开发的组件,为了确保对这些组件的使用信心,它们要通过一系列的一致性测试。组件首先从 alpha 状态开始,最终达到 GA 状态,并须要用户在生产中使用它们。对于 v1.0 版本,只有部分已经在生产中普遍使用的组件被批准为 GA,其余组件在知足标准后也将加入其中。与众多开源云原生技术同样,变动、修复和改进的引入速度很快,这意味着受支持版本存在滚动窗口。重要的是,Dapr v1.0 版本宣称 API 层面是稳定的,若是将来须要修改,将经过 版本机制 来保证 API 的彻底向后兼容,若是须要破坏性的修改,则会提早几个版本注明。最后,从支持的角度来看,当前和以前的版本都将支持 在出现关键问题或安全问题时进行补丁更新。
安全一直是 Dapr 的核心主题,由于咱们已经认识到基于微服务架构构建安全的现代分布式应用的复杂性,而 Dapr 已经经过了多项独立的安全审计。为了抵御应用程序之间的中间人攻击,您须要进行加密,而 Dapr 经过其控制平面服务发出的 x.509 证书提供加密,这些证书会自动更新和滚动。为了提供对资源的访问控制,如状态存储、密钥、服务间调用,或发布/订阅特定主题的能力,您须要细粒度的访问控制策略(ACL)。当使用 spiffe 做为身份标准访问资源时,Dapr 提供了普遍的 ACL。当运行应用程序时,您能够将这些应用程序隔离在不一样的命名空间中,以便进行运维部署和隔离。这些普遍的安全能力在下图中显示,这里有三个利用 Dapr 安全特性的微服务:
Dapr 以其编程语言、框架和工具拥抱全部的开发者社区。Dapr 被设计为能够经过 HTTP 和 gRPC 协议从任何编程语言中使用,这意味着您不须要在编译时包含任何依赖关系。固然,为了改善开发者的原生语言体验,Java、.NET、Python 和 Go 的 SDK 也以 v1.0 生产就绪的形式发布,这反映了它们在社区和组织中的成熟应用。这些 SDK 可让您做为开发者,使用您最喜欢的开发环境,如 VS Code 或 IntelliJ。JavaScript/Node.js、C++、Rust 和 PHP 的 SDK 目前处于预览阶段,随后将发布 v1.0 版本。PHP SDK 包括对 Actor 的支持,这是社区为 Dapr 普遍且不断增加的编程语言列表作出贡献的一个极佳的例子。
经过这个 v1.0 版本,咱们为构建现代云原生应用所需的基本构建块奠基基础的旅程才刚刚起步。社区驱动意味着社区将在将来的版本中设定项目的优先级,其中许多优先级已经被投票经过。例如,加强现有构建块的亮点,包括在状态管理中使用 OData 查询和过滤多个值的能力。在 pub/sub 中,支持 CloudEvents v1.0 过滤功能,以根据消息内容过滤出用户感兴趣的事件。在可观测性方面,提供一个 API 用于 从应用中追踪事件,防止您不得不绑定到特定的监控类库,并使 actor 可以直接订阅 pub/sub 事件,从而开启了丰富的事件驱动场景。
新的构建块提案包括用于读写应用程序配置数据的配置 API,例如来自 Azure Configuration Manager 或 GCP Configuration Management。领导者选举构建块,提供建立单例实例、同步或锁定语义能力。用于网络级服务调用的透明代理构建块,使您可以根据 URL 或 DNS 地址来路由消息,以及用于熔断器、隔离舱和超时等模式的更多弹性构建块。
最后,在 v1.0 版本中,Dapr 集成了多个开发者框架,包括 ASP.NET Core、Java Spring Boot、Azure Functions 和 Logic Apps,而咱们认为这还将继续,更多的开源框架如 Django、Nodejs 和 Kyma 都是潜在的例子。此外,考虑到 Dapr 的托管平台独立性,在虚拟机、边缘平台(如 Azure Stack Hub 或 AWS Outpost)和其余分布式系统平台上提供对 Dapr 控制平面一流的支持,能够实现应用的可移植性。
咱们但愿您能试用 Dapr v1.0。您可使用文档中的 入门指南 进行学习,而后经过 快速入门 来深刻了解。若是你须要更多信息,样本库 是 Dapr 社区捐赠的不一样的应用程序的展现。Dapr 文档 docs.dapr.io 是全面的指南,还有几本书,包括《 Learning Dapr》、《使用 Dapr 和 .NET 实践微服务》以及最新发布的免费电子书《Dapr for .NET 开发者》。若是您有任何疑问,遇到问题或想与社区的其余成员交流,Dapr 社区随时在 Discord 上欢迎您的到来。
对于 Dapr 来讲,v1.0 版本的发布只是一个开始,在这个过程当中,咱们感谢并鼓励您的持续帮助、反馈和贡献。不管是编写新的组件,提出建议,贡献新的构建块,仍是加强您最喜欢的语言的 SDK,咱们都但愿听到您的意见并与您一块儿参与。在这个微服务开发的时代,做为一名开发者,这是一个使人兴奋的时刻,Dapr 将释放您的生产力和创造力,轻松构建现代化的分布式应用。咱们很是高兴的看到您继续使用这个项目,看到您使用它进行构建,并对 Dapr 的发展保持关注。
敖小剑,资深码农,十九年软件开发经验,微服务专家,Service Mesh 布道师,Servicemesher 社区联合创始人。专一于基础架构,Cloud Native 拥护者,敏捷实践者,坚守开发一线打磨匠艺的架构师。曾在亚信、爱立信、惟品会、蚂蚁金服等任职,对基础架构和微服务有过深刻研究和实践。目前就任于阿里云云原生应用平台从事 Service Mesh、Serverless、Multiple Runtime 等云原生产品设计和开发。