عند بناء خدمة بيانات متطورة مثل FXMacroData، إطار API الأساسي هو القرار الهندسي الأكثر أهمية. مهمتنا بسيطة: خدمة بيانات الاقتصاد الكلي وفرككس عالية التردد على الفور وبشكل موثوق للتجار والكوانت وفريقات التكنولوجيا المالية في جميع أنحاء العالم.
لتحقيق هذا، كنا بحاجة إلى إطار عمل بايثون سريع، غير متزامن بشكل أصلي، وملائم تماما للتنفيذ الحديث بدون خادم على تشغيل Google Cloudالمتنافسون المعتادون كانوا زجاجة و (جانغو)لكننا اخترنا في النهاية FastAPIهنا هو التفاصيل التقنية لماذا FastAPI كان الفائز الواضح لبناء أداء، معدل برمجة بيانات حديثة مصممة للسحابة.
ولاية API: الأداء والكفاءة بدون خادم
متطلباتنا الأساسية عالية التزامنخدمات البيانات الاقتصادية الكبرى مقيدة بإدخال/إخراج، وتقضي واجهة برمجة التطبيقات معظم وقتها في انتظار قاعدة البيانة (Firestore) أو خدمات الشبكة الداخلية الأخرى لإرجاع البيانats، دون إجراء حسابات معالجة معالجات معالجه المركزية الثقيلة.
- زجاجة (متزامنة/WSGI): فلاشة قياسية متزامنة هذا يعني أن خيط عامل محجوز (أو مجمد) بينما ينتظر إكمال عملية إدخال / إخراج (مثل استرداد البيانات). هذه عدم الكفاءة تضيع موارد الحوسبة وتحد من عدد المستخدمين المتزامنين الذي يمكن أن يتعامل معه خادم واحد بكفاءة من حيث التكلفة.
- (جانغو) (الوزن الثقيل) على الرغم من أنها قوية، فإن Django هي إطار عمل متأمل ومضمن للبطاريات. إفراط في القتل. توزيع هذه الهندسة المعمارية الكبيرة فقط لخدمة نقاط نهاية البيانات غير فعال ، وخاصة في مرنة ، ودفع لكل بيئة استخدام مثل السحابة تشغيل.
️ FastAPI: Async بشكل أصلي لتحسين نطاق السحابة
فاستابي مبنية على الحديث معيار ASGI، جعل ذلك غير متزامن (async/await) هذه الهندسة المعمارية غير الممنوعة قدمت ميزة الأداء الحاسمة التي كنا نحتاجها.
- إدخال/إخراج غير مسدود: عندما يبدأ عامل FastAPI طلبًا لإدخال وإخراج (على سبيل المثال ، في انتظار البيانات من Firestore) ، بدلاً من الحجب ، يمكنه الانتقال على الفور إلى معالجة طلب آخر معلق. وهذا يسمح لعملية واحدة بإدارة عملية واحدة بكفاءة. مئات الطلبات المتزامنة باستخدام الحد الأدنى من الموارد
- التكامل بدون خادم كونها خفيفة الوزن ومحلية في ASGI يعني أن FastAPI تدور وتعمل بشكل مثالي في فترة الحياة القصيرة والمقيدة للموارد لحاوية بدون خادم. نموذج التوسع في Cloud Run، حيث ندفع فقط للوقت الحسابي الدقيق المستخدم.
الفرق العملي: التنافس في إدخال/إخراج في الشفرة
فائدة البرمجة غير المتزامنة الأصلية واضحة على الفور عند طلب البيانات من مصادر داخلية أو خارجية متعددة في وقت واحد.
➡️ الزجاجة (مثال متزامن)
الإعدام يُجري بشكل متتابعوقت الإعدام الإجمالي هو المبلغ من التأخيرين (حوالي 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"
➡️ FastAPI (مثال غير متزامن)
الإعدام يُجري في وقت واحدوقت الإعدام الإجمالي هو الحد الأقصى of the two delays (approx. 1 second), as both I/O operations are initiated at the same time.
# 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 بشكل كبير عملية التطوير لدينا:
- التحقق التلقائي: إنه يستخدم نماذج بيدانتيك و القياسية إشارات نوع بايثون لتحقيق التحقق من صحة البيانات التلقائية، وتسلسل، و deserialization. وهذا يقلل بشكل كبير من رمز الوعاء ويقضي عمليا على أخطاء نوع البيانة في وقت التشغيل.
- التوثيق الذاتي: FastAPI تولد تلقائياً تفاعلية، موحدة وثائق OpenAPI (واجهة استخدام Swagger)هذا أمر لا يقدر بثمن لمستخدمينا - مطوري الكم وفريقات التكنولوجيا المالية - الذين يدمجون واجهة برمجة برمجة بيانات FXMacroData.
باختصار، اختيار FastAPI سمح لنا ببناء واجهة برمجة برمجيات عالية الأداء، غير ذات حالة تتناسب تماما مع كفاءة الدفع لكل استخدام من Google Cloud Run. فهي متفوقة تقنيا وأكثر فعالية من حيث التكلفة لخدمة بيانات حديثة من إطار أكثر هندسة مثل Django.
إذا كنت تبني واجهة برمجة بيانات جديدة تركز على السرعة والكفاءة، وتوسيع نطاق السحابة الأصلية، الخيار واضح: الذهاب غير متزامن مع FastAPI.
فريق هندسة FXMacroData