创建一个前沿的数据服务时, 其他数据基本的API框架是最关键的工程决策. 我们的使命很简单:即时可靠地为全球的交易者,量子和金融科技团队提供高频宏观经济和外汇数据.
为了实现这一目标,我们需要一个快速,本地异步, 运行谷歌云标准的竞争者是 瓶子 现在我 吉安戈尽管如此,我们最终选择了 快速API快速API为什么成为为云设计的高性能,现代化数据API的明确赢家.
API任务:性能和无服务器效率
我们的核心要求很高. 同时发生宏观经济数据服务是I/O绑定的,API大部分时间都在等待数据库 (Firestore) 或其他内部网络服务返回数据,而不是执行繁重的CPU计算.
- 瓶子 (同步/WSGI): 标准瓶子是同步的,这意味着一个工人线程是 封锁 服务器在等待I/O操作 (如获取数据) 完成时,会被结.这种效率低下会浪费计算资源,并限制单个服务器能够以成本效益的方式处理的同时用户数量.
- 戈 (重量级单体): 虽然Django功能强大,但它是一个有想法,电池的框架. 过度杀戮仅仅为服务数据终端部署这种大型架构是低效的,尤其是在像Cloud Run这样的灵活的,按使用付费环境中.
️ FastAPI:为最佳云扩展提供原生异步
快速API是建立在现代 美国标准技术协会让它 没有任何其他async/await) 没有 这种非阻塞式架构提供了我们所需要的关键性能优势.
- 无阻塞式输入/输出: 当FastAPI工作者启动一个I/O请求 (例如,等待FireStore的数据),它可以立即切换到处理另一个待处理的请求. 这使单个进程能够有效地管理 百个同时的请求 使用最小的资源.
- 无服务器集成: 轻量级且ASGI原生,这意味着FastAPI在短暂的资源有限的服务器无容器寿命内完美运行. 云运行的扩展模型只有使用的计算时间才会付费.
实际的区别:代码中的I/O竞争
当同时从多个内部或外部源请求数据时,本地异步编程的好处是很明显的.
➡️ 瓶子 (同步示例)
执行执行 顺序进行执行时间总数是 总数 两个延迟 (约2秒),因为第二次调用必须等待第一个完成.
# Flask (Synchronous)
import time
from flask import Flask
app = Flask(__name__)
@app.route("/")
def sync_example():
time.sleep(1) # Wait for Source A
time.sleep(1) # Wait for Source B
return "Total Time: ~2.0s"
➡️ 快速API (异步示例)
执行执行 同时使用执行时间总数是 最大 两个延迟 (约1秒),因为两个I/O操作同时启动.
# FastAPI (Asynchronous)
import asyncio
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def async_example():
await asyncio.gather(
asyncio.sleep(1), # Wait for Source A
asyncio.sleep(1) # Wait for Source B
)
return "Total Time: ~1.0s"
开发人员的生产力和可靠性
超越原始性能和云架构,FastAPI显著改善了我们的开发过程:
- 自动验证: 它是杆. 皮达尼克模型 并且是标准的. Python 类型提示 对于自动数据验证,序列化和无序化. 这大大减少了热水板代码,几乎消除了运行时数据类型错误.
- 自动记录: 快速API自动生成互动,标准化的 开放API文档 (Swagger UI)这对我们集成FXMacroDataAPI的用户量子开发人员和金融科技团队来说是无价的.
总之,选择FastAPI使我们能够构建一个高性能,无状态的API,与Google Cloud Run的付费效率完全匹配.它在技术上优越,而且对于现代数据微服务来说比Django这样的过度工程框架更具成本效益.
选择很明确: 通过一个新的数据API来实现数据的扩展, 通过FastAPI进行异步现在我们要做什么?
FXMacroData工程团队