19

تجاربكم مع برمجة الـ Serverless

لعل ما سأطرحه قديم بعض الشيء لكني لم أرى نقاشات عديدة مثارة حول الموضوع. قبل سنين قمت ببناء موقعي الخاص باستخدام Node.js رغبة مني في اثبات قدراتي العالية، وهو أمر اكتشفت لاحقاً أنه خطأ لوجود بدائل تسرع من عملية البدء والتعديل وغيرها من الأمور لذلك عدت صاغراً إلى ووردبريس.

حاليا أقوم بالاستزادة عن خدمات أمازون وأعجبت كثيراً بخدمة Lambda التي توفر عليك استضافة الكود وبدل أن تدفع مقابل استضافة مزود ستتم محاسبتك مقابل كل تنفيذ للشفرة، وهو أمر رائع وموفر خصوصاً لمن يمتلكون زيارات قليلة. هذا الشيء دفعني للبحث قليلاً في إمكانية بناء موقع كامل على Lambda وهو أمر ممكن نظرياً لكنك قد تحتاج إلى خدمات AWS إضافية من أجل أن تنجح الأمور، أحد أهم الأمور هو أن Lambda لاتمتلك خدمة تحزين دائمة والكود ينفذ في مساحة مؤقتة (حسب فهمي) لذلك قد تحتاج إلى رفع الملفات على خدمة مثل S3.

مهتم بمعرفة تجاربكم مع فكرة الـ Serverless وهل طبقها أحدكم في بيئة عمله؟ كيف كانت انعكاس هذا الشيء على الكلفة؟


obahareth أضف ردا

طبقناها في تام.

١. نصيحتي مع استخدامها ان تستخدمها مع الاستضافة السحابية كلياً. لا تحاول تستخدم معها RabbitMQ مثلا, استخدم Amazon SQS, و مثل هذه الخدمات ضرورية لتوزيع العمل بشكل جيد و مفهوم بين عدّة Lambdas.

٢. اذا وصلت حدود ال concurrency لازم تتواصل مع Amazon و ممكن يرفضوا طلب الزيادة.

٣. جدا انصح استخدامها مع اطار عمل مثل serverless.

٤. اختبار الكود و هو موزّع بين عدّة Lambdas يصبح امر صعب جدّاً.

٥.الدرس المهم بالنسبي لي انّي أفضّل استخدامها لبناء خدمات صغير مساندة لتطبيقات, و اذا كنت احتاج ابني تطبيق كامل serverless, فحالياً لا يوجد بديل لل Google App Engine.

٦. لا يوجد اي طريقة لتماثل طريقة تشغيل ال Lambda اثناء التطوير, كمثال واحد فقط و هو اعادة استخدام الحاويات مما يؤدي الى استحالة مماثلة ال Lambda اثناء التطوير. و في اشياء ضروري تجربها على ال lambda مباشرة. و تجرب اذا اساليب استخدام الحاويات تتعارض مع ال code الحالي ام اذا تحتاج تعدّل عليه. بعض المكتبات تفشل تماماً في هذه البيئة.

خدمات مساندة مثل ماذا؟ لو تضرب لنا أمثلة توضح الموضوع أكثر.

obahareth أضف ردا

بعض الأمثلة:

١. عندما يتم رفع صورة على S3, اعمل نسخ مصغّرة (thumbnails) منها و احفظها في S3.

٢. Microservice لإرسال ايميلات لأي عنوان عن طريق Mandrill, فقط ترسلها العنوان, المتغيرات, و اسم القالب.