在本地机器上快速运行Dapr的步骤
首先
这篇文章是参加2021年6月的企划活动「Qiita Azure 文章投稿活动」的参与文章,主题是「发布在Microsoft Build会议上的技术信息的文章」。
参加条件には、2021年5月26日〜28日に開催された「Microsoft Build 2021」で発表されたテクノロジーに関する内容であることが求められています。
現在、個人的に「Dapr」にハマりかけており、関連するセッション動画があれば参加できるのになぁと思いながら検索したところ…まさに奇跡!? 何と1件だけヒットしました!
- MyBuild – Microservices made easy with Dapr
我认为通过这个,我满足了参加条件,所以我决定提交。
Dapr是什么?
Dapr是一种分布式应用程序运行时。
- Dapr – Distributed Application Runtime
可以通过将分散式应用中的每个服务进行关联、管理状态和秘密、使用块和组件处理Pub/Sub和观测等方式,自由组合构建功能。
此外,基础设施部分适用于各种云端和边缘设备,应用程序部分则支持多种编程语言,因此您可以自由地将它们组合起来进行开发。
作为地鼠,对于多云粉丝而言,Gopher是Go语言编写的开源软件,而且最吸引人的是可以将各家公共云服务进行融合。
请参考下面的文件以获取详细信息(我目前也正在阅读中!)
Dapr Docs(英語)
.NET 開発者向け Dapr | Microsoft Docs(日本語)
准备步骤
基本上,我們將按照Dapr官方文件「Getting started with Dapr」的1至3進行操作。
-
- 安装 Dapr 命令行工具
-
- 初始化 Dapr
- 使用 Dapr API
前提条件
本次的操作系统是macOS。
安装Dapr CLI
在Dapr官方文档的”安装Dapr CLI”章节中,在”MacOS”标签页中,介绍了使用curl或brew命令进行安装的步骤。
因为我想要在我的责任下进行配置,所以我访问了”Binaries”选项卡中的”Dapr Release”,并选择并下载了macOS版本的”dapr_darwin_amd64.tar.gz”文件,然后使用tar命令进行了解压操作。
tar zxvf dapr_darwin_amd64.tar.gz
由于dapr命令已经部署,执行并确认其正常运行。
./dapr -v
CLI version: 1.2.0
Runtime version: 1.2.2
在本地环境中初始化Dapr。
Dapr公式文档中的「在本地环境中初始化Dapr」介绍了基于Docker前提下的初始化步骤。
我想在没有Docker的情况下运行,所以我将按照Dapr官方文档中的「如何在无Docker环境下运行自托管模式」进行初始化。
以最小单元初始化Dapr。
dapr init --slim
在这个时候,将在主目录下创建名为.dapr的文件夹。
$HOME/.dapr/
|
+--bin/
| |
| +--daprd
| +--dashboard
| +--placement
| +--web/
|
+--components/
+--config.yaml
Redis can be paraphrased in Chinese as “Redis是一个选项” (Redis is an option).
Redis 是一种开源的内存数据结构存储系统。
- Redis
根据Dapr的官方文档内容,为了保存状态,需要使用Redis,因此需要下载和设置Redis。
当阅读Redis官方文档《Redis快速入门》时,发现在下载Redis时需要使用wget命令,但是我的macOS系统中并没有安装wget命令,所以我决定通过Web浏览器进行下载。
Redis公式ドキュメントで紹介されていた「download.redis.io/redis-stable.tar.gz」リンクをクリックしてもダウンロードできなかったため、Redis公式サイトの「Download」に遷移して、Stable版の「Download X.Y.Z」をクリックしてダウンロードしました。
下载完成后,按照Redis官方文档的步骤进行解压和编译。
tar xvzf redis-X.Y.Z.tar.gz
cd redis-X.Y.Z
make
启动Redis服务器。
./src/redis-server
请打开一个新终端,运行Redis CLI来确认其正常工作。
./src/redis-cli ping
PONG
在Dapr公式文档的「在本地环境中初始化Dapr」部分,提到了使用「Zipkin」进行观测,并使用「Dapr placement」来处理Actor。
Zipkin是一个开源的分布式跟踪系统。
- OpenZipkin · A distributed tracing system
这段文字可以这样翻译成中文:
由于我的macOS操作系统没有安装Java 8及以上版本,因此无法在其上运行。而要开始安装Java,就需要写关于Java安装步骤的内容,这样一来,文章就不再是最简要了,所以我将不会在本次内容中涉及这部分。我会在以后的文章中提供链接。
你可以按照 Dapr 官方文档的说明,通过运行以下命令来启动 Dapr Placement:
$HOME/.dapr/bin/placement
Dapr和Redis的连接
在Dapr中,用于管理状态的功能是构建块”状态存储”。
Dapr与各服务的关联是通过在yaml文件中编写配置值来实现的。
这次情况下,在$HOME/.dapr/components/目录下创建一个名为”statestore.yaml”的文件。文件名可以随意取。
请复制并粘贴以下链接中介绍的已创建的YAML文件内容。
- Dapr の状態管理構成ブロック | Microsoft Docs – 構成
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: statestore
spec:
type: state.redis
version: v1
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
- name: actorStateStore
value: "true"
请参考以下内容以了解 Redis YAML 文件的详细信息。
- Redis | Dapr Docs
使用Dapr API
按照Dapr公式文档中的”使用Dapr API”的指引,尝试保存和读取状态。
Dapr将用于与应用程序通信的HTTP/gRPC接口和与之相关的构件合称为”Sidecar”。
使用 dapr run 命令来启动应用程序和 sidecar。
在Dapr公式文档的示例中,应用程序以”myapp”作为应用程序ID,并将边车端口号设置为”3500″,在没有应用程序的情况下启动Dapr。
./dapr run --app-id myapp --dapr-http-port 3500
在Dapr的状态存储中,可以通过键值对方式来管理数据。
在Dapr官方文档的示例中,使用JSON来表示数据。
[
{
"key": "name",
"value": "Bruce Wayne"
}
]
使用curl命令,通过指定URL的状态存储端点v1.0/state和元数据名称statestore,使用HTTP的POST方法发送并保存JSON数据。
curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Bruce Wayne"}]' http://localhost:3500/v1.0/state/statestore
使用curl命令向URL发送HTTP请求,指定状态存储的端点v1.0/state和元数据名称statestore,以及保存的数据的键项值name,从HTTP通信中获取保存在元数据名称statestore中的数据的键项值name的值。
curl http://localhost:3500/v1.0/state/statestore/name
"Bruce Wayne"
在交互模式下启动Redis CLI,并确认保存的数据。
./src/redis-cli
127.0.0.1:6379> keys *
1) "myapp||name"
127.0.0.1:6379> hgetall "myapp||name"
1) "data"
2) "\"Bruce Wayne\""
3) "version"
4) "1"
127.0.0.1:6379> exit
各个服务器的停机
使用 dapr 命令,通过指定应用程序ID来停止 Dapr。
./dapr stop --app-id myapp
使用Redis CLI停止Redis服务器。
./src/redis-cli shutdown
最后
最后
我先介绍一下我们如何在本地机器上快速感受到Dapr的鼓动,因为我们还有一个策划的截止日期。
如果您可以使用Docker,请务必遵循Dapr官方文档,并尝试使用dapr init命令进行操作。
想要安装Dapr和Dapr CLI,我们希望从Go的源代码进行构建!