一.什么是 Dapr
官方概述:Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架,Dapr 可帮助你应对构建微服务所带来的挑战,并使你平台的代码是无感知。
概述有点抽象,个人再补充一下:
- Dapr 为分布式应用运行时(Distributed Application Runtime)的英文单词缩写,是由微软在2019 年 10 月开源的项目。
- Dapr 以 sidecar 架构方式,为业务提供基础设施功能例如:绑定、订阅发布、服务发现等,其API的调用方式为 HTTP 和 gRPC。
- 为了能让开发人员快速上手,官方提供了主流语言 Go、Java、Python、.Net 等的SDK使得开发者可以方便 Dapr 的使用。
sidecar 模式是一种将通用的应用功能从应用程序剥离出来作为单独进程的设计模式。
在k8s环境下,sidecar指的是在同一 pod 中,除了承载主要业务逻辑的容器外,还运行一个称为 sidecar 的辅助容器,提供一些通用功能支持。
1.1 解决什么问题
-
解耦基础设施和业务,通过交付 sidecar 的形式来提供基础设施,让业务侧开发可以专注于业务逻辑。
-
解决中间件 sdk 大批量升级影响业务侧开发进度问题
-
解决基础设施相关的 jar 包和业务侧的 jar 冲突问题
1.2 发布历史
简要介绍一下
- 2019年10月推出了 Dapr 的0.1 版发布。
- 2021年2月17日,宣布 Dapr v1.0。从 2019 年 10 月的 114 名贡献者增加到今天的 700 名,在短短 16 个月内增长了 6 倍以上。
- 目前为止,发布版本为v1.5,自 Dapr v1.0 发布以来的第五次小版本更新。值得注意的是,在这期间支持了很多新组件,同时为了保证提供稳定的组件,增加了单元测试、一致性测试等。
需要详细了解的发布历史可查看官方 blog:blog.dapr.io/posts
二.dapr功能
- 服务之间调用 (Service-to-service invocation) 。支持服务之间的调用,包括重试机制,通过解析组件 mDNS 进行负载均衡。服务调用链路如下:
-
状态管理 (State management)。这个名词有点抽象,通过日常的场景理解一下意思:当应用需要持久化数据时,把对应的 key/value 数据通过 API,保存或更新到状态储存组件中,例如:redis、mysql 等。服务调用链路如下:
-
发布订阅 (Publish and subscribe)。就是发布服务发布消息后,由订阅服务进行消息消费的过程。服务调用链路如下:
-
资源绑定 (Resource bindings)。如果换个名词叫事件绑定,大家基本就能理解了。绑定分为输入绑定和输出绑定。输入、输出都是相对应用而言。
- 输入绑定即外部事件触发调用应用程序。例如:你调用文件服务进行文件处理,处理完成后进行回调。回调事件就是输入绑定。
- 输出绑定即应用程序触发调用事件。程序错误过多,通过发邮件通知。发邮件就是输出绑定。
-
Actors。actor 模式 阐述了 Actors 为最低级别的“计算单元”。 换句话说,您将代码写入独立单元 ( 称为 actor) ,该单元接收消息并一次处理消息,而不进行任何类型的并行或线程处理。通俗点讲就是并发情况下显式加锁性能不佳、容易出错、导致死锁,actor 模式采用了分区单线程机制能更高效解决并发问题。
-
可观测性 (Observability)。主要包括3个方面:链路追踪 tracing、日志管理 logging、指标管理 metrics。
-
秘钥管理 (Secrets management)。支持与公有云和本地的 Secret 存储集成,以供应用检索使用
-
配置管理 (Configuration)。类似于 Apollo、Nacos、Consul 等配置中心的功能。目前官方提供基于 Redis 的 demo 如下:
三.Dapr安装
3.1 Dapr Cli 安装
官方按照的提供多种安装方式:Linux、Windows、MacOS、Binaries 4种方式安装客户端。
Linux 安装方式:
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
如果 Linux 模式安装没有选择版本,安装过程中还报错如下:
如何解决?
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O v1.5.0 | /bin/bash
加上这个版本号,就不会报错了。
当然,你还可以选择
Binaries 的安装方式:
- 下载文件
wget https://github.com/dapr/cli/releases/download/v1.5.0/dapr_linux_amd64.tar.gz
- 解压文件
tar -zxvf dapr_linux_amd64.tar.gz
- 移动客户端到 bin
mv dapr /usr/local/bin
- init 本地 dapr
dapr init
- 安装成功 cli 验证
dapr --version
- 卸载 cli
dapr uninstall && rm /usr/local/bin/dapr
3.2 k8s 安装 dapr
选择默认 k8s 安装 Dapr,命令如下
dapr init -k
但是请求 api.github.com/repos/dapr/… 一直没成功。
选择 helm 方式安装 Dapr
- 添加 helm 的 Dapr 仓库
helm repo add dapr https://dapr.github.io/helm-charts/
- 更新 helm 仓库
helm repo update
- 查询仓库 Dapr 对应的版本
helm search repo dapr --devel --versions
- 创建 k8s 的 namespace
kubectl create namespace dapr-system
- 安装对应版本的 Dapr
helm upgrade --install dapr dapr/dapr --version=1.5.0 --namespace dapr-system --wait
- 验证 k8s 内是否安装成功,全部 STATUS 都是 Running 代表成功
kubectl get pods --namespace dapr-system
- helm 卸载 Dapr
helm uninstall dapr --namespace dapr-system
四.小结
以上就是关于 Dapr 介绍、Dapr 的功能和 Dapr 的安装,后续会针对 Dapr 功能,以 java demo 的形式进行讲解。
参考文档:docs.dapr.io/
推荐阅读
kubernetes scheduler 源码解析及自定义资源调度算法实践
招贤纳士
政采云技术团队(Zero),一个富有激情、创造力和执行力的团队,Base 在风景如画的杭州。团队现有300多名研发小伙伴,既有来自阿里、华为、网易的“老”兵,也有来自浙大、中科大、杭电等校的新人。团队在日常业务开发之外,还分别在云原生、区块链、人工智能、低代码平台、中间件、大数据、物料体系、工程平台、性能体验、可视化等领域进行技术探索和实践,推动并落地了一系列的内部技术产品,持续探索技术的新边界。此外,团队还纷纷投身社区建设,目前已经是 google flutter、scikit-learn、Apache Dubbo、Apache Rocketmq、Apache Pulsar、CNCF Dapr、Apache DolphinScheduler、alibaba Seata 等众多优秀开源社区的贡献者。如果你想改变一直被事折腾,希望开始折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊……如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的技术团队的成长过程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 zcy-tc@cai-inc.com
微信公众号
文章同步发布,政采云技术团队公众号,欢迎关注