一、Dapr是什么?

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

 

 在上图的第一行中,Dapr 为常见开发平台提供特定于语言的 Sdk。 Dapr 1.0 版包含对go、Node.js、Python、.NET、Java 等的支持。

 尽管语言特定的 Sdk 增强了开发人员体验,但 Dapr 不限平台。 在后台,Dapr 的编程模型通过标准 HTTP/gRPC 通信协议公开功能。 任何编程平台都可以通过其本机 HTTP 和 gRPC Api 调用 Dapr。

 图中心的蓝色框表示 Dapr 构建基块。 每个都公开您的应用程序可以使用的分布式应用程序功能。每个构建块都是独立的,这意味着您可以采用其中一个、多个或全部来构建应用

 Dapr体系结构:

  • 构建基块:可通过标准 HTTP 或 gRPC API 访问的模块化最佳实践

  构建块解决了构建弹性微服务应用程序中的常见挑战,并编纂了最佳实践和模式。 Dapr由一组构建块组成,并且具有可扩展性以添加新的构建块。

  构建基块从服务中抽象出分布式应用程序功能的实现:

   

  以下是 Dapr 提供的构建块类型:

构建块 终结点 说明
服务调用 /v1.0/invoke 服务调用使应用程序能够通过 Http 或 gRPC 消息形式相互通信。 Dapr 提供了一个终结点,它充当反向代理与内置服务发现的组合,同时内置分布式跟踪和错误处理。
状态管理 /v1.0/state 应用程序状态是应用程序想要保留在单个会话之外的任何内容。 Dapr 提供基于键 / 值的状态 API ,使用可插拔的状态存储进行持久化。
发布订阅 /v1.0/publish /v1.0/subscribe 发布/预订是松散耦合的消息传递模式,发送方 (或发布者) 将消息推送到订阅者预订的主题。 Dapr 支持应用程序之间的发布/订阅模式。
资源绑定 /v1.0/bindings 绑定提供一个外部云与本地服务或系统的双向连接。 Dapr 允许您通过 Dapr 绑定 API 调用外部服务,也可以通过已连接的服务发送的事件来触发应用程序。
Actors /v1.0/actors 参与者是孤立的独立计算单元,具有单线程执行。 Dapr提供了基于Virtual Actor模式的actor实现,该模式提供了单线程编程模型,并且在不使用actor时会对其进行垃圾回收。
可观测性 Dapr 系统组件和运行时记录 metrics,log 和 trace 以调试,操作和监视 Dapr 系统服务,组件和用户应用程序。
秘密 /v1.0/secrets Dapr 提供一个机密构建块 API ,并与 Azure Key Vault 和 Kubernetes 等机密商店集成,以存储机密。 服务代码可以调用密钥 API 从 Dapr 支持的密钥存储中检索密钥。
  • 组件:被用于构建块和应用程序的模块化功能

   Dapr 使用模块化设计,将功能作为组件来提供。 每个组件都有接口定义。 所有组件都是可插拔的,因此您可以将组件换为另一个具有相同接口的组件。

   Dapr 提供了以下组件类型:

组件类型
组件 说明
服务发现 由服务调用构建基块用来与宿主环境集成以提供服务到服务发现。
State 提供一个统一接口,用于与各种状态存储实现进行交互。
Pub/sub 提供一个统一接口,用于与各种消息总线实现进行交互。
绑定 提供一个统一接口,用于从外部系统触发应用程序事件,并调用具有可选数据有效负载的外部系统。
中间件 允许自定义中间件插入请求处理管道,并针对请求或响应调用其他操作。
机密存储 提供用于与外部机密存储(包括云、边缘、商业、开源服务)交互的统一接口。
  • Sidecar 体系结构

   Dapr 通过 sidecar 体系结构 公开其 构建基块和组件。 Sidecar 使 Dapr 能够与服务一起在单独的内存进程或单独容器中运行。 Sidecar 提供隔离和封装,因为它们不是服务的一部分,但已连接到该服务。 这种分离使每个 都拥有自己的运行时环境,并基于不同的编程平台进行构建

  

  • 托管环境

   Dapr可以托管在多个环境中,包括在Windows/Linux/macOS机器上自托管和Kubernetes

    • 自托管

     Dapr 运行一个单独的 sidecar 程序,在您的服务代码中可以通过 HTTP 或 gRPC 调用它。 每个运行的服务都有一个 Dapr 运行时进程 (或 sidecar) ,配置为使用状态存储, pub/sub,绑定组件和其他构建块。

     

    • 容器环境托管

     在托管在容器环境中(如 Kubernetes),Dapr 作为 sidecar 容器运行,和应用程序容器在同一个 pod 中。     

