1 简介

Dapr是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架。Dapr支持的语言很多,包括C++/Go/Java/JavaScript/Python/Rust/.NET/PHP等。

目前,可用的构建块如下:

构建块 说明
服务调用 跨服务调用允许进行远程方法调用(包括重试),不管处于任何位置,只需该服务托管于受支持的环境即可。
状态管理 独立的状态管理,使用键/值对作为存储机制,可以轻松的使长时运行、高可用的有状态服务和无状态服务共同运行在您的应用程序中。 状态存储是可插拔的,目前支持使用Azure CosmosDB、 Azure SQL Server、 PostgreSQL、AWS DynamoDB、Redis 作为状态存储介质。
发布订阅 发布事件和订阅主题。
资源绑定 Dapr的Bindings是建立在事件驱动架构的基础之上的。通过建立触发器与资源的绑定,可以从任何外部源(例如数据库,队列,文件系统等)接收和发送事件,而无需借助消息队列,即可实现灵活的业务场景。
Actors Actor模型 = 状态 + 行为 + 消息。一个应用/服务由多个Actor组成,每个Actor都是一个独立的运行单元,拥有隔离的运行空间,在隔离的空间内,其有独立的状态和行为,不被外界干预,Actor之间通过消息进行交互,而同一时刻,每个Actor只能被单个线程执行,这样既有效避免了数据共享和并发问题,又确保了应用的伸缩性。 Dapr 在Actor模式中提供了很多功能,包括并发,状态管理,用于 actor 激活/停用的生命周期管理,以及唤醒 actor 的计时器和提醒器。
可观测性 Dapr记录指标,日志,链路以调试和监视Dapr和用户应用的运行状况。 Dapr支持分布式跟踪,其使用W3C跟踪上下文标准和开放式遥测技术,可以轻松地诊断在生产环境中服务间的网络调用,并发送到不同的监视工具。
秘密 Dapr 提供了密钥管理,支持与公有云和本地的Secret存储集成,以供应用检索使用。

Sidecar与托管

Dapr是以Sidecar的架构模式来提供对应功能的,这也是Kubernetes中很常用的一种模式:

Dapr可以自托管,也可以托管在Kubernetes上,一般我们都会托管在Kubernetes上。

Dapr不是服务网格,它们有重叠的部分,也有各自独特的地方,具体如何选择,还要看具体需求。实际上是可以整合在一起使用的。

2 dapr本地安装

2.1 下载

我们直接从Github下载:https://github.com/dapr/cli/releases ,解压对某个目录,然后添加到环境变量即可:

export PATH=$PATH:/Users/larry/Software/dapr

测试一下,查看版本:

$ dapr --version
CLI version: 1.9.1
Runtime version: n/a

2.2 在本地环境初始化dapr

首先要确保已经安装了Docker,并成功启动。

$ docker --version
Docker version 19.03.13, build 4484c46d9d

接着执行以下命令进行初始化:

$ dapr init
Making the jump to hyperspace...
️ Container images will be pulled from Docker Hub
️ Installing runtime version 1.9.3
Downloading binaries and setting up components...
Dapr runtime installed to /Users/larry/.dapr/bin, you may run the following to add it to your path if you want to run daprd directly:
export PATH=$PATH:/Users/larry/.dapr/bin Downloading binaries and setting up components...
Downloaded binaries and completed components set up.
️ daprd binary has been installed to /Users/larry/.dapr/bin.
️ dapr_placement container is running.
️ dapr_redis container is running.
️ dapr_zipkin container is running.
️ Use `docker ps` to check running containers.
Success! Dapr is up and running. To get started, go here: https://aka.ms/dapr-getting-started

注意会在用户目录.dapr安装对应的文件。这时再查看version信息就不一样了:

$ dapr --version
CLI version: 1.9.1
Runtime version: 1.9.3

查看Docker容器情况,也看到启动了多个实例:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
110165beae0d daprio/dapr:1.9.3 "./placement" 2 minutes ago Up 2 minutes 0.0.0.0:50005->50005/tcp dapr_placement
346be0cdcb7e redis:6 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:6379->6379/tcp dapr_redis
42a8279db947 openzipkin/zipkin "start-zipkin" 3 minutes ago Up 3 minutes (healthy) 9410/tcp, 0.0.0.0:9411->9411/tcp dapr_zipkin

3 尝试一下dapr

3.1 启动一个应用

启动一个空白的应用如下,同时也会启动一个Sidecar,并启用3500端口:

dapr run --app-id myapp --dapr-http-port 3500

3.2 状态管理

我们刚才开启了3500端口,接下来可以更新状态,如下:

$ curl -X POST -H "Content-Type: application/json" -d '[{ "key": "name", "value": "Larry Deng"}]' http://localhost:3500/v1.0/state/statestore
$ curl -X POST -H "Content-Type: application/json" -d '[{ "key": "webSite", "value": "www.pkslow.com"}]' http://localhost:3500/v1.0/state/statestore

查看状态:

$ curl http://localhost:3500/v1.0/state/statestore/name
"Larry Deng" $ curl http://localhost:3500/v1.0/state/statestore/webSite
"www.pkslow.com"

因为状态是通过Redis来保存的,我们可以直接进去Redis查看:

$ docker exec -it dapr_redis redis-cli
127.0.0.1:6379> keys *
1) "myapp||name"
2) "myapp||webSite"
127.0.0.1:6379> hgetall "myapp||name"
1) "data"
2) "\"Larry Deng\""
3) "version"
4) "1"
127.0.0.1:6379> hgetall "myapp||webSite"
1) "data"
2) "\"www.pkslow.com\""
3) "version"
4) "1"
127.0.0.1:6379> exit

