ابنِ أداة تقدير وتخطيط السعة
التعليمات
في مقابلات تصميم الأنظمة، تقدير الظهر-المغلف هو المهارة التي تفصل المرشحين الواثقين عن المتعثرين. في هذا المختبر، ستبني مجموعة أدوات تخطيط سعة كاملة تُجري نفس الحسابات التي ستقوم بها على السبورة البيضاء — لكن ككود قابل لإعادة الاستخدام والاختبار.
نظرة عامة على البنية
main.py (نقطة دخول CLI)
├── estimator/qps_calculator.py — تحويل DAU إلى QPS
├── estimator/storage_calculator.py — توقعات التخزين
├── estimator/bandwidth_calculator.py — تقدير عرض النطاق
├── estimator/infrastructure_planner.py — تحجيم الخوادم/الذاكرة/الأقسام
├── estimator/latency_analyzer.py — تحليل ميزانية زمن الاستجابة
├── estimator/cost_estimator.py — توقع تكاليف السحابة
└── estimator/__init__.py — تصدير الوحدة
تعليمات خطوة بخطوة
FILE 1: estimator/qps_calculator.py
ابنِ حاسبة QPS (استعلامات في الثانية) تحوّل نشاط المستخدم إلى معدلات طلبات.
- استقبل DAU (المستخدمين النشطين يومياً) وعدد الإجراءات لكل مستخدم يومياً كمدخلات
- احسب QPS المتوسط:
DAU × الإجراءات / 86400 - طبّق مضاعف ذروة قابل للتعديل (افتراضي 3x) لـ QPS الذروة
- قسّم إلى QPS قراءة وQPS كتابة باستخدام نسبة القراءة للكتابة
- أرجع نتيجة مُنظمة بجميع القيم المحسوبة
FILE 2: estimator/storage_calculator.py
قدّر متطلبات التخزين عبر الزمن.
- استقبل حجم كل كائن بالبايت وعدد الكتابات اليومية وفترة الاحتفاظ بالأيام
- احسب التخزين اليومي:
الكتابات_يومياً × حجم_الكائن - اعرض نمو التخزين خلال فترة الاحتفاظ
- طبّق عامل نمو لعبء البيانات الوصفية (افتراضي 1.2x)
- أرجع أرقام التخزين اليومية والشهرية وإجمالي الاحتفاظ
FILE 3: estimator/bandwidth_calculator.py
احسب عرض نطاق الوارد والصادر.
- احسب الوارد:
write_QPS × حجم_حمولة_الكتابة - احسب الصادر:
read_QPS × حجم_حمولة_القراءة - حوّل إلى وحدات مقروءة (KB/s، MB/s، GB/s)
- أرجع كلاً من البايت/ثانية الخام والنصوص المنسقة
FILE 4: estimator/infrastructure_planner.py
حجّم البنية التحتية بناءً على الحمل.
- احسب عدد الخوادم:
peak_QPS / استعلامات_لكل_خادم(تقريب لأعلى) - احسب حجم الذاكرة المؤقتة: بناءً على قاعدة 80/20 (تخزين مؤقت لـ 20% من القراءات اليومية)
- احسب عدد أقسام قاعدة البيانات: باستخدام إجمالي التخزين والحد الأقصى لحجم القسم (افتراضي 500 GB)
- استخدم التجزئة المتسقة مع عقد افتراضية قابلة للتعديل لتوزيع الأقسام
- أرجع عدد الخوادم وحجم الذاكرة المؤقتة بـ GB وعدد الأقسام
FILE 5: estimator/latency_analyzer.py
حلّل ميزانية زمن استجابة الطلب.
- عرّف مكونات زمن الاستجابة: قفزة الشبكة، موازن الحمل، معالجة خادم التطبيق، بحث الذاكرة المؤقتة، استعلام DB، التسلسل
- احسب زمن الاستجابة P50 وP99 لكل مكون
- حدد المكون المهيمن (أعلى مساهم في زمن الاستجابة)
- تحقق مما إذا كان إجمالي زمن الاستجابة يناسب SLA المستهدف
- أرجع جدول تحليل ونتيجة نجاح/فشل لـ SLA
FILE 6: estimator/cost_estimator.py
قدّر تكاليف البنية التحتية السحابية الشهرية.
- احسب تكاليف الحوسبة: عدد_الخوادم × تكلفة_الخادم_بالساعة × 730 ساعة/شهر
- تكاليف التخزين: إجمالي TB × تكلفة TB شهرياً
- تكاليف عرض النطاق (صادر): GB صادر × تكلفة GB (تسعير متدرج)
- تكاليف الذاكرة المؤقتة: عقد_الذاكرة المؤقتة × تكلفة_العقدة شهرياً
- أرجع تكاليف مفصلة وإجمالية شهرية
FILE 7: estimator/__init__.py
صدّر جميع فئات الحاسبة لاستيراد نظيف.
FILE 8: main.py
ابنِ CLI يُشغّل سيناريو تقدير كامل.
- عرّف سيناريو (مثال: "خلاصة شبيهة بـ Twitter: 300 مليون DAU، 2 تغريدة/مستخدم/يوم، نسبة قراءة-كتابة 100:1")
- شغّل جميع المقدرات بالتسلسل: QPS → التخزين → عرض النطاق → البنية التحتية → زمن الاستجابة → التكلفة
- اطبع تقريراً منسقاً بجميع النتائج
- يجب أن يكون التقرير واضحاً بما يكفي لتقديمه في مقابلة
تلميحات
- استخدم Python dataclasses أو TypedDict لأنواع الإرجاع المُهيكلة
- للتنسيق المقروء:
1_073_741_824 bytes→"1.00 GB" - للتجزئة المتسقة: استخدم
hashlib.md5لتجزئة المفاتيح على حلقة - تذكر: 1 يوم = 86,400 ثانية، 1 شهر ≈ 730 ساعة، 1 سنة ≈ 365 يوم
- مرجع تكاليف السحابة (تقريبي): حوسبة ~$0.05/ساعة لكل vCPU، تخزين ~$0.023/GB/شهر، صادر ~$0.09/GB
ما يجب تقديمه
يحتوي المحرر على 8 أقسام ملفات مع تعليقات TODO. استبدل كل TODO بتنفيذك.
قبل التقديم، تأكد من اكتمال كل قسم ملف في المحرر:
- FILE 1 — حاسبة QPS مع تحويل DAU ومضاعف الذروة وتقسيم القراءة/الكتابة
- FILE 2 — حاسبة التخزين مع تحجيم لكل كائن والاحتفاظ وتوقع النمو
- FILE 3 — حاسبة عرض النطاق مع حساب الوارد/الصادر والتنسيق المقروء
- FILE 4 — مخطط البنية التحتية مع عدد الخوادم وتحجيم الذاكرة المؤقتة وعدد أقسام DB
- FILE 5 — محلل زمن الاستجابة مع تحليل المكونات وP50/P99 وفحص SLA
- FILE 6 — مقدر التكلفة مع عناصر تكلفة الحوسبة والتخزين وعرض النطاق والذاكرة المؤقتة
- FILE 7 — تصدير الوحدة لجميع الحاسبات
- FILE 8 — CLI main.py يُشغّل سيناريو كامل مع تقرير منسق