Dapr 入门指南
什么是 Dapr?
Dapr,全称为分布式应用程序运行时(Distributed Application Runtime),是一个用于构建微服务应用程序的开源项目。它通过边车模式为服务提供了类似服务总线的抽象,简化了分布式系统的开发过程。
为什么选择 Dapr?
- 简化微服务开发:Dapr 提供了多种常见的分布式系统功能,使开发人员可以专注于业务逻辑,而无需处理复杂的基础设施问题。
- 平台无关:Dapr 可以运行在任意的编程语言和框架中,并且可以部署在本地、Kubernetes 或任何云平台上。
- 可扩展性:Dapr 的架构允许开发人员根据需要添加自定义组件和中间件,从而实现高度可定制化。
- 还有就是python微服务方面是短板,没有什么成熟方案
核心构建块
服务调用
Dapr 提供了一种简单的方式来进行服务间的通信,无论是 HTTP 还是 gRPC。它通过服务名称进行寻址,并处理负载均衡和重试逻辑。
状态管理
Dapr 支持多种状态存储后端,如 Redis、Cosmos DB 等,使得状态管理变得非常简单。
发布/订阅
通过 Dapr 的发布/订阅构建块,可以在微服务之间实现事件驱动的通信。Dapr 支持多种消息代理,如 Kafka、RabbitMQ 等。
输入/输出绑定
Dapr 支持将外部系统(如数据库、消息队列、文件存储等)绑定到应用程序中,简化了与这些系统的集成。
秘密管理
Dapr 提供了一种安全的方式来管理和访问应用程序的敏感信息,如 API 密钥、数据库密码等。
如何开始使用 Dapr?
环境设置
- 安装 Dapr CLI:
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
- 初始化 Dapr:
dapr init
创建第一个 Dapr 应用
- 创建一个简单的 HTTP 服务:
# app.py from fastapi import FastAPI, Request app = FastAPI() @app.post("/order") async def new_order(request: Request): order = await request.json() print(f"Received order: {order}") return order if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
- 运行 Dapr 应用:
dapr run --app-id myapp --app-port 8000 uvicorn app:app --host 0.0.0.0 --port 8000
使用 Dapr 进行服务调用
假设我们有另一个服务 order-processor
,可以通过以下方式进行服务调用:
- 创建
order-processor
服务:# order_processor.py from fastapi import FastAPI, Request app = FastAPI() @app.post("/process") async def process_order(request: Request): order = await request.json() print(f"Processing order: {order}") return order if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8001)
- 运行
order-processor
服务:dapr run --app-id order-processor --app-port 8001 uvicorn order_processor:app --host 0.0.0.0 --port 8001
- 修改
app.py
服务调用order-processor
:# app.py import requests from fastapi import FastAPI, Request app = FastAPI() @app.post("/order") async def new_order(request: Request): order = await request.json() response = requests.post('http://localhost:3500/v1.0/invoke/order-processor/method/process', json=order) return response.json() if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)
实际使用场景中,可以使用 AppBoot 快速搭建企业级的 FastAPI 项目
总结
Dapr 简化了分布式应用程序的开发,使 Python 构建微服务变得更加轻松。无论是服务调用、状态管理、发布/订阅,还是输入/输出绑定,Dapr 都提供了一种简单且灵活的解决方案。