Dapr用户案例
- 1: 国外用户案例
- 1.1: Bosch
- 1.1.1: Bosch概述
- 1.2: Zeiss
- 1.2.1: 蔡司
- 1.3: Ignition
- 1.3.1: Ignition
- 1.4: Legentic
- 1.4.1: Legentic
- 1.5: Roadwork
- 1.5.1: Legentic
- 1.6: Man
- 1.6.1: Man
- 2: 中国用户案例
1 - 国外用户案例
1.1 - Bosch
1.1.1 - Bosch概述
公司介绍
世界知名制造商博世(Bosch)创建了一家名为 Residential IoT Services GmbH ( 住宅物联网服务有限公司 / RIoT) 的初创公司。专注于智能家居解决方案。
RIoT 运营着一个智能家居平台,用于跨设备和电器的自动化和信息,并开发了 Home Connect Plus 应用程序。家庭用户可以通过 Home Connect Plus 连接,自动化和集中控制来自不同品牌的各种智能家居设备和整个系统。
Customer:Residential IoT Services GmbH (Bosch-Group)
Industry:Manufacturing
Size:10,000+ employees
Country:Germany
Products and services
- Azure Application Gateway
- Azure Cosmos DB
- Azure Key Vault
- Azure Kubernetes Service (AKS)
- Azure Service Bus
主要应用场景
为了控制和自动化智能家居设备,客户使用来自RIoT的Home Connect Plus移动应用程序,该应用程序向RIoT平台发送请求。
事件驱动的微服务
- binding 构建块
- pub / sub 构建块
“Dapr 为我们提供了对基础结构组件(如服务总线)的抽象级别。这使得进入发布/订阅模型变得更加容易,
通过调用 Dapr API,开发人员可以将其应用程序代码与状态管理、资源绑定、发布/订阅消息传递和其他常见的分布式系统挑战分离。
自动缩放
为了满足服务的预期规模,RIoT 工程师很早就决定使用 Azure 和分布式应用程序运行时 (Dapr),这是一个开源框架,可以更轻松地为云和边缘构建微服务。RIoT受益于Azure的全球规模以及Dapr与Azure Kubernetes Service(AKS)的集成,这有助于团队更快地将其创新推向市场。
为了部署服务并在 Kubernetes 集群中运行它,开发人员向 Dapr 部署方案添加了一些注释。AKS 可自动执行操作和维护任务,例如预配、缩放和监视,这有助于降低开发人员的复杂性。
Dapr抽象带来的开发便利
Dapr 提供的抽象层还使开发人员可以轻松更改不同环境中使用的组件:
抽象层 | 云上部署 | 本地开发测试 |
---|---|---|
pub/sub | Azure Service Bus | Redis |
status | Azure Cosmos DB | Redis |
secret | Azure Key Vault | Redis |
Jasper Mang: Lead Developer:
We used the Dapr SDK to publish events, which gave us the time to focus on what we wanted to communicate, instead of, ‘How do I get this communication implemented?’ We could focus on the real things that matter.
我们使用 Dapr SDK 发布事件,这让我们有时间专注于我们想要传达的内容,而不是如何实现这种沟通?我们可以专注于真正重要的事情。
即专注于 “What to do”,而不是 “How to do”,这也就是云原生的精髓所在:业务逻辑和技术实现分离解耦。
actor模型
actor 是具有单线程执行的计算和状态的隔离单元。使用 Dapr actor 来表示设备及其逻辑,IoT 开发人员可以更轻松地跨群集管理计算任务。
在RIoT平台中,Actor用于表示基于时间的自动化。RIoT 使用了 dapr actor 自带的 timer 和 reminder。
备注:Bosch 是 dapr actor 构建块的第一个 Java 用户,一起完善了 dapr java sdk。
总结
- 基于微服务的架构支持大量的并发用户,而Dapr简化了 事件驱动的后端系统。
- Dapr的pub/sub构建模块允许服务之间使用消息进行通信。
- 而Dapr绑定使Azure服务总线能够接收这些消息并将其发送到指定的微服务中。
- Azure Cosmos DB是生产状态 存储,而Redis则用于本地开发和测试。
案例资料
1.2 - Zeiss
1.2.1 - 蔡司
公司介绍
蔡司是光学和光电子领域的国际技术领导者。蔡司集团是一家国际领先的技术企业,在半导体制造技术、工业质量和研究、医疗技术和消费市场等领域开展业务。自1846年成立以来,蔡司不断推动光学领域的发展,并塑造技术进步。
Customer:Carl Zeiss AG
Industry:Manufacturing
Size:10,000+ employees
Country:Germany
Products and services
- Azure API Management
- Azure Container Registry
- Azure Cosmos DB
- Azure DevOps
- Azure Front Door
- Azure Key Vault
- Azure Kubernetes Service
- Azure Service Bus
- Azure Storage
主要应用场景
主要场景:消费者业务,需要一个更敏捷的订单管理和处理系统。主要挑战是一个拥有20年历史的后端系统,具有硬编码的业务规则,最初的订单验证和路由解决方案基于具有固定容量的单体架构,存在很多系统依赖性,更改始终需要昂贵且耗时的开发人员干预。
主要编程语言: Java和JavaScript
简化微服务开发
开发人员面临着使用微服务架构构建分布式应用程序的复杂性。他们希望专注于业务逻辑,同时依靠运行时和托管平台,为他们的应用程序提供可扩展性、弹性、可维护性、弹性以及微服务架构的其他属性。
使用了 service invoke,statue,secret,还有可观测性:从其应用程序中获取详细的跟踪、指标和日志记录信息,以发送到 Azure Application Insights。
Dapr really simplifies the case of distributed application architectures. With Dapr, any developer can do it
Dapr真正简化了分布式应用架构的情况。有了Dapr,任何开发者都可以做到这一点。
事件驱动的工作流程:全球和区域
Azure Front Door 将请求路由到最近的区域,每个区域都包含处理和存储特定于该区域设置的数据所需的 Azure 资源。
Azure API Management 充当区域资源的网关,用于有效管理其在本地和 Azure 上托管的 API。
使用到 Azure Service Bus 和 Dapr pub/sub 构建块。
蔡司订单处理逻辑在 AKS 中与 Dapr 结合使用在区域上运行。唯一的订单号全局存储在 Azure Cosmos DB 中。
Dapr抽象带来的开发便利和多云支持
编写代码的开发人员不必知道和学习特定技术的所有细节即可发布和订阅消息,从而使代码具有可移植性并更快地开发。
This flexibility enables the ZEISS developers to swap out alternative services to support multiple cloud and on-premises environments. Without having to change one line of code, we can still use the same state and use the same business code.
这种灵活性使蔡司的开发人员能够调换替代服务,以支持多种云和企业内部环境。无需改变一行代码,我们仍然可以使用相同的状态,使用相同的业务代码。
In our multicloud environment, Dapr gave us the flexibility we needed. It provides a layer of abstraction that allows the developers to focus on the business case at hand.
在我们的多云环境中,Dapr为我们提供了所需的灵活性。它提供了一个抽象层,使开发人员能够专注于手头的业务案例。
actor模型
Order Processing 应用程序编排其他八个微服务,这些微服务做出有关供应链物流的决策,例如将订单传送到何处以及订单是否有效。
为了管理订单的生命周期,蔡司使用了Dapr virtual actor。actor 是具有单线程执行的计算和状态的隔离单元。Actor 非常适合创建工作流、IoT 和其他具有独立计算单元的应用程序。
蔡司创建了GlobalOrderID和Status作为Dapr virtual actor:
-
GlobalOrderID 服务生成唯一的订单号
-
Statue 服务将订单的当前状态报告给附加的子系统。
actor 状态全局存储在 Azure Cosmos DB 中。
总结
We wanted a platform-agnostic, microservices architecture with a very small footprint. We got that with Dapr and Azure Kubernetes Service.
我们想要一个与平台无关的微服务架构,占用空间非常小。我们通过Dapr和Azure Kubernetes Service获得了这一点。
案例资料
1.3 - Ignition
1.3.1 - Ignition
公司介绍
Ignition Group成立于2002年,是非洲最大的技术,媒体,电信和金融服务提供商之一。
主要应用场景
Ignition Group 使用 Dapr 来加速 Azure Kubernetes Service 的开发,用于其新的、可扩展的订单处理和支付系统。
主要编程语言:.NET Core (最初是使用.NET Framework和Windows Workflow Foundation开发)
简化微服务开发
类似。
Dapr抽象带来的可移植性
Dapr Binding API 的使用:
在构建 Marketic 时,团队意识到它正在使用关系数据库 SQL Server 来存储文档,后来切换到MongoDB。
我们所做的只是使用与 SQL Server 通信的 ID 相同的 ID 进行部署,因此没有其他任何内容注意到我们更改了后端存储。
Dapr Secret API 的使用:
开发环境使用 Kubernetes secrets,生产环境使用 Azure Key Vault 。
案例资料
1.4 - Legentic
1.4.1 - Legentic
公司介绍
Legentic在其解决方案中利用了 Dapr 与Python和运行在AWS上的FastAPI。
主要应用场景
主要编程语言:Python
消息通讯
The fact that we could focus on the core logic and let Dapr deal with the underlying messaging systems allowed us to iterate much faster than we expected.
我们可以专注于核心逻辑,让Dapr处理底层的消息传递系统,这让我们的迭代速度远远超过我们的预期。
案例资料
1.5 - Roadwork
1.5.1 - Legentic
公司介绍
初创公司,数据处理。
To create a platform that allows our customers to gain actionable insights from their data without additional operational effort
创建一个平台,使我们的客户能够从他们的数据中获得可操作的见解,而不需要额外的运营努力。
主要应用场景
Scraper.AI 网站,允许任何用户访问任何网站,指向他们想要提取或监视的数据,它会提取数据,然后以结构化的方式将其呈现给用户。
-
按需任务:在后台,Scraper.AI 创建实例,用于执行用户设置的操作。实例占用约 2048MB 的 RAM,平均持续时间为 30 秒。
-
调度任务:此外还有各种定时调度任务(hourly, daily, weekly / monthly)。
成本考虑,必须实现硬件和软件上的自动伸缩方案,是典型的 serverless 场景。
核心诉求:希望保持我们的解决方案的 “可移植性"和"与云无关”,以便它可以移动到我们想要的任何位置,尽可能避免"供应商锁定"。
serverless解决方案
Dapr + KEDA
-
Dapr:用于和 rabbitmq的连接,仅仅需要调用 dapr 的 rest 接口 (HTTP API,绕开了 dapr sdk)。
-
KEDA: 用于 Kubernetes 的事件驱动自动缩放
监控队列大小,一旦队列中的项目超过某个阈值,KEDA 将自动横向扩展部署,以向集群中添加额外的容器。
可移植性
从Digital Ocean 迁移到AWS,最后迁移到Azure,迁移只需要几个小时,因为所要做的就是再次配置Kubernetes,Dapr和KEDA,然后我们就可以再次设置和运行!
案例资料
1.6 - Man
1.6.1 - Man
公司介绍
Man Group
主要应用场景
Man集团使用Dapr来更新其交易平台,该平台在内部部署的虚拟机上运行。
With Dapr we can introduce platform-wide capabilities across a broad spectrum of technologies and deployment models with minimal effort, allowing us to more effectively evolve our core trading system
有了Dapr,我们可以用最小的努力在广泛的技术和部署模式中引入平台范围的功能,使我们能够更有效地发展我们的核心交易系统。
主要编程语言: .net
使用HashiCorp Consul进行 Dapr名称解析
TBD
案例资料
2 - 中国用户案例
2.1 - 阿里云
2.1.1 - 阿里云
公司介绍
主要应用场景
主要编程语言: Java,需要支持 nodejs,golang 等新语言
多语言支持
Faas / Serverless 场景
多语言应用的接入
复杂的Java遗留系统
云间迁移(多云下的可移植性)
背景:业务应用对外输出时有跨平台需求
通过不同yaml文件激活不同组件来屏蔽组件实现的方式给SaaS业务多云部署形态带来了极大的便利。
阿里云函数计算集成 Dapr
函数计算更加关注能够给开发者带来更好的研发体验,提升整体的研发效率。
Dapr 可以让函数轻量化:
总结
案例资料
2.2 - 高德地图
2.2.1 - 高德地图
公司介绍
主要应用场景
AutoNavi是中国领先的数字地图和导航服务提供商,拥有超过1亿的日活跃用户。AutoNavi 于 2020 年 4 月启动了无服务器/FaaS(功能即服务)项目,仅仅一年后,我们的解决方案就已经超过了每秒 100,000 次查询 (QPS)。Dapr 可以帮助我们解决的两个挑战:使用轻量级解决方案连接现有的后端服务,以及我们对支持多种语言的运行时的需求。
主要编程语言:java, c++, golang,node.js
轻量级解决方案
需求:FaaS必须能够调用在我们的RPC框架之上开发的现有后端微服务。
利用 Dapr 可以避免在代码中使用任何 SDK 库。
多语言支持
我们在无服务器解决方案中设计了一个 FaaS 运行时组件,因此开发人员只需编写函数代码,这些代码将被下载、加载到运行时,并最终在我们的 FaaS 运行时中运行。为了实现这一目标,我们为每种语言开发了不同的FaaS运行时,例如C++,Go,Rust等。每种语言中的函数都需要连接到后端服务或基础设施服务,如Redis,MySQL,MQ等,因此,如果我们想要避免对每种不同的语言使用类库,我们需要一个多语言解决方案来帮助我们实现这一目标。
案例资料
2.3 - 行云创新
2.3.1 - 行云创新
落地实践
业务场景
定时任务平台
使用组件
- state
- pubsub
- actor
主要编程语言
- java
- golang
- 少量python和js
资料
TODO: 收集更多的资料