Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到发布 V1.0 版本时候github star 数达到了 1.2 万,超过同期的 kubernetes、istio、knative 等,发展势头迅猛,业界关注度非常高,目前最新版本是v1.2.2。

Dapr 这个词是是 「Distributed Application runtime」的首字母缩写,非常精炼的解释了 dapr 是什么: 一个为应用提供分布式能力的运行时。

Dapr是一种可移植的,事件驱动的,无服务器运行时,用于构建跨云和边缘的分布式应用程序。

关键字:可移植,事件驱动,弹性,有状态和无状态,云和边端,语言无关,框架无关。

这些主要是 dapr 的愿景,核心是要提供一个有标准,可配置 ,包含各种分布式能力的运行时。

什么是分布式应用运行时?

一般是指用来支持程序运行的实现。描述的是程序正常执行需要的支持:库、命令和环境等。

Dapr 架构

任何语言,任何框架,任何地方

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

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

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

云平台和边缘计算的微服务构建模块

每个构建模块都是独立的,这意味着可以采用其中一个、多个或全部来构建应用。 目前,可用的构建块如下:

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

Dapr 所提供的「分布式应用运行时」,是应用程序运行所需分布式能力的实现,这些能力涵盖服务通信、数据持久化、外部 binding,pub-sub 等等。比如服务调用需要有容错重试机制,比如一个数据持久化操作希望使用乐观锁,比如发布消息是要求有投递保证。

​        长期以来,这些功能的适配都是集成在业务代码里的。dapr 创新之处是将这些功能,从原来 application runtime 中拆分出来,作为一个独立的 runtime。dapr runtime 也满足上面说到的 runtime 的特征。

Sidecar模式

Dapr以 sidecar 架构的方式公开其API,可以是容器,也可以是进程,不需要应用代码包含任何 Dapr 运行时代码。 这使得 Dapr 与其他运行时的集成变得容易,在应用逻辑层面做了隔离处理,提高了可扩展性。

目的:快速落地微服务,专注于业务开发

托管环境

自托管

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

Kubernetes 托管

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

在 Kubernetes 中, dapr-sidecar-injectordapr-operator 服务提供一流的集成,以将 Dapr 作为 sidecar 容器启动在与服务容器相同的 pod 中 ,并为在集群中部署的 Dapr 组件提供更新通知。dapr-sentry 服务是一个认证中心,它允许 Dapr sidecar 实例之间的相互 TLS 进行安全数据加密。

在 Kubernetes 集群中部署和运行启用 Dapr 的应用程序非常简单,只需向 deployment 中添加一些注解。

开发者语言 SDK

为了让不同语言使用 Dapr 更加自然,它还包含了语言特定的 SDK:

  • C++

  • Go

  • Java

  • JavaScript

  • Python

  • Rust

  • .NET

  • PHP

    这些 SDK 通过特定语言 API 来暴露 Dapr 构建块的功能,而不是调用 http/gRPC API。 这使您能够以自己选择的语言编写无状态和有状态功能和 actors 的组合。 由于这些 SDK 共享 Dapr 运行时,因此您可以获得跨语言 actor 和功能支持。

开发框架

Web

语言 框架 说明
.NET ASP.NET 带来状态路由控制器,从而完成来自其他应用的 发布/订阅 构建块。 也可以利用 ASP.NET Core gRPC 服务。
Java Spring Boot
Python Flask
Javascript Express
PHP 可以使用 Apache, Nginx, 或 Caddyserver 进行托管

安装Dapr

wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
dapr  //查看dapr是否安装成功

看到控制台输出以下信息,dapr安装成功

初始化 Dapr 分布式运行时

 dapr init --runtime-version 1.0.0

使用较为稳定的1.0版本

docker ps

看到以下三个容器运行成功,dapr分布式运行时安装成功

daprio 则为运行时环境,redis、zipkin是dapr自带的。

