جدول المحتويات
أفضل توليفة لتقانات تطوير تطبيقات الويب لعام 2010
السلام عليكم ورحمة الله وبركاته،
أيامٌ قليلة تفصلنا عن نهاية العام، فكانت لي هذه الوقفة مع ما تعلّمته خلال هذه السنة وما رغبت بمشاركة مطوّري الويب به.
كان هذا العام طويلا فعلا بالنسبة لي، فقد شاركت خلاله بتطوير أربعة تطبيقات ويب عامة يتراوح عدد زائريها من عشرة آلاف إلى ربع مليون زائر. وكان التطبيق الأخير الذي قُمت بتنفيذه هو موقع مقولة غير الربحي.
لم تكن المهمّة في كل واحدة من هذه التطبيقات سهلة أبدا.
ولا تستغربوا أنّني وفي كل واحد منها قُمتُ بدراسة طبيعة التقانات1) المثالية التي يجدر استخدامها. أي أنّني وعلى رأس كل مشروع جديد، أُعيد حساب الأمور من الصفر، وأبذل الجهد والوقت في تقييم عدد من التقانات التي يُمكن استخدامها و تجربتها ومن ثم اختيار توليفة معيّنة لاعتمادها في المشروع.
يقولون، إذا أردت أن تكتب تطبيقا ناجحا فاتبع هذه المراحل : أولا - عليك إن توصل التطبيق لحالة العمل - مهما كانت. 2) ثانيا - عليك أن تضمن بأن تطبيقك يعمل بشكل جيد وخال من العيوب. 3) ثالثا - عليك أن تضمن بأن تطبيقك يعمل بسرعة! 4) ولكن هذه السنة باتت الخطوة الثالثة هي الأكثر صعوبة، خاصة مع وجود الكثير من التطبيقات التي قمت بتطويرها في السنوات الماضية طور الانتاج الحي 5)، وأنني لم أكن مسرورا لا بسهولة التطوير عليها نظرا لتعقيدها ولا بأدائها. لذلك كان تركيزي على بساطة وسرعة التطوير وتفوق الأداء.
ومن نافلة القول، أنني لا أُعني في بحثي وتقييمي للتقانات سوى بالبرمجيات الحرة والمفتوحة المصدر، ولا اعتمد البرمجيات المغلقة أو المحتكرة بتاتا. نظرا لتفوق البرمجيات الحرة الكبير عليها.
وقد آليت أن أكتب هذا المقال باللغة العربية - بالكامل - حيث أنّني اعتدت في الماضي على التدوين بالإنجليزية. ولمعرفتي أنّ العربية قد تبدو صعبة مع استخدام بعض المصطلحات غير المشهورة؛ لذلك وضعت قائمة في ذيل المقال بالكلمات العربية وما يقابلها من كلمات ومصطلحات إنجليزية.
وأود أن ألفت الانتباه بأن الآراء في هذه المقالة تعبّر عن رأيي الشخصي البحت، و لا أقصد به إثارة النعرات بشأن التقانات و مقابلتها مع بعضها. وقد تكون التقانات التي لم أقم باختيارها أفضل من تلك التي اخترتها. لذلك أرجو المعذرة من أي شخص قد لا يُعجبه ما اخترت وما لم اختر.
لُغةُ البرمجة
في السنوات الماضية كُنت من مُشجّعي جافا6)، وأُعجبت كثيرا بـ جروفي7) و جريلز8)، وكُنتُ قبلها من مشجّعي روبي و ريلز9). وقد نَفّذتُ عدّة مشاريع في كل منها. ولكن هذه السنة كان الأمر مُختلفا، وارتأيت العودة إلى لغة بي أتش بي10). والحقيقة أنني كُنت دائما أُهمل لغة بي أتش بي، فعندي من الكوابيس ما يكفي للنّصوص المصدرية المعكرونية11)! تجعلني أتقلّب في فراشي عندما أنام. ما لم يُعجبني في لغة بي أتش بي هو معكرونيتها الزائدة والتي تُذكّرني بلغة فيجوال باسيك12). فقد حدث أنّني خبرت تطوير مشاريع في مثل هذه اللغة في الماضي وكانت النتائج مأساوية.
المهم، ما استرعى انتباهي ل بي أتش بي هذه المرّة، هو وصول اللغة إلى مستويات متقدّمة من النضوج (خصوصا بعد الإصدارة 5.3)، فمن دعم ممتاز للبرمجة الكائنية (أو الشيئية)13) إلى تطوّر واضح على مستوى الأداء وخاصة بعد إطلاق خاصية تخبئة بي أتش بي البديلة (والمسماة اختصارا بـ أي بي سي)14). ولم يفُتني الاخذ في عين الاعتبار الباع والانتشار الواسع لهذه اللّغة وتوفّر عدد مهول من المكتبات في كل ما يخطر على بال. ليس هذا فقط، فتوجّهي إلى التعامل مع بي أتش بي، جاء بعد عوائق كأداء واجهتني في أداء كُل من جافا (والجروفي والجريلز) و روبي وريلز. فالحق، وبعد تجربة مريرة، أن أي منهما لا يصلح أبدا لتطبيقات الويب العامة، إلاّ إذا كان بحوزتك تمويل ضخم يغطّي الاحتياج إلى توفير خوادم15) ذات مواصفات جبّارة. أي أنّها فشلت في اختبارات الأداء بجدارة.
لم أغفل عن اعتبار لغة بايثون16)، خاصة أن صيتها قد ذاع مؤخّرا، ولكنّ معدتي لم تستسغها. بالمناسبة عند تعاملي مع التقانات الجديدة فإنّني أُصاب عند التعامل مع بعضها بحالة من عسر الهضم (المعدة والأمعاء) وأقصد ذلك حرفيا وعرفت أن بايثون لا تُناسِبني بالإضافة طبعا إلى أسباب تقنية أخرى لست بصدد ذكرها هنا.
المهم، أنّ الخيار في باكورة المشاريع بداية هذا العام وقع على بي أتش بي، ووضعتها في الاختبار العملي، وقمت بإعادة كتابة بعض التطبيقات من جافا وجروفي وروبي إلى بي أتش بي، وخمّنوا ماذا كانت النتيجة؟! فاقت توقعاتي بكثير! استطاعت تطبيقاتي الجديدة العمل مكان القديمة وبكفاءة تصل إلى عشرة أضعاف. تخيّلوا أنه بدلا من استئجار عشرة خوادم لخدمة عدد معين من المُستخدمين، اكتفيت بواحد وبأداء ممتاز. في تلك اللحظة أدركت خطأ المقولة الشائعة عن أن بطء لغة جافا وحاجتها إلى المزيد من الخوادم يسدُ عنها سُرعة التطوير. بل على العكس، فالتطوير بلغة بي أتش بي كان أسرع، والنتيجة نجاحٌ باهر ورضا الزبون ورضا زوّار الموقع.
إطار الويب
موجة التطبيقات اللاحقة كانت أكثر تعقيدا، فبدأت أفكّر في اعتماد إطار تطوير ويب17)، وقمت بمعاينة الكثير من إطارات تطوير الويب على بي أتش بي، من كيك18) إلى إجيناتور19) إلى سيمفوني20) إلى أخيلوس21) وغيرها الكثير، وكان ممّا استرعى انتباهي واهتمامي من بينها إطار الويب ييي22). وكان أسلوب العمل عليه وفلسفته وطريقة تصميمه الأقرب إلي. حتى أنّني شعرت بعد فترة قصيرة من العمل معه، كأنّني أعرفه منذ زمن بعيد. ألا يحدث ذلك معكم عندما تقابلون شخصا لأول مرة وتشعرون بتناغم معه
ييي حقّقت لي مجموعة من المتطلّبات أوّلا: أن تكون خفيفة على المعدة … أقصد على المعالج. لا أريد أن أتعامل مع طبقات وطبقات من النصوص المصدرية والخوارزميات. بل أردتها بسيطة ومباشرة. ثانيا: أن تكون أرضيتها ضحلة وشفافة، مثل أرضية شواطئ المالديف على خلاف أي إطار ويب آخر، ففي ييي يمكنني الغوص بسرعة داخل نصوصها وخوارزمياتها وفهم كيفية عملها، وتعديلها إن احتاج الأمر. ثالثا: أن تعظم من شأن البرمجة الشيئية، وتعود هذه المسألة إلى مزاجي ومحبّتي وسرعة تعاملي مع الأنظمة الشيئية. رابعا: أن تستفيد مِن خصائص بي أتش بي 5 الجديدة وأن لا تكون متوافقة مع بي أتش بي 4. فالتوافق مع بي أتش بي 4 يعنى اضطرار مبرمجي الإطار إلى استخدام التقنيات القديمة وعدم الاستفادة من الجديدة. غطّت ييي كافة متطلّباتي، بل زادت عليها بأن جعلت من تجربة البرمجة مُتعة فريدة.
وقد قُمت كذلك بتقييم استخدام دروبال23) (نظام إدارة المحتوى24)، ويوصف الآن بأنّه إطار إدارة المحتوى 25) ). ولكن لم يتحمّله جهازي الهضمي لأكثر من ساعة، فالنظام بطئٌ جدا جدا (وأعني ذلك) بالإضافة إلى التعقيد الشديد في نصوصه المصدرية والصعوبة الكبيرة في تطويعه. لذلك آثرت عدم الاعتماد عليه. وأظن أنه يصلح لمن ليس لديهم خبرة طويلة في البرمجة أو من يحتاج إلى إنشاء موقع أساسي بسرعة كبيرة.
ومن الجدير بالذكر أن إطار الويب ييي يتضمن إطار الجافاسكريبت جيه-كويري 26) وإطار السي أس أس بلوبرنت 27).
نظام إدارة البيانات المخبئة
أصبحت مسألة إدارة البيانات المخبئة28) حاجة أساسية لأي تطبيق ويب عام، كان ميم-كاشد29) هو الخيار الأول لسبب بسيط، وهو جودة اندماجه مع بي أتش بي. لولا ذلك لكان خياري هو ريديس30)، والذي يتفوّق على ميم-كاشد في الكثير من الأوجه ولكنّه لا يتناغم مع بي أتش بي بشكل أصيل كما يفعل ميم-كاشد.
قواعد البيانات
بالنسبة لقواعد البيانات العلائقية31)، فقد اعتمدت هذه السنة بوست جريس كيو أل32)، والتي تفوّقت بشكل كبير على ماي أس كيو أل33). طبعا ناهيك عن التخوّف من ماي أس كيو أل الذي أحدثه شراء أوراكل لـ صن. بوست جريس هي قاعدة بيانات ناضجة جدا، إن لم تكن الأفضل والأنضج من بين قواعد البيانات الحرة والمفتوحة المصدر. وفيها من الوثوقية ما يتفوّق على ماي أس كيو أل وفي أبسط الاختبارات. ومع أخذ الاعتبارات الصحيحة عند التصميم واستخدام العلاقات والفهارس، فإن أداءها يكافئ ماي أس كيو أل. وبالإضافة إلى بوست جريس فإنّني اعتمدت كذلك على قاعدة البيانات الشيئية34) الجديدة مونغو35)، والتي ساعدتني في تبسيط أحد التطبيقات وتحسين أدائه لغاية ثلاثين ضعفا. لا، هذا ليس خطأ مطبعيا. ولكن تبقى لقواعد البيانات الشيئية تطبيقات محدّدة، ولا أرى أنه يجدر استخدامها في كل الحالات. لذلك أبقيت على استخدام الاثنتين وبحسب الحاجة.
خادم الويب
كان ولا زال أباتشي36)، وحاولت كثيرا مع إنجن-أكس37) ذي السمعة الممتازة إلا أن محاولاتي لم تنجح، خاصة وأنه لا يدعم أتش تي أكسس38) ولا تعليمات الأباتشي التي تعوّدنا عليها وتعلّمناها على مدى السنين. ولكن يبقى إنجن-أكس الأرض التالية التي وضعت عيني عليها لأكتشفها، فقد استهوتني كثيرا فكرة اعتماده على تدفق البيانات اللامتزامن 39)، بدلا من فكرة الخيوط والعمليات40) في أباتشي والتي لا أحبّها كثيرا. وخاصة أيضا أنّني عرفت أن إنجن-أكس يعمل بوئام مع تقنية أف بيه أم41) في بي أتش بي والتي تمّ إطلاقها مع بي أتش بي 5.3.3 والتي تقدّم أفضل أداء مقارنة بي فاست سي جي آي42) أو مود_بي أتش بي43).
نظام التشغيل
كان ولا زال نظام التشغيل الحُر والمفتوح المصدر فيدورا44) جنو\لينكس45)! (استخدم إصدارة 64 بت فقط) فكفاءة عمل هذا النظام، ووثوقيته لا تقارن، بالنسبة لي، مع أي نظام آخر. أضف إلى ذلك معرفتي الطويلة والمُتراكمة في كل شبر منه وفي كل بُرغي وصمولة فيه. مكّنني كل ذلك، وخصوصا هذا العام إلى الوصول إلى مستويات قياسية في الأداء، حيث أنني أقوم بعد التنصيب الأوّلي بتجريد النظام من كافة التطبيقات والبرامج والحُزم، فيما عدا النزر اليسير والذي يلزم لتشغيل البيئة الأساسية بسطر الأوامر؛ وكل ما عدا ذلك أقوم بقطعه وحذفه. حتى انتهى بي الحال أن يستهلك النظام الخادم أقل من مئة ميغا بايت من الذاكرة، وأقل من واحد غيغا من القرص الصلب وعدد عمليات عاملة (نائمة في معظم الوقت) يقل عن الثلاثين. لن تُصدّقوا الأعاجيب التي فعلها هذا الإعداد، فمن جهة الأمان العالي، نتيجة عدم وجود أي تطبيقات غير مستخدمة (بالإضافة طبعا لإعدادات جدار النار آي بي تابلز46) ) إلى الأداء المذهل في ساعات الذروة. حيث أن خوادمي تقضي جُلّ وقتها تتفكّر في ملكوت الله، حتى في قمّة ساعات الذروة، فإنها لا تستهلك معدل حِمل 47) أكثر من واحد!
وقفة مع الحوسبة السحابية
الشركات التي قمت بمساعدتها خلال هذه السنة لديها من بضعة خوادم وحتى ستون خادما حقيقيا 48). لذلك كان حتما علي وكجزء من مسح التقانات المتوفرة المرور عبر تقانات الحوسبة السحابية 49). والحق أنني بعد التجربة والتمحيص رفضت اعتمادها بتاتا لعدة أسباب؛ أولها، أن أداء أنظمة التشغيل الافتراضية 50) في الحوسبة السحابية غير مضمون، فمعظم الخوادم الفعلية تستضيف نظامين افتراضين اثنين أو أكثر، واذا حدث أن النظام الأول احتاج إلى دفق بيانات كبير 51) أو قدرة معالجة فهذا حتما سيؤثر على أداء النظام الافتراضي الثاني. أي وببساطة أنه لا يُمكن الاعتماد عليها في ساعات الذروة. ثانيها، أن عدد الشركات التي توفر هذه الخدمة محدود، حيث تستأثر أمازون بحصة الأسد؛ ووضع كافة الأنظمة السحابية عند مورد واحد له طريقة تعامل خاصة به، وانعدام المنافسة المفتوحة يجعل منه أمرا غير مستساغ. وثالثها، أن االاحتمالية الإحصائية لسقوط نظام افتراضي هي أعلى بكثير من الحقيقي، واحتمالية عودته إلى طور العمل أقل بكثير من الحقيقي. - وهذا مستقى من تجربة مطولة استخدمت فيها عشرات النسخ من الأنظمة الافتراضية - ولدي العديد من الأسباب الأخرى لرفضها. هذا كله بالرغم من الضجة الإعلامية الكبيرة المُحيطة بها، فأنا أرى أن وقتها لم يحن بعد. ولكن لم يمنعني هذا من استخدام أنظمة افتراضية في *بيئات التطوير* حيث القدرة على ضبط كافة الإعدادات والبرمجيات، واستخدم أساسا كي في أم 52). ويُناقش بعض المحبين للحوسبة السحابية أن فكرتها في خلق نسخ و تدميرها بحسب الطلب فيما يسمى بقابلية التوسع 53)، فبذلك لا يهم أداء الواحد منها أو احتمالية سقوطها، واجابتي على ذلك، هو أن التقانات المتوافرة اليوم ليست مُعدَّة للعمل في هذا الطور. وسيبقى عنق الزجاجة في بعض النقاط المفصلية في التطبيق، كالحاجة إلى مزامنة المعلومات وقواعد البيانات بشكل عام. ولغاية هذا اليوم، فإن وجود نظام ليس لديه أية نقطة سقوط وحيدة 54) هو مسألة فيها تحدي تقني كبير، إن لم تكن أقرب للمستحيل. ومعلومة أخيرة أضيفها أن الكُلفة الحالية لاعتماد الحوسبة السحابية هي أكثر بكثير من الحوسبة المعتمدة على خوادم حقيقة عندما يتساويان في مستوى الخدمة التي يتم تقديمها. وهذا أيضا بناء على قراءات عملية لا نظرية.
بيئة التطوير
بيئة التطوير 55) التي أفضّلها من بين كل ما هو متوفر هي استخدام محرر النصوص “فيم”56) من سطر الأوامر. أما بالنسبة للبيئة الرسومية فقد اعتمدت المحرّر جي-إيديت57) ضمن بيئة إكس إف سي إي58) (وليس غنوم59) ولا كي دي إي60) ). ولم يرق لي أبدا استخدام نت-بينز61) أو إكليبس62) فهي بطيئة ومملّة. وقد بدأت هذه السنة باستخدام نظام ضبط وإدارة النصوص المصدرية جت63) بديلا عن إس في أن64) والذي عمل لسنوات طويلة على أحسن ما يُرام، ولكن ما شدّني إلى جت هو السرعة والأداء وصغر مساحة التخزين والتخلّص من مجلّدات إس في إن التي كانت موجودة في كل مكان.
الخُلاصة،
عدم الاهتمام بحسن الأداء في تطبيقات الويب العامة سيلقي بتطبيقك في الهاوية، بغض النظر عن تميز الخصائص أو المحتوى أو الإخراج الفني؛ فكل تلك الأمور مهمة ولكن أن يكون تطبيقك جاهزا ليؤدي مهمامه في ظروف الازدحام الشديد ليس مسألة ثانوية - إلا، طبعا إذا كنت هاويا تقوم بتجريب بعض الأفكار-.
كانت توليفة هذه السنة بامتياز توليفة البساطة والسهولة والأداء العالي.
ولا أنكر أنني أشعر بالرضى الكبير عن التقانات التي عَمِلتُ عليها، وأتطلّع إلى تنفيذ المزيد من المشاريع عليها في المستقبل. كما أتطلّع إلى التعرّف على المزيد من إبداعات التقانات الجديدة في عالم البرمجة.
وإلى لقاء آخر في السنة القادمة … بحول الله. دُمتم بخير.
عن الكاتب
كفاح عيسى، مستشار في المعلوماتية ومبرمج مخضرم. يعمل في شركة تقانات البرمجيات الحرة في عمّان وقام بتطوير وتنفيذ العديد من التطبيقات التجارية لشركات كبرى.
جميع حقوق النشر والتوزيع ممنوحة ضمن شروط رخصة وقف العامة.
قائمة الكلمات والمصطلحات مع الكلمة الإنجليزية المُناظرة لها
تقانات | جمع تقانة وهي technology |
---|---|
تقنيات | جمع تقنية وهي technique |
بي أتش بي | PHP |
جافا | Java |
جروفي | Groovy |
جريلز | Grails |
روبي | Ruby |
روبي وريلز | Ruby on Rails |
بايثون | Python |
النص المصدري | Source Code |
النص المصدري المعكروني | Spaghetti code |
البرمجة الشيئية | Object Oriented Programming |
إطار الويب | Web development framework |
خادم | Server |
أداء | Performance |
ييي | Yii |
نظام إدارة المحتوى | Content Management System |
إطار إدارة المحتوى | Content Management Framework |
دروبال | Drupal |
كيك | CakePHP |
إجيناتور | CodeIgniter |
سيمفوني | Symfony |
أخيلوس | Akelos |
نظام إدارة البيانات المخبئية | Caching-system |
ميم-كاشد | memcached |
ريديس | Redis |
قواعد البيانات | Database Management System |
قواعد البيانات العلائقية | Relational Database Management System - RDBMS |
قواعد البيانات الشيئية | (استخدمت المصطلح رغم عدم دقته) Object Relational Database. or NoSQL. |
بوست جريس كيو أل | PostgreSQL |
ماي أس كيو أل | MySQL |
مونغو | MongoDB |
خادم الويب | Web server. Http Server |
أباتشي | Apache |
أتش تي أكسس | .htAccess |
إنجن-أكس | Nginx |
الخيوط والعمليات | Threads and processes |
أف بيه أم | Fast Process Manager - FPM |
فاست سي جي آي | FastCGI |
مود_بي أتش بي | mod_php |
فيدورا | Fedora |
جنو\لينكس | GNU/Linux |
التطبيقات | Applications |
الحُزم | Packages |
سطر الأوامر | Command line |
عمليات | Processes |
جدار النار | Firewall |
آي بي تابلز | IP Tables |
معدل الحمل | Load Average |
فيم | vim |
جي-إيديت | GEdit |
إكس إف سي إي | XFCE |
غنوم | Gnome |
كي دي إي | KDE |
نت-بينز | NetBeans |
إكليبس | Eclipse |