删除测使用以下接口:

curl -v -X DELETE -H "Content-Type: application/json" http://localhost:3500/v1.0/state/statestore/name

3.3 dapr dashboard

Dapr为大家提供了管理界面,以下命令来启动:

$ dapr dashboard
Dapr Dashboard running on http://localhost:8080

打开界面,可以看到我们刚才启动的Application:

还能查看一些组件、配置等信息:

我们还可以查看一些Tracing方面的信息,打开:http://localhost:9411/zipkin/

4 总结

因为本次实验只是一个本地版本的dapr,所以还有很多功能没有体验,我们后续有机会再继续学习。

dapr入门与本地托管模式尝试的更多相关文章

  1. 演示vsftpd服务匿名访问模式、本地用户模式的配置

    文件传输协议(FTP,File Transfer Protocol) 即能够让用户在互联网中上传.下载文件的文件协议,而FTP服务器就是支持FTP传输协议的主机,要想完成文件传输则需要FTP服务端和F ...

  2. linux虚拟机中FTP本地用户模式配置流程

    1.首先在自己虚拟机中安装vsftpd服务,可以先去yum中下载(当然你要有本地yum仓库) 输入命令: yum  install  vsftpd 下载完成之后打开vsftpd服务 输入命令:syst ...

  3. GitHub入门和项目托管

    (博主原创文章,转载请注明出处: http://www.cnblogs.com/xianlei/git) 前言: 本文目标: Git入门,能够在Github托管项目,能够进行实际项目开发 本文主要内容 ...

  4. 使用Vsftpd服务(匿名访问模式、本地用户模式)

    FTP协议占用两个端口号: 21端口:命令控制,用于接收客户端执行的FTP命令. 20端口:数据传输,用于上传.下载文件数据.. FTP数据传输的类型: 主动模式:FTP服务端主动向FTP客户端发起连 ...

  5. 33.vsftpd服务程序--本地用户模式

    1.针对本地用户模式的权限参数以及作用如下 [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 1 anonymous_enable=NO 2 local_ ...

  6. 2 weekend110的mapreduce介绍及wordcount + wordcount的编写和提交集群运行 + mr程序的本地运行模式

    把我们的简单运算逻辑,很方便地扩展到海量数据的场景下,分布式运算. Map作一些,数据的局部处理和打散工作. Reduce作一些,数据的汇总工作. 这是之前的,weekend110的hdfs输入流之源 ...

  7. 如何解决卸载McAfee时出现“处于托管模式时无法删除”问题(转)

    问题现象: 这几天在为客户终端换装杀毒软件时出现这么一个问题:在控制面板的添加或删除程序里面将“McAfee VirusScan Enterprise和 McAfee AntiSpyware Ente ...

  8. spark之scala程序开发(本地运行模式):单词出现次数统计

    准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...

  9. hadoop本地运行模式调试

    一:简介 最近学习hadoop本地运行模式,在运行期间遇到一些问题,记录下来备用:以运行hadoop下wordcount为例子. hadoop程序是在集群运行还是在本地运行取决于下面两个参数的设置,第 ...

  10. 携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发

    官方教程:https://github.com/ctripcorp/apollo/wiki/Java%E5%AE%A2%E6%88%B7%E7%AB%AF%E4%BD%BF%E7%94%A8%E6%8 ...

随机推荐

  1. nodered获取简单的时间

    1.添加simpletime 的节点 2. 添加一个inject节点用来每1s循环获取当点的信息 3.添加一个函数节点对simpletime发来的msg进行解析 var payload=msg;var ...

  2. webscraper 无代码爬虫

    官网:https://www.webscraper.io/web-scraper-first-time-install webscraper 简介 Web Scraper 是一款免费的,适用于普通用户 ...

  3. pycharm安装第三方的包

    这里以安装selenium为例子 在file下找到settings 在弹出的窗口点击python interpreter ,然后在右侧点击[+] 在弹窗顶部输入要导入的包名,在下方列表找到对应包后,点 ...

  4. echarts标题(title)配置

    var option = {         //标题         title : {             show:true,//显示策略,默认值true,可选为:true(显示) | fa ...

  5. 【笔记】P1606 [USACO07FEB]Lilypad Pond G 及相关

    题目传送门 建图 首先,根据题目,可以判断出这是一道最短路计数问题. 但是要跑最短路,首先要用他给的信息建图,这是非常关键的一步. 根据题意,我们可以想出以下建图规则: 起点或是一个空白处可以花费 \ ...

  6. 如何重启kafka

    修改配置文件 ps -ef |grep kafka kill (kafka进程号) 启动kafka [root@lecode-dev-001 bin]# ./kafka-server-start.sh ...

  7. [Android开发学iOS系列] TableView展现一个list

    TableView 基础 本文讲讲TableView的基本使用. 顺便介绍一下delegation. TableView用来做什么 TableView用来展示一个很长的list. 和Android中的 ...

  8. python安装request及更新pip

    今天在python中安装request模块时遇到了问题 爆出一大堆警告 最主要的是下面的 这里的解决方法就是更新pip: 直接使用系统给的pip升级指令好像不行 百度搜了一下,有两步 1.在C:\Py ...

  9. 一个宁静祥和没有bug的下午和SqlSession的故事

    1 背景 这是一个安静祥和没有bug的下午.作为一只菜鸡,时刻巩固一下基础还是很有必要的,如此的大好时机,就让我来学习学习mybatis如何使用. 这可和我看到的不一样啊,让我来看看项目里怎么写的. ...

  10. 大前端系统学-了解html

    标签: 使用尖括号包起来的就是标签,例如我们看到的  <html></html> 一对标签 <head>  开始标签 </head> 结束标签 < ...