Dapr简单入门(一)相关推荐

  1. BizTalk 2006 简单入门示例程序(附源项目文件下载)

    BizTalk 2006 简单入门示例程序(附源项目文件下载) 为初学BizTalk Server 2006的开发人员,提供一个简单入门的示例程序,包括一个Receive Port.Send Port ...

  2. python如何读取mat文件可视化_python Matplotlib数据可视化(1):简单入门

    1 matplot入门指南 matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求.但功能丰富从另一方面来说也意 ...

  3. ARM NEON 编程简单入门1

    原文:http://blog.csdn.net/silentob/article/details/72954618  ARM NEON 编程简单入门1 NEON简介 NEON是适用于ARM Corte ...

  4. Python 简单入门指北(二)

    Python 简单入门指北(二) 2 函数 2.1 函数是一等公民 一等公民指的是 Python 的函数能够动态创建,能赋值给别的变量,能作为参传给函数,也能作为函数的返回值.总而言之,函数和普通变量 ...

  5. EChart.js 简单入门

    EChart.js 简单入门 最近有一个统计的项目要做,在前端的数据需要用图表的形式展示.网上搜索了一下,发现有几种统计图库. MSChart   这个是Visual Studio里的自带控件,使用比 ...

  6. 【我的区块链之路】- Hyperledger fabric的简单入门(四)链码的编写及调试

    [我的区块链之路]- Hyperledger fabric的简单入门(四)链码的编写及调试       之前的文章中我们有讲过了fabric的一些核心的配置文件的选项说明,讲过fabric 的网络启动 ...

  7. 基于vue-cli、elementUI的Vue超简单入门小例子

    基于vue-cli.elementUI的Vue超简单入门小例子 这个例子还是比较简单的,独立完成后,能大概知道vue是干嘛的,可以写个todoList的小例子. 开始写例子之前,先对环境的部署做点简单 ...

  8. 【java开发系列】—— spring简单入门示例

    回顾 1 JDK安装 2 Struts2简单入门示例 前言 作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已.这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控 ...

  9. JAVA Bean和XML之间的相互转换 - XStream简单入门

    JAVA Bean和XML之间的相互转换 - XStream简单入门 背景介绍 XStream的简介 注解简介 应用实例 背景介绍 我们在工作中经常 遇到文件解析为数据或者数据转化为xml文件的情况, ...

最新文章

  1. ovirt官方安装文档 附录F
  2. android里的editText怎么用,Android自定义控件EditText使用详解
  3. 如何阻止子元素触发父元素的事件
  4. setDAta 字符串拼接
  5. 【自动化__持续集成】___java___static
  6. 我在实际工作中用的最多的 git 命令
  7. C++11向线程函数传递参数
  8. require引入js vue_请教 关于使用require 引入vue 和公共js的问题
  9. python引用传递_python 是值传递还是引用传递 知乎
  10. C语言 结构体的初次运用
  11. 张斌教授评《你的知识需要管理》
  12. 基础编程题目集 7-4 BCD解密 (10 分)
  13. spring框架 c p标签的区别_Spring学习初体验
  14. Qt widgets deeps--烧鸡
  15. 小米电视4a刷鸿蒙,小米电视4A 删除内置应用及其去广告攻略
  16. Java多线程间的数据共享
  17. 【ArcGIS|空间分析】数据采集处理(全国大学生GIS技能大赛试题)
  18. 【IoT】STM32 启动代码汇编指令详解
  19. 虚拟机安装win10 x64系统
  20. mysql存储过程(通俗易懂)

热门文章

  1. Machine Learning experiment2 Multivariate Linear Regression 详解+源代码实现
  2. html元素的 height、clientHeight和offsetHeight之间的区别
  3. PCIe扫盲——基地址寄存器(BAR)详解
  4. 【巨人的肩膀】阿里技术专家详解DDD
  5. Windows编程-GetModuleHandle,GetCurrentProcess,OpenProcess的区别?
  6. shell脚本中的$用法
  7. Alpha GO的诞生!DeepMind 用 AI发现「蛋白质折迭」规律
  8. 前端中国标准时间转化为yyyy-MM-dd HH:mm:ss
  9. java 外部排序_完整java实现外部排序
  10. java变量默认值_Java变量的默认值和初始化