dapr/dapr
GitHub: dapr/dapr
一个 CNCF 毕业的便携式分布式应用运行时,通过 sidecar 架构为微服务提供开箱即用的构建块 API。
Stars: 25557 | Forks: 2050
APIs for Building Secure and Reliable Microservices
[][go-report-url] [][openssf-url] [][docker-url] [][actions-url] [][e2e-url] [][codecov-url] [][apache-url] [][fossa-url] [][todo-url] [![Good First Issues][gfi-badge]][gfi-url] [][discord-url] [![YouTube][youtube-badge]][youtube-link] [![Bluesky][bluesky-badge]][bluesky-link] [![X/Twitter][x-badge]][x-link]
Dapr 是一组集成的 API,具有内置的最佳实践和模式,用于构建分布式应用程序。Dapr 通过开箱即用的功能(如 workflow、pub/sub、状态管理、密钥存储、外部配置、bindings、actors、分布式锁和加密)将开发人员的生产力提高 20-40%。您可以从内置的安全性、可靠性和可观测性功能中受益,因此无需编写样板代码即可实现生产就绪的应用程序。
借助 Dapr(一个 CNCF 毕业项目),平台团队可以配置复杂的设置,同时向应用程序开发团队公开简单的接口,使他们更容易构建高度可扩展的分布式应用程序。许多平台团队已采用 Dapr,为基于 API 的基础设施交互提供治理和黄金路径。

我们是云原生计算基金会 (CNCF) 的毕业项目。

