100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...

flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...

时间:2020-10-19 21:17:52

相关推荐

flask与js交互的示例代码_dapr实战(1):dapr locally环境的搭建和部署官方的Hello world示例...

引言

dapr是多运行时微服务架构(及机甲架构)的参考实现,关于多运行时微服务架构的介绍,可以参考敖小剑老师的两篇文章:

[译]多运行时微服务架构

Mecha:将Mesh进行到底

为了探索dapr的使用,我们必须有一个环境,为了能快速体验dapr的使用,在本文中,我们将阐述如何搭建一个dapr的locally环境,并在其上运行dapr的hello world示例代码进行验证

dapr的安装

这次搭建采用的操作环境信息如下:

cat /proc/versionLinux version 4.4.0-177-generic (buildd@lgw01-amd64-035) (gcc version 5.4.0 0609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #207-Ubuntu SMP Mon Mar 16 01:16:10 UTC

# cat /etc/os-releaseNAME="Ubuntu"VERSION="16.04 LTS (Xenial Xerus)"ID=ubuntuID_LIKE=debianPRETTY_NAME="Ubuntu 16.04 LTS"VERSION_ID="16.04"HOME_URL="/"SUPPORT_URL="/"BUG_REPORT_URL="/ubuntu/"UBUNTU_CODENAME=xenial

安装docker

安装方式,在这里采用了阿里提供一键安装脚本

curl -fsSL | bash -s docker --mirror Aliyun

安装完成后,我们查看一下docker的信息,如下:

root@ubuntu:/home/dapr# docker versionClient: Docker Engine - Community Version: 19.03.9 API version: 1.40 Go version: go1.13.10 Git commit: 9d988398e7 Built: Fri May 15 00:25:34 OS/Arch: linux/amd64 Experimental:falseServer: Docker Engine - Community Engine: Version:19.03.9 API version:1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 9d988398e7 Built: Fri May 15 00:24:07 OS/Arch:linux/amd64 Experimental:false containerd: Version:1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version:1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version:0.18.0 GitCommit: fec3683root@ubuntu:/home/dapr#

安装dapr

dapr提供了其cli工具,通过 dapr 的cli就可以在本地主机上完成dapr组件的安装,如下:

wget -q /dapr/cli/master/install/install.sh -O - | /bin/bash

dapr的cli工具安装完成后,就可以安装dapr的相关组件了,如下:

dapr init⌛ Making the jump to hyperspace...Downloading binaries and setting up components✅ Success! Dapr is up and running

在这个初始化的过程中,下载了相关dapr镜像和daprd这个二进制包,如下:

find / -name *dapr*/usr/local/bin/daprd# docker ps82cfe68fe555 daprio/dapr "./placement" 2 days agoUp 2 hours0.0.0.0:50005->50005/tcp dapr_placement

其中,daprd就是我们业务程序与之交互的sidecar(dapr runtime),而placement是负责 dapr actor机制处理的容器,其相互关系如下:

部署官方的Hello world示例

dapr的Hello world示例中,有两个示例场景,如下:

场景一:服务端(node开发)是一个REST服务,使用者采用rest工具,与其交互,将相关信息存入到redis中,并支持从redis中读取已经存放的数据场景二:服务端(node开发)是一个REST服务,客户端(python程序)也使用dapr来部署,二者交互,完成将相关信息存入到redis中,并从redis中读取已经存放的数据

在开始部署这两个场景前,我们需要先将dapr的官方实例代码下载到本地,进行解压,如下:

# wget /dapr/samples/archive/v0.7.0.tar.gz # tar -xvf v0.7.0.tar.gz

注:由于我当前使用的dapr的0.7.0 版本,所以下载的实例也是 0.7.0的,大家在试验时,一定要注意版本匹配

场景一

这个场景的示意图如下:

步骤一:通过dapr来运行我们的node的程序

进入示例的代码目录

# cd samples-0.7.0/# ls1.hello-world 5.bindings CONTRIBUTING.md2.hello-kubernetes 6.functions-and-keda LICENSE3.distributed-calculator 7.middlewareREADME.md4.pub-sub 8.observability samples-diagrams.pptx# cd 1.hello-world/

安装node的相关依赖

root@ubuntu:/home/dapr/samples-0.7.0/1.hello-world# npm installnode_server@1.0.0 /home/dapr/samples-0.7.0/1.hello-world├─┬ body-parser@1.19.0│ ├── bytes@3.1.0│ ├── content-type@1.0.4│ ├─┬ debug@2.6.9......npm WARN node_server@1.0.0 No repository field.

通过dapr来运行node进程

dapr run --app-id nodeapp --app-port 3000 --port 3500 node app.jsWARNING: Redis State Store file is being overwritten: /home/dapr/samples-0.7.0/1.hello-world/components/statestore.yamlWARNING: Redis PubSub file is being overwritten: /home/dapr/samples-0.7.0/1.hello-world/components/pubsub.yamlℹ️ Starting Dapr with id nodeapp. HTTP Port: 3500. gRPC Port: 35158......ℹ️ Updating metadata for app command: node app.js✅ You're up and running! Both Dapr and your app logs will appear here.

这里对启动的参数做一个简单的说明,--app-id为这个应用在dapr中指定一个id,--app-port是node对外的监听端口,而port是dapr runtime为这个服务而提供的一个对外端口,我们通过Linux命令来验证一下,如下:

# lsof -i:3000COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnode 2969 root 10u IPv6 120380900t0 TCP *:3000 (LISTEN)# lsof -i:3500COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEdaprd 2968 root 15u IPv4 120382650t0 TCP *:3500 (LISTEN)root@ubuntu:~#

步骤二:通过Postman来访问我们的node程序

调用rest接口,插入数据

如下图:

在这里我们可以看到,访问的端口是 3500,就是 由 daprd监听的端口 2. 通过redis工具,查看redis中的数据

redis中的数据

调用rest接口,获取已经插入的数据 如下图:

小结

通过场景一的演示,我们看到postman与drapd交互,然后drapd再与node程序交互,最终将数据插入到了redis中

场景二

场景二将在场景一的基础上,将postman也换成一个python程序,而python也是用dapr进行部署,如图所示:

步骤一:通过pip来安装python程序的依赖包

# pip3 install requestsWARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.Collecting requests Downloading /packages/1a/70/1935c770cb3be6e3a8b78ced23d7e0f3b187f5cbfab4749523ed65d7c9b1/requests-2.23.0-py2.py3-none-any.whl (58kB) 100% |████████████████████████████████| 61kB 429kB/s.........

步骤二:通过dapr将python程序运行起来

新启动一个终端,在这个终端用dapr启动这个python程序(这个程序也是在官方的1.hello-world中)

# dapr run --app-id pythonapp python3 app.pyℹ️ Starting Dapr with id pythonapp. HTTP Port: 40182. gRPC Port: 41868.....

使用dapr运行这个python程序后,在node的终端中就可以看到如下打印输出:

== APP == Got a new order! Order ID: 1== APP == Successfully persisted state.== APP == Got a new order! Order ID: 2== APP == Successfully persisted state.== APP == Got a new order! Order ID: 3

总结

在这篇文章我们搭建了dapr的单机环境,并通过官方示例代码,体验了dapr的使用方式,但是我们对Dapr还是存在很多不明白的地方,在下一篇中,我将用go和java来重写一下这个hello world,来进一步深入Dapr

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。