لماذا يبدو الـAPI بطيئًا: القصة كاملة في رسمتين
قال لي أحد العملاء ذات مرة: "زر التسجيل يستغرق 4 ثوانٍ، يجب إصلاح قاعدة البيانات." لم تكن المشكلة في قاعدة البيانات إطلاقًا. كانت الـAPI ترسل بريد ترحيب قبل أن تردّ على المستخدم. هذه هي المشكلة كاملة في رسمة واحدة:
الحل: الردّ أولًا، والعمل لاحقًا
المستخدم لا يحتاج أن يكون البريد قد أُرسل فعلًا قبل أن يرى "تم إنشاء الحساب". يحتاج فقط إلى الوعد بأنه سيُرسل. لذلك نقسّم الخط الزمني: نردّ فورًا، وندفع بالعمل البطيء إلى طابور يعالجه عامل في الخلفية.
في Laravel هذا ثلاثة أسطر فقط
ادفع بالعمل إلى مهمة في الطابور، وردّ فورًا:
SendWelcomeEmail::dispatch($user); داخل الـcontroller، وphp artisan queue:work على الخادم، وQUEUE_CONNECTION=redis في متغيرات البيئة. هذا هو النمط بالكامل.
في Tamkeen قضيت جزءًا كبيرًا من ستة أشهر في نقل العمل من داخل الطلبات إلى الطوابير. نفس الخوادم، نفس قاعدة البيانات، ونقاط النهاية التي كانت تستغرق ثوانٍ صارت تردّ خلال عشرات المللي ثانية.
ملاحظات القراء