二、Dapr能干什么?

 开发人员习惯于 Web + 数据库应用架构(例如经典 3 层设计),但对天然支持分布式的微服务应用架构却感觉陌生。 成为分布式系统专家很难,并且你也不需要这么做。 开发人员希望专注于业务逻辑,同时希望平台为其提供可伸缩的、弹性的、可维护的和云原生架构的其他功能。

 这就是Dapr所要解决的。 Dapr 将构建微服务应用的 最佳实践 设计成开放、独立和模块化的方式,让你能够使用任意的开发语言和框架构建可移植的应用程序。 每个构建块都是完全独立的,您可以采用其中一个、多个或全部来构建你的应用。

 此外,Dapr 是和平台无关的,这意味着您可以在本地、Kubernetes 集群或者其它集成 Dapr 的托管环境中运行应用程序。 这使得您能够在云平台和边缘计算中运行微服务应用。

 使用 Dapr,您可以使用任何语言、框架轻松构建微服务应用,运行在任何地方。

 Dapr 的核心是帮助降低分布式微服务应用程序固有的复杂性。 它基于构建基块 API 的概念而构建。 Dapr 构建基块公开常见的分布式应用程序功能,例如状态管理、服务到服务调用和发布/子消息传送。 Dapr 组件位于构建基块下面,并为每项功能提供具体实现。 应用程序通过配置文件绑定到各种组件

三、Dapr环境安装?

  • 安装Dapr CLI脚手架工具

   Dapr CLI 是您用于各种 Dapr 相关任务的主要工具。 您可以使用它来运行一个带有Dapr sidecar的应用程序, 以及查看sidecar日志、列出运行中的服务、运行 Dapr 仪表板。

   后续案例将使用windows 下的自托管模式进行验证。

   1.下载最新dapr包:发布包 ;下载后解压到指定目录;并添加到环境变量中。

   2. 检查dapr是否安装成功,在命令行中输入:

dapr

    返回结果为以下结果则安装成功:

     

  • 初始化Dapr运行环境

   Dapr 与您的应用程序一起作为sidecar运行,在自托管模式下,这意味着它是您本地机器上的一个进程。 因此,初始化 Dapr 包括获取 Dapr sidecar 二进制文件并将其安装到本地.

   此外,默认初始化过程还创建了一个开发环境,帮助简化 Dapr 的应用开发。 这包括下列步骤:

  1. 运行一个用于状态存储和消息代理的Redis容器实例
  2. 运行一个用于提供可观察性的Zipkin容器实例
  3. 创建具有上述组件定义的 默认组件文件夹
  4. 运行用于本地演员支持的Dapr placement服务容器实例

   初始化

dapr init

--输出
Making the jump to hyperspace...
Installing runtime version 1.4.3
Downloading binaries and setting up components...
Downloaded binaries and completed components set up.
daprd binary has been installed to C:\Users\cwsheng\.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 -v
--输出
CLI version: 1.4.0
Runtime version: 1.4.3

  查看容器运行:

//命令
docker ps //输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11590b26a82d daprio/dapr:1.4.3 "./placement" 3 minutes ago Up 3 minutes 0.0.0.0:6050->50005/tcp, :::6050->50005/tcp dapr_placement
69127c7c31bc redis "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp dapr_redis
2a6305446b0e openzipkin/zipkin "start-zipkin" 8 minutes ago Up 8 minutes (healthy) 9410/tcp, 0.0.0.0:9411->9411/tcp, :::9411->9411/tcp dapr_zipki

  验证组件目录已初始化:

explorer "%USERPROFILE%\.dapr\"

   会看到以下目录:

   

 到此,dapr 环境已安装完成。

总结:   

 Dapr,就是一种分布式应用程序运行时。

