المستوى: محترف
وقت القراءة: 9 دقائق
لو Lambda function بياخد 3.2 ثانية على أول طلب بعد deploy جديد، ونسبة Cold Start في الـ traffic بتاعك عند 12%، P99 latency بيقفز فوق 4 ثواني وعميل الـ API بيشوفها timeout. SnapStart في 4 سطور إعداد بيختصر الزمن لـ 180 مللي ثانية، بدون تعديل سطر كود، وبدون تكلفة شهرية ثابتة زي Provisioned Concurrency.
Cold Start مش مشكلة Lambda — هي مشكلة الـ Init Phase
المشكلة باختصار
كل ما Lambda يحتاج يشغّل instance جديد (بسبب scale up أو deploy أو طول idle لأكثر من 5 دقائق)، الـ runtime بيمر بأربع مراحل قبل ما الكود بتاعك يبدأ يرد:
- تحميل الـ runtime نفسه (JVM, CPython, .NET CLR).
- استيراد الـ dependencies (boto3, pandas, Spring beans).
- تشغيل static init code (DI containers, DB clients, config loaders).
- تنفيذ الـ handler function نفسه.
الخطوات التلاتة الأولى دي اسمها Init Phase، وبتاخد بين 800 مللي ثانية و 6 ثواني حسب الـ runtime وحجم الـ dependencies. الـ handler نفسه عادة بياخد ميلي ثواني. يعني انت بتدفع 95% من زمن أول طلب على حاجة مش الكود اللي كتبته.
تشبيه يوضح فكرة SnapStart
تخيّل إنك صاحب محل قهوة بتفتح كل صبح. التحضير العادي بياخد 6 دقايق: تشغيل ماكينة الـ POS، تحميل كاتالوج الأسعار، تجهيز ماكينة القهوة، شوية تنوير. لو في 50 زبون قدام الباب الساعة 9، أول واحد بيستنى 6 دقايق ساعة ما تخلص التحضير.
SnapStart بيقلب اللعبة. في اليوم الأول بس انت بتفتح المحل لحد ما يخلص كل التحضير. بعدين كاميرا بتاخد لقطة (snapshot) للمحل في الحالة دي. كل صبح بعد كده، انت مش بتعيد التحضير من أوله — بتنسخ اللقطة دي وخلاص. الزبون الأول بيلاقي القهوة دافية والكاتالوج جاهز قبل ما يدخل من الباب.
التعريف العلمي
SnapStart بياخد microVM snapshot للـ Lambda execution environment بعد ما الـ Init Phase يخلص بالكامل (بما فيها static init وأي class loading). الـ snapshot بيتخزّن مضغوط ومشفّر في cache مدار من AWS. أول invocation جديد، Firecracker hypervisor بيستعيد الـ snapshot في 50–200 مللي ثانية بدل ما يبدأ الـ initialization من الصفر.
الأرقام الحقيقية
على Spring Boot function بحجم 76MB (deployment package + dependencies)، AWS قاست في تجربة موثّقة:
- بدون SnapStart: P99 cold start = 6.1 ثانية
- مع SnapStart: P99 cold start = 1.4 ثانية (تحسّن 4.3x)
على Python 3.12 function بستيراد pandas + numpy + sqlalchemy:
- بدون SnapStart: 3.2 ثانية