Dapr(Distributed Application Runtime)
分布式应用运行时
Dapr is a portable, event-driven runtime that makes it easy for developers to build resilient, microservice stateless and stateful applications that run on the cloud and edge and embraces the diversity of languages and developer frameworks.
Dapr是一个可移植的,由事件驱动的 运行时,使开发人员可以轻松构建在云和边缘上运行并包含多种语言和开发人员框架的弹性,微服务无状态和有状态应用程序。
和微服务是一个意思。大的系统分成彼此独立的小的模块,模块和模块之间通过API互相通信,这样每个模块可以用不同的语言开发,一个模块升级的时候不会影响到别的模块。
这里的云和边缘指的是Dapr
的App
可以跑在AWS,Azure,GCP
等云服务器上,也可以跑在本地的服务器和远端的物联网终端。
事件驱动(event-driven)指的是什么?
可以理解成Dapr
在没有监听(Listening
)到请求到来的时候会一直处于待机的状态,什么也不做,只有监听到请求事件来了才开始处理。
可移植(portable)指的是什么?
指程序和运行的环境,用的中间件无关。
比如说原来跑在AWS上,现在想跑在Azure上,Nosql数据库原来用redis,现在想用etcd,消息中间件原来用rocketMQ,现在想用kafka,没问题,只要在Dapr
设定这边做一下切换,程序无需改动。
运行时(runtime)指的是什么?
运行时指的是Dapr的运行环境。
Dapr的控制平面(control panel
)会单独启动,同时你的程序在启动的时候Dapr
会在你的程序上挂一个Sidecar
(所谓的边车模式,daprd,runtime),你的程序就可以通过Sidecar
和Dapr
的控制面。所有挂有Dapr Sidecar
的各个微服务之间就可以互相调用了,也可以通过Dapr
调用各种中间件。
Note:
有弹性(resilient
)指的是什么?
指的是可以从故障中自动恢复的能力,比如说超时,重试等。不会卡住或陷入一种死循环。
无状态和有状态(stateless and stateful)指的是什么?
无状态指的是一个微服务经过计算得到结果,返回给调用者以后这个值在微服务这边是不保存的(DB,内存等)。有状态指的是在微服务这边要把这个结果保存起来。
支持语言的多样性(the diversity of languages)指的是什么?
Repo | Description |
---|---|
Go-sdk | Dapr SDK for Go |
Java-sdk | Dapr SDK for Java |
JS-sdk | Dapr SDK for JavaScript |
Python-sdk | Dapr SDK for Python |
Dotnet-sdk | Dapr SDK for .NET Core |
Rust-sdk | Dapr SDK for Rust |
Cpp-sdk | Dapr SDK for C++ |
PHP-sdk | Dapr SDK for PHP |
开发人员框架(developer frameworks)指的是什么?
指的是Dapr跟框架无关,你可以把各种语言的各种框架(比如java的spring boot
框架)和Dapr(API或者SDK)混合使用。
开发人员可以对dapr
中的功能进行选择,比如:可以选使用dapr
的状态存储,但是不使用dapr
的发布订阅.
Dapr
向每个计算单元注入一个边车(容器或进程)。边车与事件触发器进行交互,并通过标准的HTTP或gRPC协议与计算单元通信。这使得Dapr
能够支持所有现有和未来的编程语言,而不需要导入框架或库。
Dapr通过标准的HTTP或gRPC接口提供内置的状态管理、可靠的消息传递(至少一次交付)、触发器和绑定。这使得您可以按照相同的编程模式编写无状态、有状态和类似Actor
模式的服务。也可以自由选择一致性模型、线程模型和消息传递模式。
Dapr原生运行在Kubernetes上,在你的机器上以自托管二进制的形式运行,在物联网设备上运行,或者以容器的形式运行,可以注入到云端或企业内部的任何系统中。
Dapr使用可插拔的组件状态存储和消息总线(如Redis以及gRPC)来提供广泛的通信方法,包括使用gRPC直接dapr到dapr,以及具有保证交付和至少一次语义的异步Pub-Sub。