“Dapr”是一个简单地集成微服务的运行时框架的概述
首先
我对如何将基于微服务开发的功能作为系统进行协作,以及使协作变得更加容易的技术非常感兴趣,因此我进行了一些调查。在这个过程中,Dapr作为一个支持应用程序构建基于微服务的系统的开源运行时框架日益受到关注。Dapr支持多种编程语言,并通过提供可以通过HTTP和gRPC连接的API,使服务之间的协作变得容易。
在Qiita上,有一些关于Dapr的文章,但作为对2022年技术发展的预测(题目所让),我想再次整理一下Dapr的概述。
Dapr的定义是什么?
「Dapr(分散アプリケーションランタイム)」是一个提供简化微服务协作的API的运行时。关于发音,是读作「达帕」还是「达巴」呢(从介绍视频听起来像两者的中间)。
Dapr是由Microsoft领导的开源项目,于2019年10月发布了v0.1版本,2021年2月发布了v1.0版本。自发布以来,Dapr引起了广泛关注,从GitHub上的Star数量的增长可以看出,尽管晚于其他项目,但其受到了高度关注。并且,在2021年12月,Dapr被CNCF指定为孵化项目。根据CNCF的说法,孵化项目是指已经超过了创新者阶段,正在向早期大多数用户阶段发展的项目,在这方面来说,Dapr属于即将进入普及阶段的库。
在介绍Dapr概要时,我们将使用官方文档的图示。下面的图表巧妙地展示了Dapr提供的功能等概述。接下来,我们将逐步解释这个图表,以说明Dapr的概要。
Dapr的功能
以下是对Dapr功能的介绍。在图表的中央,介绍了Dapr提供的8个功能。虽然有许多功能,但首先要重点理解的是**Service-to-service Invocation(服务之间的调用)**。Dapr的主要功能是通过提供API来促进不同服务之间的协作,其他功能可视为该衍生功能。
在此基础上,我想介绍Dapr的八个功能。
服务对服务的调用
当您使用Dapr启动应用程序时,会创建用于调用服务的端点,并通过使用API来轻松实现与其他服务的协作。服务调用可以使用HTTP或gRPC来实现。例如,如果您想通过HTTP调用nodeapp服务的neworder方法,您可以执行以下命令。
状态管理
Dapr支持对有状态服务的支持,并且可以通过API将状态数据保存为键值对形式的数据。数据访问支持并发和一致性,减少了开发管理状态数据逻辑所需的工作量。
支持的存储方式包括在以下页面中列出的方式。除了PostgreSQL和Redis,还支持云数据库如Amazon DynamoDB和Azure CosmosDB等。
https://docs.dapr.io/reference/components-reference/supported-state-stores/
发表和订阅
除了服务之间的调用,Dapr还提供了通过发布-订阅消息传递来协调服务之间的API/CLI。消息传递可以通过将HTTP请求作为API执行来实现。
可以协调的代理商在此页面上进行了汇总。除了Apache Kafka,还可以与云服务如Amazon SQS和Azure Service Bus等进行协调。
https://docs.dapr.io/reference/components-reference/supported-pubsub/
资源绑定和触发器
Dapr可以与外部应用程序进行集成。例如,它可以与MySQL等数据库以及Azure Storage Queues等云服务进行绑定。绑定配置使用YAML进行记录。
可以在下面的页面上找到可集成的应用程序列表。虽然许多应用程序都支持,但由于大部分仍处于Alpha版阶段,所以希望未来的开发能有所期待(由于微软在主导,Azure集成的开发正在推进中)。
https://docs.dapr.io/reference/components-reference/supported-bindings/
演员
请参考下方链接,了解Dapr使用的Actor模式以及它支持的服务之间的协作方式的详细信息。
https://docs.dapr.io/developing-applications/building-blocks/actors/actors-overview/
可观测性
使用Dapr可以实现分布式追踪、指标收集和健康检查。除了监视应用程序之外,还可以监视作为sidecar运行的Dapr。可以收集的指标请参考以下链接:
https://github.com/dapr/dapr/blob/master/docs/development/dapr-metrics.md
此外,通过使用开源数据收集工具OpenTelemetry,还可以与各种监控工具进行集成。
秘密
Dapr提供了连接存储机密数据(例如API密钥)并访问数据的API。可以参考下面的页面了解可集成的存储方式。
https://docs.dapr.io/reference/components-reference/supported-secret-stores/
配置
Dapr可以为单独的应用程序提供配置信息,例如标识符和连接数据库的名称。配置信息以键值数据的形式进行描述,并通过专用的API进行设置。
Dapr支持的编程语言
为了扩大可协作的服务范围,Dapr发布了支持多种语言的SDK。在本文写作时点(2022年1月),Dapr支持以下语言:
-
- .NET
-
- Python
-
- Java
-
- Go
-
- PHP
-
- Javascript
-
- C++
- Rust
尝试运行Dapr
Dapr在GitHub上提供了一些快速入门示例,通过运行这些示例来学习Dapr的功能是高效的选择。尤其是对于Dapr的入门来说,Hello World快速入门非常有用,可以通过实际运行来理解Dapr的核心功能——服务之间的调用。您可以在以下链接找到该示例并开始进行实践:https://github.com/dapr/quickstarts/tree/master/hello-world
你好,世界!Dapr的README非常细致地描述了快速入门,只要按照它的指引进行阅读,你就能够顺利地运行Dapr,而且没有任何困难。然而,我考虑在另一篇文章中,借助”Hello World”的例子来说明Dapr的服务调用功能。
最后 / 最终
在本文中,我们介绍了一个可以方便实现微服务协作的库Dapr。希望未来能够通过运行快速入门并撰写一篇详细介绍其使用方法的文章。
请参考以下链接
-
- Dapr
-
- https://dapr.io/
GitHub: Dapr
https://github.com/dapr/dapr
CNCF: Graduated and incubating projects
https://www.cncf.io/projects/