أدوات المستخدم

أدوات الموقع


docs:أفضل_توليفة_لتقانات_الويب_لعام_2010

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقة المراجعة السابقة
المراجعة التالية
المراجعة السابقة
docs:أفضل_توليفة_لتقانات_الويب_لعام_2010 [2011/01/01 23:16]
كفاح عيسى [إطار الويب]
docs:أفضل_توليفة_لتقانات_الويب_لعام_2010 [2015/04/23 00:19] (حالي)
سطر 1: سطر 1:
 +{{tag>​مقالات برمجة تطبيقات_ويب خوادم ويب}}
 +====== أفضل توليفة لتقانات تطوير تطبيقات الويب لعام 2010 ======
 +
 +
 +السلام عليكم ورحمة الله وبركاته،
 +
 +أيامٌ قليلة تفصلنا عن نهاية العام، فكانت لي هذه الوقفة مع ما تعلّمته خلال هذه السنة وما رغبت بمشاركة مطوّري الويب به. 
 +
 +كان هذا العام طويلا فعلا بالنسبة لي، فقد شاركت خلاله بتطوير أربعة تطبيقات ويب عامة يتراوح عدد زائريها من عشرة آلاف إلى ربع مليون زائر. وكان التطبيق الأخير الذي قُمت بتنفيذه هو [[ http://​maqola.org | موقع مقولة ]] غير الربحي.
 +
 +لم تكن المهمّة في كل واحدة من هذه التطبيقات سهلة أبدا.
 +
 +ولا تستغربوا أنّني وفي كل واحد منها قُمتُ بدراسة طبيعة التقانات((التقانات هي جمع تقانة وهي technology)) المثالية التي يجدر استخدامها. أي أنّني وعلى رأس كل مشروع جديد، أُعيد حساب الأمور من الصفر، وأبذل الجهد والوقت في تقييم عدد من التقانات التي يُمكن استخدامها و تجربتها ومن ثم اختيار توليفة معيّنة لاعتمادها في المشروع. ​
 +
 +يقولون، إذا أردت أن تكتب تطبيقا ناجحا فاتبع هذه المراحل : 
 +أولا - عليك إن توصل التطبيق لحالة العمل - مهما كانت. ((make it work))
 +ثانيا - عليك أن تضمن بأن تطبيقك يعمل بشكل جيد وخال من العيوب. ((make it work well))
 +ثالثا - عليك أن تضمن بأن تطبيقك يعمل بسرعة! ((make it work fast))
 +ولكن هذه السنة باتت الخطوة الثالثة هي الأكثر صعوبة، خاصة مع وجود الكثير من التطبيقات التي قمت بتطويرها في السنوات الماضية طور الانتاج الحي ((Life and in production))، وأنني لم أكن مسرورا لا بسهولة التطوير عليها نظرا لتعقيدها ولا بأدائها. لذلك كان تركيزي على بساطة وسرعة التطوير وتفوق الأداء. ​
 +
 +ومن نافلة القول، أنني لا أُعني في بحثي وتقييمي للتقانات سوى بالبرمجيات الحرة والمفتوحة المصدر، ولا اعتمد البرمجيات المغلقة أو المحتكرة بتاتا. نظرا لتفوق البرمجيات الحرة الكبير عليها.
 +
 +وقد آليت أن أكتب هذا المقال باللغة العربية - بالكامل - حيث أنّني اعتدت في الماضي على التدوين بالإنجليزية. ولمعرفتي أنّ العربية قد تبدو صعبة مع استخدام بعض المصطلحات غير المشهورة؛ لذلك وضعت قائمة في ذيل المقال بالكلمات العربية وما يقابلها من كلمات ومصطلحات إنجليزية.
 +
 +وأود أن ألفت الانتباه بأن الآراء في هذه المقالة تعبّر عن رأيي الشخصي البحت، و لا أقصد به إثارة النعرات بشأن التقانات و مقابلتها مع بعضها. وقد تكون التقانات التي لم أقم باختيارها أفضل من تلك التي اخترتها. لذلك أرجو المعذرة من أي شخص قد لا يُعجبه ما اخترت وما لم اختر.
 +
 +===== لُغةُ البرمجة =====
 + 
 +في السنوات الماضية كُنت من مُشجّعي جافا((Java))، وأُعجبت كثيرا بـ جروفي(( Groovy)) و جريلز((Grails))، وكُنتُ قبلها من مشجّعي روبي و ريلز((Ruby on Rails)). وقد نَفّذتُ عدّة مشاريع في كل منها. ولكن هذه السنة كان الأمر مُختلفا، وارتأيت العودة إلى لغة بي أتش بي((PHP)).
 +والحقيقة أنني كُنت دائما أُهمل لغة بي أتش بي، فعندي من الكوابيس ما يكفي للنّصوص المصدرية المعكرونية((Spaghetti code))! تجعلني أتقلّب في فراشي عندما أنام. ما لم يُعجبني في لغة بي أتش بي هو معكرونيتها الزائدة والتي تُذكّرني بلغة فيجوال باسيك((Visual Basic)). فقد حدث أنّني خبرت تطوير مشاريع في مثل هذه اللغة في الماضي وكانت النتائج مأساوية.
 +
 +المهم، ما استرعى انتباهي ل بي أتش بي هذه المرّة، هو وصول اللغة إلى مستويات متقدّمة من النضوج (خصوصا بعد الإصدارة 5.3)، فمن دعم ممتاز للبرمجة الكائنية (أو الشيئية)((Object Oriented Programming)) إلى تطوّر واضح على مستوى الأداء وخاصة بعد إطلاق خاصية تخبئة بي أتش بي البديلة (والمسماة اختصارا بـ أي بي سي)((Alternative PHP Cache - APC)). ولم يفُتني الاخذ في عين الاعتبار الباع والانتشار الواسع لهذه اللّغة وتوفّر عدد مهول من المكتبات في كل ما يخطر على بال.
 +ليس هذا فقط، فتوجّهي إلى التعامل مع بي أتش بي، جاء بعد عوائق كأداء واجهتني في أداء كُل من جافا (والجروفي والجريلز) و روبي وريلز. فالحق، وبعد تجربة مريرة، أن أي منهما لا يصلح أبدا لتطبيقات الويب العامة، إلاّ إذا كان بحوزتك تمويل ضخم يغطّي الاحتياج إلى توفير خوادم((Servers)) ذات مواصفات جبّارة. أي أنّها فشلت في اختبارات الأداء بجدارة.
 +
 +لم أغفل عن اعتبار لغة بايثون((Python))، خاصة أن صيتها قد ذاع مؤخّرا، ولكنّ معدتي لم تستسغها. بالمناسبة عند تعاملي مع التقانات الجديدة فإنّني أُصاب عند التعامل مع بعضها بحالة من عسر الهضم (المعدة والأمعاء) وأقصد ذلك حرفيا :-) وعرفت أن بايثون لا تُناسِبني بالإضافة طبعا إلى أسباب تقنية أخرى لست بصدد ذكرها هنا.
 +
 +المهم، أنّ الخيار في باكورة المشاريع بداية هذا العام وقع على بي أتش بي، ووضعتها في الاختبار العملي، وقمت بإعادة كتابة بعض التطبيقات من جافا وجروفي وروبي إلى بي أتش بي، وخمّنوا ماذا كانت النتيجة؟! فاقت توقعاتي بكثير! استطاعت تطبيقاتي الجديدة العمل مكان القديمة وبكفاءة تصل إلى عشرة أضعاف. تخيّلوا أنه بدلا من استئجار عشرة خوادم لخدمة عدد معين من المُستخدمين، اكتفيت بواحد وبأداء ممتاز. في تلك اللحظة أدركت خطأ المقولة الشائعة عن أن بطء لغة جافا وحاجتها إلى المزيد من الخوادم يسدُ عنها سُرعة التطوير. بل على العكس، فالتطوير بلغة بي أتش بي كان أسرع، والنتيجة نجاحٌ باهر ورضا الزبون ورضا زوّار الموقع.
 +
 + ===== إطار الويب =====
 + 
 +  ​
 +موجة التطبيقات اللاحقة كانت أكثر تعقيدا، فبدأت أفكّر في اعتماد إطار تطوير ويب((Web Development Framework))، وقمت بمعاينة الكثير من إطارات تطوير الويب على بي أتش بي، من كيك((CakePHP)) إلى إجيناتور((CodeIgniter)) إلى سيمفوني((Symphony)) إلى أخيلوس((Akelos)) وغيرها الكثير، وكان ممّا استرعى انتباهي واهتمامي من بينها إطار الويب ييي((Yii)). وكان أسلوب العمل عليه وفلسفته وطريقة تصميمه الأقرب إلي. حتى أنّني شعرت بعد فترة قصيرة من العمل معه، كأنّني أعرفه منذ زمن بعيد. ألا يحدث ذلك معكم عندما تقابلون شخصا لأول مرة وتشعرون بتناغم معه :-)
 +
 +ييي حقّقت لي مجموعة من المتطلّبات أوّلا: أن تكون خفيفة على المعدة ... أقصد على المعالج. لا أريد أن أتعامل مع طبقات وطبقات من النصوص المصدرية والخوارزميات. بل أردتها بسيطة ومباشرة. ثانيا: أن تكون أرضيتها ضحلة وشفافة، مثل أرضية شواطئ المالديف :-) على خلاف أي إطار ويب آخر، ففي ييي يمكنني الغوص بسرعة داخل نصوصها وخوارزمياتها وفهم كيفية عملها، وتعديلها إن احتاج الأمر. ثالثا: أن تعظم من شأن البرمجة الشيئية، وتعود هذه المسألة إلى مزاجي ومحبّتي وسرعة تعاملي مع الأنظمة الشيئية. رابعا: أن تستفيد مِن خصائص بي أتش بي 5 الجديدة وأن لا تكون متوافقة مع بي أتش بي 4. فالتوافق مع بي أتش بي 4 يعنى اضطرار مبرمجي الإطار إلى استخدام التقنيات القديمة وعدم الاستفادة من الجديدة. غطّت ييي كافة متطلّباتي، بل زادت عليها بأن جعلت من تجربة البرمجة مُتعة فريدة.
 +
 +وقد قُمت كذلك بتقييم استخدام دروبال((Drupal)) (نظام إدارة المحتوى((Content Management System - CMS))، ويوصف الآن بأنّه إطار إدارة المحتوى ((Content Management Framework)) ). ولكن لم يتحمّله جهازي الهضمي لأكثر من ساعة، فالنظام بطئٌ جدا جدا (وأعني ذلك) بالإضافة إلى التعقيد الشديد في نصوصه المصدرية والصعوبة الكبيرة في تطويعه. لذلك آثرت عدم الاعتماد عليه. وأظن أنه يصلح لمن ليس لديهم خبرة طويلة في البرمجة أو من يحتاج إلى إنشاء موقع أساسي بسرعة كبيرة.
 +
 +
 +ومن الجدير بالذكر أن إطار الويب ييي يتضمن إطار الجافاسكريبت جيه-كويري ((JQuery)) وإطار السي أس أس بلوبرنت ((BluePrint CSS Framework)).
 +
 +===== نظام إدارة البيانات المخبئة =====
 + 
 +أصبحت مسألة إدارة البيانات المخبئة((Caching-system)) حاجة أساسية لأي تطبيق ويب عام، كان ميم-كاشد((memcached)) هو الخيار الأول لسبب بسيط، وهو جودة اندماجه مع بي أتش بي. لولا ذلك لكان خياري هو ريديس((Redis))، والذي يتفوّق على ميم-كاشد في الكثير من الأوجه ولكنّه لا يتناغم مع بي أتش بي بشكل أصيل كما يفعل ميم-كاشد.
 +
 +===== قواعد البيانات =====
 +  ​
 +بالنسبة لقواعد البيانات العلائقية((Relational Database Management System))، فقد اعتمدت هذه السنة بوست جريس كيو أل((PostgreSQL))، والتي تفوّقت بشكل كبير على ماي أس كيو أل((MySQL)). طبعا ناهيك عن التخوّف من ماي أس كيو أل الذي أحدثه شراء أوراكل لـ صن. بوست جريس هي قاعدة بيانات ناضجة جدا، إن لم تكن الأفضل والأنضج من بين قواعد البيانات الحرة والمفتوحة المصدر. وفيها من الوثوقية ما يتفوّق على ماي أس كيو أل وفي أبسط الاختبارات. ومع أخذ الاعتبارات الصحيحة عند التصميم واستخدام العلاقات والفهارس، فإن أداءها يكافئ ماي أس كيو أل. وبالإضافة إلى بوست جريس فإنّني اعتمدت كذلك على قاعدة البيانات الشيئية((NoSQL,​ Object Oriented DBMS)) الجديدة مونغو((MongoDB))، والتي ساعدتني في تبسيط أحد التطبيقات وتحسين أدائه لغاية ثلاثين ضعفا. لا، هذا ليس ​ خطأ مطبعيا. :-) ولكن تبقى لقواعد البيانات الشيئية تطبيقات محدّدة، ولا أرى أنه يجدر استخدامها في كل الحالات. لذلك أبقيت على استخدام الاثنتين وبحسب الحاجة.
 +
 +===== خادم الويب =====
 +  ​
 +كان ولا زال أباتشي((Apache))، وحاولت كثيرا مع إنجن-أكس((Nginx)) ذي السمعة الممتازة إلا أن محاولاتي لم تنجح، خاصة وأنه لا يدعم أتش تي أكسس((.htAccess)) ولا تعليمات الأباتشي التي تعوّدنا عليها وتعلّمناها على مدى السنين. ولكن يبقى إنجن-أكس الأرض التالية التي وضعت عيني عليها لأكتشفها، فقد استهوتني كثيرا فكرة اعتماده على تدفق البيانات اللامتزامن ((Non-blocking I/O))، بدلا من فكرة الخيوط والعمليات((Threads and Processes)) في أباتشي والتي لا أحبّها كثيرا. وخاصة أيضا أنّني عرفت أن إنجن-أكس يعمل بوئام مع تقنية أف بيه أم((Fast Process Manager - FPM)) في بي أتش بي والتي تمّ إطلاقها مع بي أتش بي  5.3.3 والتي تقدّم أفضل أداء مقارنة بي فاست سي جي آي((FastCGI)) أو مود_بي أتش بي((mod_php)).
 +
 +===== نظام التشغيل =====
 +  ​
 +كان ولا زال نظام التشغيل الحُر والمفتوح المصدر ​ فيدورا((Fedora)) جنو\لينكس((GNU/​Linux))! (استخدم إصدارة 64 بت فقط) فكفاءة عمل هذا النظام، ووثوقيته لا تقارن، بالنسبة لي، مع أي نظام آخر. أضف إلى ذلك معرفتي الطويلة والمُتراكمة في كل شبر منه وفي كل بُرغي وصمولة فيه. مكّنني كل ذلك، وخصوصا هذا العام إلى الوصول إلى مستويات قياسية في الأداء، حيث أنني أقوم بعد التنصيب الأوّلي بتجريد النظام من كافة التطبيقات والبرامج والحُزم، فيما عدا النزر اليسير والذي يلزم لتشغيل البيئة الأساسية بسطر الأوامر؛ وكل ما عدا ذلك أقوم بقطعه وحذفه. حتى انتهى بي الحال أن يستهلك النظام الخادم أقل من مئة ميغا بايت من الذاكرة، وأقل من واحد غيغا من القرص الصلب وعدد عمليات عاملة (نائمة في معظم الوقت) يقل عن الثلاثين. لن تُصدّقوا الأعاجيب التي فعلها هذا الإعداد، فمن جهة الأمان العالي، نتيجة عدم وجود أي تطبيقات غير مستخدمة (بالإضافة طبعا لإعدادات جدار النار آي بي تابلز((IP Tables Firewall)) ) إلى الأداء المذهل في ساعات الذروة. حيث أن خوادمي تقضي جُلّ وقتها تتفكّر في ملكوت الله، حتى في قمّة ساعات الذروة، فإنها لا تستهلك معدل حِمل ((Load Average)) أكثر من واحد!
 +
 +
 +
 +===== وقفة مع الحوسبة السحابية =====
 +الشركات التي قمت بمساعدتها خلال هذه السنة لديها من بضعة خوادم وحتى ستون خادما حقيقيا ((Real, dedicated)). لذلك كان حتما علي وكجزء من مسح التقانات المتوفرة المرور عبر تقانات الحوسبة السحابية ((Cloud Computing)). والحق أنني بعد التجربة والتمحيص رفضت اعتمادها بتاتا لعدة أسباب؛ أولها، أن أداء أنظمة التشغيل الافتراضية ((Virtual Operating Systems)) في الحوسبة السحابية غير مضمون، فمعظم الخوادم الفعلية تستضيف نظامين افتراضين اثنين أو أكثر، واذا حدث أن النظام الأول احتاج إلى دفق بيانات كبير ((Intensive I/O)) أو قدرة معالجة فهذا حتما سيؤثر على أداء النظام الافتراضي الثاني. أي وببساطة أنه لا يُمكن الاعتماد عليها في ساعات الذروة. ثانيها، أن عدد الشركات التي توفر هذه الخدمة محدود، حيث تستأثر أمازون بحصة الأسد؛ ووضع كافة الأنظمة السحابية عند مورد واحد له طريقة تعامل خاصة به، وانعدام المنافسة المفتوحة يجعل منه أمرا غير مستساغ. وثالثها، أن االاحتمالية الإحصائية لسقوط نظام افتراضي هي أعلى بكثير من الحقيقي، واحتمالية عودته إلى طور العمل أقل بكثير من الحقيقي. - وهذا مستقى من تجربة مطولة استخدمت فيها عشرات النسخ من الأنظمة الافتراضية - ولدي العديد من الأسباب الأخرى لرفضها. هذا كله بالرغم من الضجة الإعلامية الكبيرة المُحيطة بها، فأنا أرى أن وقتها لم يحن بعد. ولكن لم يمنعني هذا من استخدام أنظمة افتراضية في *بيئات التطوير* حيث القدرة على ضبط كافة الإعدادات والبرمجيات، واستخدم أساسا كي في أم ((KVM)). ويُناقش بعض المحبين للحوسبة السحابية أن فكرتها في خلق نسخ و تدميرها بحسب الطلب فيما يسمى بقابلية التوسع ((Scalability))، فبذلك لا يهم أداء الواحد منها أو احتمالية سقوطها، واجابتي على ذلك، هو أن التقانات المتوافرة اليوم ليست مُعدَّة للعمل في هذا الطور. وسيبقى عنق الزجاجة في بعض النقاط المفصلية في التطبيق، كالحاجة إلى مزامنة المعلومات وقواعد البيانات بشكل عام. ولغاية هذا اليوم، فإن وجود نظام ليس لديه أية نقطة سقوط وحيدة ((Single Point of Failure)) هو مسألة فيها تحدي تقني كبير، إن لم تكن أقرب للمستحيل. ومعلومة أخيرة أضيفها أن الكُلفة الحالية لاعتماد الحوسبة السحابية هي أكثر بكثير من الحوسبة المعتمدة على خوادم حقيقة عندما يتساويان في مستوى الخدمة التي يتم تقديمها. وهذا أيضا بناء على قراءات عملية لا نظرية.
 +
 +
 +===== بيئة التطوير =====
 +بيئة التطوير ((Development Environment)) التي أفضّلها من بين كل ما هو متوفر هي استخدام محرر النصوص "​فيم"​((Vim)) من سطر الأوامر. أما بالنسبة للبيئة الرسومية فقد اعتمدت المحرّر جي-إيديت((GEdit)) ضمن بيئة إكس إف سي إي((XFCE)) (وليس غنوم((GNOME)) ولا كي دي إي((KDE)) ). ولم يرق لي أبدا استخدام نت-بينز((NetBeans)) أو إكليبس((Eclipse)) فهي بطيئة ومملّة. وقد بدأت هذه السنة باستخدام نظام ضبط وإدارة النصوص المصدرية جت((git)) بديلا عن إس في أن((subversion -svn)) والذي عمل لسنوات طويلة على أحسن ما يُرام، ولكن ما شدّني إلى جت هو السرعة والأداء وصغر مساحة التخزين والتخلّص من مجلّدات إس في إن التي كانت موجودة في كل مكان.
 +
 +===== الخُلاصة، =====
 + 
 +عدم الاهتمام بحسن الأداء في تطبيقات الويب العامة سيلقي بتطبيقك في الهاوية، بغض النظر عن تميز الخصائص أو المحتوى أو الإخراج الفني؛ فكل تلك الأمور مهمة ولكن أن يكون تطبيقك جاهزا ليؤدي مهمامه في ظروف الازدحام الشديد ليس مسألة ثانوية - إلا، طبعا إذا كنت هاويا تقوم بتجريب بعض الأفكار-. ​
 +
 +كانت توليفة هذه السنة بامتياز توليفة البساطة والسهولة والأداء العالي.
 +
 +ولا أنكر أنني أشعر بالرضى الكبير عن التقانات التي عَمِلتُ عليها، وأتطلّع إلى تنفيذ المزيد من المشاريع عليها في المستقبل. كما أتطلّع إلى التعرّف على المزيد من إبداعات التقانات الجديدة في عالم البرمجة. ​
 +
 +وإلى لقاء آخر في السنة القادمة ... :-) بحول الله. دُمتم بخير.
 +
 +
 +
 +===== عن الكاتب =====
 +
 +كفاح عيسى، مستشار في المعلوماتية ومبرمج مخضرم. يعمل في شركة تقانات البرمجيات الحرة في عمّان وقام بتطوير وتنفيذ العديد من التطبيقات التجارية لشركات كبرى.
 +
 +\\
 +
 +\\
 +
 +
 +----
 +جميع حقوق النشر والتوزيع ممنوحة ضمن شروط رخصة وقف العامة.
 +
 +
 +===== قائمة الكلمات والمصطلحات مع الكلمة الإنجليزية المُناظرة لها =====
 +
 +
 +^ تقانات | جمع تقانة وهي 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 |
  
docs/أفضل_توليفة_لتقانات_الويب_لعام_2010.txt · آخر تعديل: 2015/04/23 00:19 (تحرير خارجي)