分布式应用运行时Dapr

摘要:
通过使用Dapr,您可以轻松地以任何语言构建与平台无关的微服务应用程序;官方称,主流语言Go、Java、Python SDK(如Net)使开发人员更容易使用Dapr;API、构建块和组件构建块目前,Dapr提供了以下七个与分布式应用程序开发密切相关的构建块:

Dapr为微软开源的一个用于构建分布式应用的框架,Dapr为分布式应用运行时(Distributed Application Runtime)的英文单词缩写;Dapr提供了分布式应用所依赖的执行环境,分布式运行时包括了:服务通讯、数据持久化、资源绑定、pub-sub、Actors、密钥等,通过使用Dapr可以使用任何语言轻松构建与平台无关的微服务应用;

分布式应用运行时Dapr第1张

Dapr通过HTTP/gRPC API与语言无关的暴露了分布式的应用调用,官方提供了主流语言Go、Java、Python、.Net等的SDK使得开发者可以方便Dapr的使用;
  Dapr使用了sidecar模式公开其Api,应用程序无需包含任何的Dapr运行时代码,使得应用逻辑与Dapr运行时分离;

核心结构

Dapr核心包括三部分:API、Building Blocks、Components

Building Blocks(构建块)
目前Dapr中提供了与分布式应用开发息息相关的下列7种构建块:
  service-to-service invocation 服务间调用
  State management 状态管理
  Publish and subscribe 发布订阅
  Resource bindings 资源绑定
  Actors Actors实现
  Observability 可观测性
  Secrets 密钥

Components(组件)
  Dapr使用模块化设计将功能作为组件提供,定义组件接口,所有组件都可插拔;构建块也可使用任何组件组合;
  Dapr也提供了多种组件:状态组件、服务发现组件、中间件组件、Pub/Sub代理组件、绑定组件、密钥存储组件;

Dapr API

Dapr使用API暴露了分布式能力,将分布式原语映射到API上使之应用可以轻松的的使用成为分布式能力,开发者无需在去引用各种组件;Dapr提供了HTTP1.1/REST 和 HTTP2/gRPC两种API;
  应用只需发起API调用,无论是服务调用、数据存储或是消息发布,存储后端是redis还是Mysql应用完全不用关心,都是相同的API;

三者的关系:

API:统一标准暴露组件块
Building Blocks(组件块):分布式能力的抽象
Components(组件):分布式能力的具体实现

Dapr部署模式

分布式应用运行时Dapr第2张

Dapr支持两种部署模式:宿主机模式、Kubernetes容器化部署模式;
  Dapr使用sidecar模式提供Building blocks的能力,当部署模式为宿主机模式时每个应用服务都有一个Dapr运行时进程(sidecar进程)为一个独立的进程,模式为容器化模式时sidecar container将被注入到业务Pod中;

宿主机模式

部署默认情况下,也需要使用Docker。
将在Docker中启动三个容器:placement、zipkin、redis容器;
  Placement容器:用于actor 分布方案和关键范围设置。
  Redis容器:配置为作为状态管理和发布/订阅的默认组件。
  Zipkin容器:用于诊断和跟踪的Zipkin容器。
使用Dapr slim模式将不依赖于Docker,将启动两个独立进程:Daprd、Placement;

Dapr安装

1、下载Dapr cli
https://github.com/dapr/cli/releases
2、初始化Dapr
dapr init

分布式应用运行时Dapr第3张

3、验证Dapr

分布式应用运行时Dapr第4张
分布式应用运行时Dapr第5张

Dapr Hello World

启动 Dapr sidecar,它将在端口 3500 上监听名为 myapp 的空白应用程序:

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

提交状态数据:

 curl -X POST -H "Content-Type: application/json" -d '[{ "key": "dapr", "value": "Hello World"}]' 
 http://localhost:3500/v1.0/state/statestore

获取状态:

 curl http://localhost:3500/v1.0/state/statestore/dapr  
 Hello World  

查看redis中所存储的数据:

docker exec -it dapr_redis redis-cli
hgetall "myapp||dapr"

分布式应用运行时Dapr第6张

参考资料
Dapr | 云原生的抽象与实现(https://mp.weixin.qq.com/s/4HHMVxa3l_gCsltoX4euyg)
dapr docs(https://docs.dapr.io/)

免责声明:文章转载自《分布式应用运行时Dapr》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇三、 数据模型概念indy tcpclient发送和接收下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Azure Data Factory(一)入门简介

一,引言   今天分享一个新的Azure 服务-----Azure Data Factory(Azure 数据工厂),怎么理解,参考根据官方解释-----数据工厂解释:大数据需要可以启用协调和操作过程以将这些巨大的原始数据存储优化为可操作的业务见解的服务。 Azure 数据工厂是为这些复杂的混合提取-转换-加载 (ETL)、提取-加载-转换 (ELT) 和...

解析ISO8583报文实例

本篇文章参考了中国银联POS终端规范,所以如有不明白的可以去我的资源里面下载。现在我们有ISO8583报文如下(十六进制表示法):60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 00 00 00 00 00 00 01 00 03 49 02 10 00 12 30...

Amazon DynamoDB 全局表

Amazon DynamoDB 全局表 为部署多区域、多主机数据库提供了完全托管的解决方案,而不必构建和维护您自己的复制解决方案。在创建全局表时,指定要在其中提供表的 AWS 区域。DynamoDB 执行在这些区域中创建相同的表并将持续数据更改传播到所有这些表所必需的所有任务。 为说明全局表的一个使用案例,假设您有一个大型客户群跨越三个地理区域 — 美国东...

MyBatis/Ibatis中#和$的区别

MyBatis/Ibatis中#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中。如:orde...

spark之单词统计

spark之单词统计 1.Java语言开发单词统计 package com.wordCountdemo2; import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaRDD; i...

Apache CarbonData 2.0 开发实用系列之一:与Spark SQL集成使用

【摘要】 在Spark SQL中使用CarbonData 【准备CarbonData】 在浏览器地址栏输入以下链接,点击"download"按钮下载已经准备好的CarbonData jar包 链接:https://github.com/QiangCai/carbonjars/blob/master/master/apache-carbondata-2.1....