## 目标
- 使使用*任何*语言或框架的开发人员能够编写分布式应用程序
- 通过提供最佳实践构建块,解决开发人员在构建微服务应用程序时面临的难题
- 社区驱动、开放且供应商中立
- 获取新的贡献者
- 通过开放 API 提供一致性和可移植性
- 跨云和边缘的平台无关性
- 拥抱可扩展性并提供无供应商锁定的可插拔组件
- 通过高性能和轻量级特性支持 IoT 和边缘场景
- 可从现有代码增量采用,无运行时依赖
## 工作原理
Dapr 将 sidecar(容器或进程)注入到每个计算单元中。Sidecar 与事件触发器交互,并通过标准 HTTP 或 gRPC 协议与计算单元通信。这使 Dapr 能够支持所有现有和未来的编程语言,而无需您导入框架或库。
Dapr 通过标准 HTTP 动词或 gRPC 接口提供内置的状态管理、可靠消息传递(至少一次交付)、触发器和绑定。这允许您按照相同的编程范式编写无状态、有状态和类似 actor 的服务。您可以自由选择一致性模型、线程模型和消息传递模式。
Dapr 在 Kubernetes 上原生运行,可以作为自托管二进制文件在您的机器上、IoT 设备上运行,或者作为可以注入云中或本地任何系统的容器运行。
Dapr 使用可插拔的组件状态存储和消息总线(如 Redis)以及 gRPC 来提供广泛的通信方法,包括使用 gRPC 的直接 dapr-to-dapr 通信,以及具有保证交付和至少一次语义的异步 Pub-Sub。
## 为什么选择 Dapr?
编写高性能、可扩展且可靠的分布式应用程序很难。Dapr 为您带来了经过验证的模式和实践。它将事件驱动和 actor 语义统一到一个简单、一致的编程模型中。它支持所有编程语言,没有框架锁定。您不会接触到低级原语,如线程、并发控制、分区和扩展。相反,您可以通过使用您熟悉的 Web 框架实现一个简单的 Web 服务器来编写代码。
Dapr 在线程和状态一致性模型方面非常灵活。如果您选择,您可以利用多线程,并且可以在不同的一致性模型中进行选择。这种灵活性使您能够实施没有人为限制的高级场景。Dapr 的独特之处在于,您可以在平台和底层实现之间无缝过渡,而无需重写代码。
## 特性
* 具有可插拔提供者和至少一次语义的事件驱动 Pub-Sub 系统
* 具有可插拔提供者的输入和输出绑定
* 具有可插拔数据存储的状态管理
* 一致的服务到服务发现和调用
* 可选的有状态模型:强/最终一致性,先写/后写获胜
* 跨平台虚拟 actors
* 密钥管理,用于从安全的密钥保管库检索密钥
* 速率限制
* 内置 [可观测性](https://docs.dapr.io/concepts/observability-concept/) 支持
* 使用专用 Operator 和 CRDs 在 Kubernetes 上原生运行
* 通过 HTTP 和 gRPC 支持所有编程语言
* 来自 Azure、AWS、GCP 的多云、开放组件(bindings、pub-sub、state)
* 可在任何地方运行,作为进程或容器化
* 轻量级(二进制文件 58MB,物理内存 4MB)
* 作为 sidecar 运行 - 消除对特殊 SDK 或库的需求
* 专用 CLI - 开发人员友好的体验,易于调试
* 支持 Java、.NET Core、Go、Javascript、Python、Rust 和 C++ 的客户端
## 开始使用 Dapr
请参阅我们文档中的[入门](https://docs.dapr.io/getting-started/)指南。
## 快速入门和示例
* 请参阅 [快速入门仓库](https://github.com/dapr/quickstarts) 获取代码示例,以帮助您开始使用 Dapr。
* 在 Dapr [示例仓库](https://github.com/dapr/samples)中探索更多示例。
### 视频和播客
我们有各种各样的主题演讲、播客和演示文稿可供参考和学习。
📺 访问 https://docs.dapr.io/contributing/presentations/ 查看以前的演讲和幻灯片,或访问我们的 YouTube 频道 https://www.youtube.com/@DaprDev/videos。
## 仓库
| 仓库 | 描述 |
|:-----|:------------|
| [Dapr](https://github.com/dapr/dapr) | 您当前所在的主仓库。包含 Dapr 运行时代码和概览文档。
| [CLI](https://github.com/dapr/cli) | Dapr CLI 允许您在本地开发机器或 Kubernetes 集群上设置 Dapr,提供调试支持,启动和管理 Dapr 实例。
| [Docs](https://docs.dapr.io) | Dapr 的文档。
| [Quickstarts](https://github.com/dapr/quickstarts) | 此仓库包含一系列简单的代码示例,重点介绍了 Dapr 的主要功能。
| [Samples](https://github.com/dapr/samples) | 此仓库包含社区维护的各种 Dapr 用例示例。
| [Components-contrib ](https://github.com/dapr/components-contrib) | Components contrib 的目的是提供开放的、社区驱动的可重用组件,用于构建分布式应用程序。
| [Dashboard ](https://github.com/dapr/dashboard) | Dapr 的通用仪表板
| [Go-sdk](https://github.com/dapr/go-sdk) | Dapr SDK for Go
| [Java-sdk](https://github.com/dapr/java-sdk) | Dapr SDK for Java
| [JS-sdk](https://github.com/dapr/js-sdk) | Dapr SDK for JavaScript
| [Python-sdk](https://github.com/dapr/python-sdk) | Dapr SDK for Python
| [Dotnet-sdk](https://github.com/dapr/dotnet-sdk) | Dapr SDK for .NET
| [Rust-sdk](https://github.com/dapr/rust-sdk) | Dapr SDK for Rust
| [Cpp-sdk](https://github.com/dapr/cpp-sdk) | Dapr SDK for C++
| [PHP-sdk](https://github.com/dapr/php-sdk) | Dapr SDK for PHP
## 行为准则
请参阅我们的 [Dapr 社区行为准则](https://github.com/dapr/community/blob/master/CODE-OF-CONDUCT.md)
标签:Actor模型, API网关, API集成, CNCF, Docker, EVTX分析, Go, JSONLines, Python工具, Ruby工具, web渗透, 中间件, 事件驱动架构, 分布式系统, 分布式锁, 发布订阅, 可观测性, 响应大小分析, 子域名突变, 安全防御评估, 工作流编排, 搜索引擎查询, 日志审计, 最佳实践, 服务调用, 状态管理, 现代应用开发, 请求拦截, 边缘计算, 运行时, 零信任