Dapr-简介及环境搭建的更多相关文章

  1. 简介及环境搭建跑通Hello

    简介及环境搭建跑通Hello Spring Spring是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用.是为了解决企业应用程序开 ...

  2. Redis入门很简单之一【简介与环境搭建】

    Redis入门很简单之一[简介与环境搭建] 博客分类: NoSQL/Redis/MongoDB redisnosqlmemcached缓存中间件  [Redis简介] <一>. NoSQL ...

  3. 1.SpringMVC的简介和环境搭建

    SpringMVC的简介: SpringMVC 和 Struts一样是一个MVC框架,和Spring无缝连接,和struts2类似, Spring MVC属于SpringFrameWork的后续产品, ...

  4. 一、springBoot简介与环境搭建

    前言:学习计划 1.springBoot环境搭建 2.springBoot入门 3.srpingBoot整合Mybatis 4.springBoot整合Redis,Redis集群 5.springBo ...

  5. Monkey简介及环境搭建(1)

    简介:Monkey是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键输入,触摸屏输入,手势输入等),实现对正在开发的应用 ...

  6. PyQT5速成教程-1 简介与环境搭建

    本文由 沈庆阳 所有,转载请与作者取得联系! PyQt简介 一个良好的界面是人机交互中十分重要的一环. Python作为脚本语言,起初并未拥有GUI开发的部分.但随着其开放的扩展性,使得Python不 ...

  7. Mybatis简介、环境搭建和详解

    简介: 1.Mybatis  开源免费框架,原名叫iBatis,2010在google code,2013年迁移到github 2.作用: 数据访问层框架 2.1  底层是对JDBC的封装 3.myb ...

  8. go语言之行--简介与环境搭建

    一.Go简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后 ...

  9. 01 Python简介、环境搭建及包管理(一)

    一.Python简介 1. Python的特点: 是一门动态.解释型.强类型语言 动态:在运行期间才做数据检查(不用提前声明变量)- 静态语音(C/Java):编译时检查数据类型(编码时需要声明变量类 ...

  10. ①spring简介以及环境搭建(一)

    注*(IOC:控制反转.AOP:面向切面编程) spring官网:http://spring.io/ spring简介: spring是一个开源框架 spring为简化企业级应用开发而生,使用Spri ...

随机推荐

  1. plsql中数据生成工具data generator的使用

    使用数据库时,有时需要使用大量的数据,可以用PLSQL Developer提供的Data Generator工具, 这里记录一下工具的介绍及几个使用注意事项 1.工具介绍 功能入口位于 工具 菜单下, ...

  2. shell循环语句until

    until 条件 do 执行命令 done until 循环与 while 循环在处理方式上刚好相反. 当条件成立的时候,停止循环.

  3. Abp VNext权限定义

    在Shop.Application.Contracts项目中Permissions目录下ShopPermissions定义权限名 namespace Shop.Permissions { public ...

  4. web、html概念快速入门

    1.C/S和B/S 总结,理论上如果硬件不考虑(带宽.(图像资源加载)显卡等),B/S可以完全替代C/S: 2.静态资源和动态资源 其中,访问时动态资源,服务器后台也会通过视图解析器转换成静态资源,因 ...

  5. 从 1 开始学 JVM 系列 | JVM 类加载器(一)

    从 1 开始学 JVM 系列 类加载器,对于很多人来说并不陌生.我自己第一次听到这个概念时觉得有点"高大上",觉得只有深入 JDK 源码才会触碰到 ClassLoader,平时都是 ...

  6. java线程day-01

    综述:下面写的是我学习java线程时做的一些笔记和查阅的一些资料总结而成.大多以问答的形式出现. 一.什么是线程? 答:线程是一个轻量级的进程,现在操作系统中一个基本的调度单位,而且线程是彼此独立执行 ...

  7. vue报错 Uncaught TypeError: Cannot read property of null

    有可能是点击a标签,但是a标签有click事件,未阻止默认事件导致报错,开始都看不出来是什么错误

  8. DEDEcms手机网站添加详情内页上一页/下一页的翻页功能

    修改文件include/arc.archives.class.php文件. 1.搜索 function GetPreNext($gtype='') 2.将这个函数的所有内容替换为 function G ...

  9. 启动docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

    启动docker提示: docker: Got permission denied while trying to connect to the Docker daemon socket at uni ...

  10. three.js 元素跟随物体效果

    需求: 1.实现元素跟随指定物体位置进行位置变化 实现方案: 1--- Sprite 精灵 2  --- cavans 画图后创建模型贴图 3 --- CSS2DRenderer渲染方式 4 --- ...