
分布式应用运行时 Dapr:万物皆可 API
Dapr 分布式应用运行时 Distributed Application Runtime 的首字母缩写。有关多运行时,可以看下 Bilgin Ibryam 的 Multi-Runtime Microservices Architecture,不想看英文的可以看下我之前的翻译。 Dapr 是一个分布式系统工具包,通过提供 API 实现应用程序与外围组件的解耦合,让开发人员更加聚焦于业务逻辑的研发。解耦也是与传统 SDK 的很大区别,能力不再是通过应用程序中加入库的方式提供,而是通过应用附近的边车(sidecar)运行时提供(sidecar 不是广为人知的服务网格 sidecar - pod 中的容器,而是广泛使用在系统软件设计中的一种模式,比如操作系统的 initd、日志采集组件,甚至是 Java 中的多线程。)。因此这里说的 Dapr sidecar 可能是个独立的进程,也可能是 pod 中的一个容器。 在 Dapr 中我们可以看到很多常见 SDK 的能力: 如 SpringCloud、Netflix OSS 的 服务调用,以及超时、熔断、重试等 弹性策略 如 Spring Data KeyValue 一样提供 状态存储 的抽象,简化各种持久存储的访问 如 Kafka、NATS、MQTT 等消息代理,提供 发布/订阅 抽象供服务通过消息进行通信 如 Kafka、MQTT、RabbitMQ 提供以事件触发应用的抽象:绑定 如 Redis 一样的 分布式锁 如 Consul、Kubernetes 等的 名称解析 … 以上能力都是通过 HTTP 和 gRPC API 暴露给应用,这些 API 在 Dapr 中被叫做 构建块(building blocks),并且也 仅提供抽象,也就是说你可以随意替换底层实现(Dapr 中也叫做 组件)而无需修改任何应用代码。