الترحيل من Heroku إلى AWS بلا توقف: 14 مليون دولار شهريًا
ترحيل منصة مدفوعات من Heroku خلال 14 أسبوعًا بأسلوب strangler fig ودون أي توقف: تكلفة البنية التحتية أقل 35%، وزمن النشر أقل 93%، ووتيرة النشر أعلى 800%.
يعالج العميل معاملات بنحو 14 مليون دولار شهريًا، في أكثر من 180,000 معاملة، لنحو 900 تاجر من الشركات الصغيرة والمتوسطة في الولايات المتحدة وكندا. كانت المنصة كلها تعمل كتطبيق Ruby on Rails واحد متراصّ (monolith) على Heroku، وصارت هذه البنية القيد الأول على أعمال الشركة.
كان الضرر قابلًا للقياس. كل عملية نشر كانت إعادة تشغيل كاملة تستغرق 38 دقيقة، ولا يُسمح بها إلا مرتين أسبوعيًا ضمن نافذة صيانة. وتسبّبت عملية نشر فاشلة واحدة في انقطاع دام 47 دقيقة في ساعات الذروة، وفي معاملات فاشلة بنحو 62,000 دولار. ولم يكن Heroku يسمح بتوسيع المكوّنات كلٌّ على حدة، فكانت ذروة التقارير في نهاية كل شهر تفرض توسيع التطبيق كله. بلغت التكاليف 14,200 دولار شهريًا وكانت ترتفع من 8% إلى 12% كل شهر. وكان خلل واحد في أي مكان قادرًا على إيقاف كل شيء: خطأ تنسيق في التقارير عطّل مرةً طابور المدفوعات 23 دقيقة، وكلّف الشركة عميلين محتملين من المؤسسات الكبرى.
كان شرط المدير التقني (CTO) قاطعًا: لا نافذة للترحيل، ولا أي اضطراب يلاحظه التجار. كان على الترحيل أن يجري تحت حركة المدفوعات الحية.
بدأنا بتقييم للبنية التحتية مقابل 6,000 دولار: مراجعة شيفرة Rails التي تضم نحو 85,000 سطر، ورسم خريطة لمخطط قاعدة البيانات المكوّن من 47 جدولًا (12 منها يتجاوز مليون صف)، وتتبّع للطلبات أظهر أن استعلامات التقارير تستهلك 60% من معالج قاعدة البيانات في نهاية الشهر، بينما مسار المدفوعات نفسه يعمل بزمن استجابة p99 يبلغ 340 ميلي ثانية. أوصينا بنمط strangler fig: استخراج الخدمات واحدة تلو الأخرى، وتشغيل القديم والجديد بالتوازي، وتحويل الحركة تدريجيًا، مع ترتيب الاستخراج بحسب المخاطر: الإشعارات، ثم التقارير، ثم التهيئة (onboarding)، ثم webhooks، ونواة المدفوعات في النهاية.
في الأسبوعين 3 و4 بنينا الأساس قبل أي استخراج: كل موارد AWS معرَّفة في Terraform، ومسار CI/CD على GitHub Actions مع فحص أمني ونشر blue-green إلى EKS، ومنظومة مراقبة على Datadog نُشرت مسبقًا لتلتقط أي اختلاف بين النظامين القديم والجديد خلال ثوانٍ.
جرت عمليات الاستخراج المنخفضة المخاطر من الأسبوع 5 إلى الأسبوع 8. عملت خدمة الإشعارات بالتوازي 5 أيام بمعدل اختلاف 0.00% قبل التحويل النهائي. ونقلُ التقارير إلى نسخة للقراءة فقط (read replica) خفّض استهلاك معالج قاعدة البيانات الأساسية من 78% إلى 31%، وحسّن زمن استجابة المدفوعات p99 من 340 إلى 180 ميلي ثانية كأثر جانبي. ورُحّلت نواة المدفوعات في النهاية بأقصى درجات الحذر: 48 ساعة من حركة الظل (shadow traffic) على 12,000 معاملة بمعدل اختلاف 0.00%، ثم تحويل تدريجي من 1% إلى 100% من الحركة على مدى 10 أيام، مع خطة تراجع مختبَرة في كل خطوة. واختُتم الأسبوع 14 بأدلة تشغيل (runbooks)، ونقل للمعرفة، ويوم تمرين (game day) مدته 3 ساعات لحقن الأعطال.
بمقارنة أول 90 يومًا بعد الترحيل مع 90 يومًا قبله: انخفض زمن النشر من 38 دقيقة إلى 2.5 دقيقة لكل خدمة (انخفاض 93%)، وارتفعت وتيرة النشر من مرتين إلى 18 مرة أسبوعيًا (زيادة 800%)، وانخفضت التكلفة الشهرية للبنية التحتية من 14,200 إلى 9,230 دولار (انخفاض 35%)، وتحسّن زمن استجابة المدفوعات p99 من 340 إلى 145 ميلي ثانية (انخفاض 57%)، وصارت استعلامات تقارير نهاية الشهر تستغرق من 2 إلى 8 ثوانٍ بعد أن كانت تستغرق من 12 إلى 45 ثانية (انخفاض 82%). التوقف غير المخطط له: 70 دقيقة قبل الترحيل، وصفر بعده. التوقف أثناء الترحيل نفسه: صفر.
مع نمو حجم معاملات الشركة بنسبة 15% كل ربع سنة، كانت تكاليف Heroku ستبلغ 22,000 دولار شهريًا بنهاية العام، بينما يُتوقع أن تبلغ تكلفة البنية على AWS عند الحجم نفسه 11,500 دولار شهريًا، أي وفورات سنوية متزايدة تتجاوز 120,000 دولار. وتُستردّ تكلفة الترحيل البالغة 74,000 دولار خلال 14.8 شهر من وفورات البنية التحتية وحدها، قبل احتساب زوال خطر التوقف الذي كلّف 62,000 دولار في الحادثة الواحدة.
أبقى العميل على مهندس DevOps من Gigabit بعقد SRE مستمر مقابل 5,500 دولار شهريًا. وتتضمن خريطة الطريق الحالية النشر في عدة مناطق سحابية، ومسارًا لكشف الاحتيال في الزمن الحقيقي، وبنية تحتية وفق SOC 2 Type II.
عرضت علينا ثلاث شركات تنفيذ هذا الترحيل. اقترحت اثنتان منها نقلًا كما هو (lift and shift) يمتد 12 شهرًا مع عطلة نهاية أسبوع للترحيل. واقترحت Gigabit أسلوب strangler fig خلال 14 أسبوعًا مع ضمان عدم التوقف. وسلّموا ما وعدوا به بالضبط: لم يلاحظ أي تاجر أن الترحيل حدث. ارتفعت وتيرة النشر لدينا من مرتين في الأسبوع إلى عدة مرات في اليوم. وهذا وحده غيّر سرعة إطلاقنا للمنتج.
دراسات الحالة المنشورة لدينا هي في معظمها لشركات من أمريكا الشمالية، ولم نسلّم بعد نظامًا أو وكيلًا يعمل باللغة العربية. جميع المبالغ بالدولار الأمريكي. اسم العميل غير معلن.


