dapr 是解决什么问题的,用和不用dapr 的区别是什么

773 阅读2分钟

dapr 是解决什么问题的,用和不用dapr 的区别是什么

ChatGPT said:

这是一个非常核心的问题。我们可以从 Dapr 是什么、它解决什么问题,以及用和不用 Dapr 的差异这三点来深入分析。


✅ 一、Dapr 是什么?

Dapr(Distributed Application Runtime) 是一个语言无关、事件驱动、以 sidecar 模式运行的微服务运行时,它帮助开发者构建可移植、可扩展、易维护的微服务应用。

简单来说:Dapr 把你常用的微服务基础能力(调用、消息、状态、绑定、密钥)抽象成一致的接口,你只需要用 HTTP/gRPC 调用它即可。


🧩 二、Dapr 解决了哪些问题?

微服务常见需求传统做法Dapr 提供的能力
服务间调用自建服务发现 + RPCservice.invoke
消息发布订阅集成 Kafka / RabbitMQpubsub 抽象接口
状态管理使用 Redis、数据库state 抽象接口
分布式锁、事务手动开发状态事务 API
绑定外部系统SDK 调 APIbindings 抽象
配置/密钥管理读配置中心secret/config 统一接口
可观测性手动埋点、链路追踪自动集成 OpenTelemetry

🧠 核心思想是:你不再需要直接接触底层中间件(比如 Redis、RabbitMQ),而是通过一致的 Dapr 接口进行访问。


🔁 三、使用 Dapr 与不使用的区别

对比项不用 Dapr用了 Dapr
服务发现要搭建如 Consul、EurekaDapr 内建(基于 app-id)
状态管理直接依赖 Redis SDKcurl http://localhost:3500/v1.0/state/...
Pub/Sub直接用 Kafka/RabbitMQ SDKPOST /v1.0/publish/pubsub/topic
服务通信协议要统一为 HTTP 或 gRPC支持混用
可移植性强绑定特定中间件换 Redis、Kafka 无需改代码
多语言支持每种语言都要写适配Dapr 通用接口,跨语言无缝协作
代码复杂度多个 SDK、配置、重试逻辑Dapr 处理所有基础设施细节

🚀 举个直观的例子

你有两个微服务 A 和 B,A 需要给 B 发送一个消息并记录状态:

✅ 不用 Dapr:

  • A 使用 RabbitMQ Java SDK 发布消息
  • A 使用 Redis SDK 写入状态
  • B 使用 RabbitMQ SDK 消费消息
  • Redis/RabbitMQ 坏了你要自己实现重试、熔断

✅ 用 Dapr:

  • A 调用 Dapr API 发布消息到 topic
  • A 调用 Dapr API 存储状态
  • B 监听 Dapr pubsub 入口,接收消息
  • 所有中间件问题由 Dapr 屏蔽,支持 pluggable 后端

🔚 总结一句话:

Dapr 是一个“跨语言、可插拔”的微服务基础能力抽象层,帮助你更轻松、安全、可维护地开发微服务。