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, فقط ترسلها العنوان, المتغيرات, و اسم القالب.

بشكل جانبي

يبدو أنك لاتحتاج إلى Lambda كونك تملك مدونة ثابتة (أفترض) ولايوجد بها أمور ديناميكية

لذا أنصحك بشيء ثابت مباشرة، يمكنك بناء قالب بسيط على gatsbyjs كتابة كامل المحتوى الخاص بك على ملفات md أو في منصة مثل contentful (في الخطة المجانية) واستضافة كل شيء في netlify (استضافة مجانية) (ولو كنت تملك أمور ديناميكية، يمكنك استخدام netlify functions والتي هي ببساطة عبارة عن abstraction فوق lambda وتتيح لك)

netlify تملك خدمة CI يمكن ربطها بضغطة زر مع contentful و gatsbyjs بحيث بمجرد تحريرك لشيء ما، يتم بناء نسخة جديدة من موقعك ورفعها اوتوماتيكيا ل netlify

نصيحة جيدة و من الممكن استخدام Netlify CMS أيضا كبديل ل Contentful. ال JAMStack رهيب و سريع و موفّر إذا عندك build pipeline رهيب مثل Netlify.

ألا تلاحظون أن هذا مجهود كبير من أجل مدونة؟ كوني مبرمج (معتزل) أتفهم عشق التفاصيل اللطيفة هذه والسحر الذي يدور في الخلفية، لكن في بعض الأحيان الخيار الواضح مثل وورد بريس ملائم لي كوني لا أريد تضييع الوقت في تعلم الكثير من أجل مدونة.

هذا صحيح

لماذا تضيع حياتك بمثل هذه التفاصيل

أنا سأبني أول مدونة لي بعد ست سنوات منذ أن بدأت البرمجة والتطوير، خلال الست سنوات الماضية عملت بشكل مجمل على منصة ووردبريس، ولكن سأبني إنطلاقا مما قلته في الأعلى، هذه التفاصيل ليست فعليا تفاصيل معقدة إن كنت تملك خبرة بسيطة في جافاسكربت وفي سطور الأوامر.

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

يجب أن تتفهم أيضا أني لن أقترح إطلاقا شيء كهذا لشخص ما خبرته هي التدوين فحسب، أنا فقط اقترحت هذا الامر لانك تسأل عن serverless و lambda والتي تتطلب مستوى خبرة أكثر بكثير من gatsbyjs

هي ليست معقده كما تبدو فقط مولد صفحات ستاتيكيه و Netlify ما تحتاجه

مثلا مدونتي استخدم hugo و Netlify من اجل الاستضافه و كذالك استخدم دومين فرعي الخاص بهم

@assassinateur‍ @medo baayou‍ 

لعلي لم أكن واضحاً. عملية بناء مدونة ليست بالأمر المعقد كما تعرفون، لكن ماذا يحدث حين تريد أن تطور أو تضيف بعض المميزات التي لم تكن جزءاً من الفكرة الأساسية؟ هذا الشيء سيحدث باستمرار، ولذلك ستجد نفسك في نهاية الأمر تقوم ببناء أمر أكبر من مجرد مدونة، ويصبح مشروعاً مستمراً.

أفضل أن أتخلص من هذا الصداع كون البدائل متوفرة لأركز على الهدف الأساسي وهو بناء مدونة...أما البرمجة سأتركها لمشاريع خاصة بعيداً عن اعادة اختراع العجلة.

Serverless ليست تقينة محصورة ل Lambda او الفكرة القائمة عليها lambda وانما هي في كون برنامجك لا يعمل على سيرفر محلي و يكون كله CLOUD BASED SOLUTION مبني على خدمات Software as service اي انك تستخدم خدمة امازون للتخزين و خدمة اخرى مثل Fire base لكي تقدم خدمة اشعارات لبرنامج او شيء من هذا القبيل.

حسنا الآن Lambda ما الذي تساعدك به حقا هي ان لديك service او خدمة جدا ثقيلة في برنامج او عليها Requests كثيرة فتعمل Lambda على high compute power, intensive load balancing with zero down time for cretin time.

تقدم خدمات ايضا مثل التواصل مع خدمات داخلية من امازون كالسماع ل ملفات جديدة على اس ثري او errorlogs على كلاود ووتش الخ... ولكن لا احبذ استعمالها لشيء مثل انك تريد ان تقوم بعمل جعل سيرفر نود يعمل عليها فهي ايضا مكلفة بعض الشيء :)

قمت ايضا بتجربتها من قبل في مشروع التخرج الخاص بي ل عمل ستريم ل فيديوهات اون لاين مثل هولو او نيتفلكس.

وكيف كان الأداء؟ ياترى ماهي الأدوات / أطر العمل التي استخدمتها لبناء خدمة الستريم؟

ar_syria أضف ردا

استخدم معمارية مشهورة اجعل Lambda تقوم بالسماع للفيديوهات الجديدة على S3 ومن ثم اقوم بارسالها الى AWS trancoder لانشاء اكثر من من نسخة للفيديوهات و من ثم اقوم بارسالها الى العميل عن طريق CDN.

كلها مبنية ب Node و AWS

شيء شبيه بهذا

هي ايضا جيدة للاستخدام الخفيف, لأنها ما تكلف شيء الا بعد مليون Request.

أنصح باستخدامها مع Golang بدلاً من Nodejs

لكن عليك ان تعلم ان Serverless framework تدعم الـ Local Testing لـ Node, Python لكن ليس لـ Golang

او يتوجب عليك استخدام SAM مع Docker وهو أمر مهلك ههه

أو اذا أصررت على استخدامها مع Node.js فاستخدم معها Webpack أو أي bundler ولا تقوم بضغط الـ Lambda مع الـ dependencies


مقالة جميلة:

هل ممكن ان تكتب لي عنوان الموقع الذي برمجته با Node.js حتى نطلع عليه اخي ثمود.

thamood أضف ردا

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

هل في احد فاهم يعطيني دروس عن ال serverless

-1

جربته ... اوفضل servermore