Quand on construit un service de données de pointe comme FXMacroData est une sociétéNotre mission est simple: fournir des données macroéconomiques et de change à haute fréquence instantanément et de manière fiable aux traders, aux quantiques et aux équipes fintech du monde entier.
Pour y parvenir, nous avions besoin d'un framework Python rapide, asynchrone et parfaitement adapté au déploiement sans serveur moderne sur Google Cloud est en cours d' exécutionLes candidats standard étaient: Des produits de la catégorie Je suis désolé . Je suis Django.Cependant, nous avons finalement choisi Rapide et rapideVoici la ventilation technique des raisons pour lesquelles FastAPI a été le gagnant clair pour la construction d'une API de données performante et moderne conçue pour le cloud.
Le mandat de l'API: performance et efficacité sans serveur
Notre exigence de base est élevée . la mêmeLes services de données macroéconomiques sont liés par I/O. L'API passe la plupart de son temps à attendre que la base de données (Firestore) ou d'autres services de réseau internes renvoient les données, sans effectuer de lourds calculs de la CPU.
- Les émissions de CO2 sont calculées en fonction des émissions d'énergie du sol. Le Flask standard est synchrone, ce qui signifie qu'un fil de travail est bloqué Cette inefficacité gaspille des ressources informatiques et limite le nombre d'utilisateurs simultanés qu'un seul serveur peut gérer de manière rentable.
- Django (Pesour lourde monolithe): Bien que puissant, Django est un cadre opinionné, avec des batteries. surclassement. Le déploiement de cette grande architecture uniquement pour servir les terminaux de données est inefficace, en particulier dans un environnement flexible et payant par utilisation comme Cloud Run.
️ FastAPI: Asynchronisation native pour une mise à l'échelle optimale du cloud
FastAPI est construit sur le moderne Norme ASGIJe le fais . Les données sont fournies par les autorités compétentes.async/await) Cette architecture non-bloquant a fourni l'avantage de performance critique dont nous avions besoin.
- Émetteur/sortie non bloquant: Lorsqu'un employé FastAPI lance une demande d'E/S (par exemple, en attendant les données de Firestore), au lieu de bloquer, il peut immédiatement passer à la gestion d'une autre demande en attente. Des centaines de demandes simultanées en utilisant des ressources minimes.
- Intégration sans serveur: Le fait d'être léger et ASGI-native signifie que FastAPI tourne et fonctionne parfaitement dans la courte durée de vie limitée en ressources d'un conteneur sans serveur. Le modèle de mise à l'échelle de Cloud Run, où nous ne payons que pour le temps de calcul exact utilisé.
La différence pratique: la concurrence des E/S dans le code
L'avantage de la programmation asynchrone native est immédiatement évident lorsque vous demandez des données à partir de plusieurs sources internes ou externes simultanément.
➡️ Flacon (exemple synchrone)
L' exécution est en cours . séquentiellementLe temps total d' exécution est de somme Les deux délais (environ 2 secondes) sont réduits, car le deuxième appel doit attendre que le premier soit terminé.
# 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"
➡️ FastAPI (exemple asynchrone)
L' exécution est en cours . en même tempsLe temps total d' exécution est de Le maximum Les deux opérations d'E/S sont lancées en même temps.
# 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"
Productivité et fiabilité des développeurs
Au-delà des performances brutes et de l'architecture cloud, FastAPI a considérablement amélioré notre processus de développement:
- Validation automatique: Il tire parti de la pression . Modèles pydactiques et standard Indices de type Python Il est possible de modifier les données de manière à ce qu'elles soient plus faciles à valider, à sérialiser et à désérialiser.
- - Une pièce d'identité. FastAPI génère automatiquement des informations interactives et normalisées Documentation OpenAPI (interface utilisateur du Swagger)Cette solution est d'une valeur inestimable pour nos utilisateurs, les développeurs de quantités et les équipes de fintech, qui intègrent l'API FXMacroData.
En résumé, le choix de FastAPI nous a permis de créer une API sans état de haute performance qui correspond parfaitement à l'efficacité de Google Cloud Run.
Si vous construisez une nouvelle API de données axée sur la vitesse, l'efficacité et l'évolutivité cloud-native, le choix est clair: aller asynchroniser avec FastAPIJe suis désolé .
L'équipe d'ingénierie FXMacroData