في 2011 في الوقت اللي بدأ يطلع فيه platform as a service وبدأ الناس تنقل من انها تأجر servers وتconfigure بنفسها لانها تستعمل حاجات زي Heroku حيث الinfra بتبقا automated وعمرها قصير (يعني مش نفس المكنة هتفضل قاعدة معاك.. هتموت والكود بتاعك هيشتغل على مكنة تانية) .. كان في مشاكل من نوعية ان الحاجة بتشتغل تمام على الmachines بتاعة الdevelopers بس بيشتكوا انها مش شغالة في Heroku وكان في ناس بتواجه friction كتير ومبيعرفوش يطلعوا حاجة الا بطلوع الروح ..
مهندسين Heroku جمعوا اكتر الpatterns المشتركة بين الapps اللي نجحت تscale بسهولة وتdeploy بسلاسة وسجلوها .. آدم ويجينز (Cofounder of Heroku) نشر الخلاصة في مانيفستو اسمه 12 Factor app بيوضح اهم المعايير والpatterns اللي لازم يمشي عليها اي system عشان يبقا cloud-native, scalable, maintainable, portable
هي صغيرة مش طويلة وتقدر تقراها في قعدة واحدة (اللينك تحت).. الحاجات اللي بيناقشها وبيجاوب عنها هي :
1. Codebase
هل المفروض يكون في اكتر من codebase لنفس الapp؟ ولا يكون اكتر من app على نفس الcodebase؟ هل لو عندك كود مشترك بين اكتر من codebase او اكتر من app تهندله ازاي؟ بgit submodule ولا library ولا تعمل ايه؟
2. Dependencies
المفروض تظبط الdependecies بتاعة الapp ازاي؟ وايه الفرق بين حاجة زي express وحاجة زي curl.. ولو انت محتاج system tool زي curl تتصرف فيها ازاي؟
3. Config
ايه هو الconfig والمفروض تتحط فين وايه استخداماتها؟ ايه هي العلامة اللي بتقول ان انا مهندل الموضوع ده كويس؟
4. Backing Services
ايه هو الbacking service؟ هل المفروض الapp بتاعي يتعامل مع الlocal والthird party services بشكل مختلف؟ هل لو الداتابيز وقعت لسبب ما وحطينا واحدة مكانها هل ده هيتطلب تغيير في الكود؟
5. Build, Release, Run
ايه هو الفرق بين الbuild والrelease والrun؟ هل لو ريليز اتعمل وعايز تعدل عليها تقدر تعدل عليها هي نفسها ولا لازم تطلع واحدة تانية؟ هل عندك release management tool تقدر ترجعك للريليز بتاعة امبارح لو لقيت مشكلة النهاردة؟
6. Processes
لو في اكتر من بروسيس شغالين.. هل المفروض يشيروا اي داتا مع بعضهم ولا بيشيروا الكلام ده عن طريق داتابيز؟ لو انت معتمد على ان في values متخزنة في الlocal files او الميموري والسيرفر رستر ايه اللي هيحصل؟ هل انت معتمد على اي sticky sessions عشان تخلي اليوزر مربوط بنفس الserver instance ولا ممكن اكتر من instace تتعامل صح مع نفس الuser؟
7. Port Binding
الapplication بتاعك self-contained ويقدر يشيل نفسه بنفسه وهيlisten على الport ويهندل الريكويستات ولا لازم يتحط جوا حاجة زي Apache HTTPD او Tomcat عشان تقومه
8. Concurrency
هل انت معتمد ان عندك سيرفر جواه threads كتير بيديروا بعض داخليا؟ ولا كل حاجة process لوحدها؟ فلو الضغط على الapi عالي بس الbackground job worker قليل ممكن اشغل 10 instances of the api واسيب واحدة بس worker؟ طب لو هعمل كده هل في نسخة معتمدة على التانية والداتا موجودة جوا الprocess ولا جوا database؟
9. Disposability
هل الprocess disposable ؟ هل لما بتقوم بتقوم بسرعة ولا عشان نعمل تعديل لازم نستنى وقت طويل تStart تاني؟ هل لو قفلنا api بروسيس بس في ريكويست شغال ايه اللي بيحصل؟ لو قفلنا worker process وفي job شغالة ايه مصيرها؟
10. Dev/Prod Parity
ايه هو حجم الgap بين الlocal env والproduction؟ هل الكود بتاعك بيطلع بعد اسابيع ولا بعد ساعات؟ هل اللي بيعملوا Deploy للكود هم اشخاص مختلفين عن اللي كتبوا الكود؟ هل صح انك تكون شغال sqlite مع ان الproduction شغال ب postgres؟ حتى لو مستخدم library زي orm بتabstract الdetails دي زي ActiveRecord؟
11. Logs
هل الapp شايل هم ادارة الlogs وتخزينها في المكان المناسب؟ ويا ترى لو كبرت هيحصل فيها ايه؟ ولو بdebug حاجة وعندي عشر سيرفرات بssh على كل سيرفر واشوف الlogs؟ ولا الapp بيرمي الlogs في الstdout وحد تاني هو اللي بيلمها زي docker وبيسلمها لData collector زي Fluentd اللي بدوره بيرميها في مكان centralized زي elastic search؟
12. Admin Processes
لو انت عندك one-off task زي انك تrun migration او تصلح داتا بايظة او تdebug حاجة على السيرفر هل بتعمل بتconnect على الdatabase من لابتوبك وبتعمل ده؟ ولا بتrun ده من خلال السيرفر عشان تتأكد انه هيشتغل من نفس الrelease بنفس الconfig بنفس الenv عشان تقلل الcompatibility issues ؟
https://t.co/CmWtUnEDS1
قراءة ممتعة
انا عايزه اقعد مع حد يقنعني بجدوي الحياة عشان انا والله حاسة بعدمية مخلياني مش فاهمة حتي انا بتنفس ليه، ليه احنا موجودين؟ طب ما لو كده كده هنموت طب ما نموت دلوقتي، اين القيمة وسط كل هذا البؤس و السعادة اللي بنحسها دقيقتين و الحزن اللي مكمل معانا بالشهور و المعاناة التي لا تنتهي
التحدي اليومي في حياة البالغين الكاذبة هو غياب عواقب ملموسة على المدى القصير
مفيش مادة هتشيلها لو مذاكرتش
مفيش أهل هيأنبو لو ملتزمتش بشيء ما
كل ما ستفعله ستلاقي عواقبه وحدك وبعد زمن
@AzDulazD7 @M7_Mekky ماهي دي النقطه اللي بتكلم عليها
هتيجي عند وقت وهيحصلك fatigue وهتكتشف انك كنت بضيع وقتك في شيئ مفهوش اي فايده مجرد متعه لحظيه وهتندم على الوقت ده
الوقت هينصف المحتوى اللي بيقدمه لؤي فوزي واللي زيه وهيعيش للابد ودا شيئ مثبت ١٠٠% الباقي هيتنسي لانه لحظي