في هذا السلسلة سأتحدث عن مباديء بُنيت عليها او على الاقل اشتهرت أغلب التقنيات او المنتجات التي ترونها في السنين الاخيرة خصوصاً فيما يتعلق بالCloud او تطوير البرامج لتصبح Cloud Native. و سنعرف ان ذلك لم يكن مصادفة او مجرد تقليد.
ربما اغلبكم يعرف شركة الاستضافة Heroko هذه الشركة تدير عشرات الملايين من التطبيقات و من خلال مراقبتهم للبرمجيات المرفوعة لديهم وجدوا ان هناك 12 مبدء يجعل من هذه البرمجيات مناسبة للCloud لتصبح software-as-a-service SaaS و اطلقوا مصطلح منهجية الـ The 12 Factor App
اول مبدء هو الCodebase بمعنى انه يجب ان يكون السورس محفوظ في نظام لإدارة السورس كود مثل Git او Subversion أو Azure Ops او اي نظام Source Safe آخر بحيث انه لكل App يوجد Codebase خاص له , بدون مشاركة مع اي App أخر. يسهل فيه عمل Build متى ما أحتجنا بطريقة آلية.
بعد تجهيز الCodebase نحتاج إلى ان عرف ماهي الاشياء التي يعتمد عليها ذلك الكود ليعمل و هنا يأتي ثاني مبدأ و هو الDependencies و يعني أن علينا ان نحتفظ بمكان نعلن فيه عن جميع المكتبات التي يحتاجها الكود و يكون هذا الإعلان في ملف مستقل خارج الكود.
مثلما تجدون في اغلب المشاريع البرمجية يكون هناك ملفات مستقلة كالتي تستخدمها pip مثل ملف requirement.txt او ملفات gradle في جافا أو NuGet dependencies في NET. و هذا يفيد لتسهيل مرحلة الBuild.
كما فعلنا مع الDependencies و فصلناها عن الكود كذلك علينا ان نفعل مع الConfigurations. اي معلومات تخص البيئة مثل عناوين IPs او Connection Strings اوURLs تخص اي نظام خارجي في الشبكة يجب ان تكون في مكان خارج الكود .. هذا المبدأ الثالث Config و هذه تخدم مرحلة الDeployment.
بعد فصل الConfiguration اصبحت الانظمة الخارجية قابلة للتركيب Attachable من خارج الكود مثل قواعد البيانات , مزودات البريد الإلكتروني أو الاشياء الخاصة بالlogging. لذا علينا ان تكون برامجنا مستقلة حين بنائها لا مربوط بتقنية معينة
, إن كنا نستخدم MySQL و حولنا إلى Oracle او حتى إلى NoSQL Database فيفترض ان نغير في الConfig بدون اي تغيير في الكود باستخدام Dependency Injection او مثلا بالEvents Sourcingهذا المبدأ هو الرابع و يسمى Backing services. فخلال الRun إن اضطررنا للتغيير فيجب ان لا يكلفنا شيء.
هذه اول 4 مباديء سأكتفي بها الليلة. ما ذكرته مباديء عامة لكن هناك تقنيات و Best practices لكل نقطة. لاحظوا ان النظام كلما كان مفككاً او منفصلاً Decoupled و غير معتمد أو متصل مباشرة ببعضه كلما كان أفضل و قابل للتوسع . ( سأكمل بقنية المباديء في سلسلة قادمة ) دمتم بخير.
جاري تحميل الاقتراحات...