مدونة الرووت جريس

مختصة بإدارة أنظمة لينكس\يونكس، الحوسبة السحابية والإنظمة التخيلية

Apache vs. Lighttpd

آخر تحديث: 24 مايو 2009، إنظر نهاية التدوينة.

كثر الكلام عن سرعة وخفة الويب سيرفر Lighttpd – ينطق “لايتي Lighty”- ، وكيف إنه هو المنافس الحقيقي لسيرفر الويب “أباتشي Apache“، من حيث سرعة الأداء وتخفيف الضغط على السيرفر لما يكون فيه ضغط وعدد زيارات عالي على الموقع.

في بداية أول إصدار من سيرفر لايتي، الناس والأدمنز قالوا نفس الكلام اللي فوق، إن لايتي قوي ويتحمل الضغط ولا يعلق الموقع لما يزيد الضغط، ونزلت أحصائيات ووو.. إلخ.

في البداية صدقت، اقتنعت بشكل نسبي بهالكلام والإحصائيات – بدون تجربة شخصية-، لكن اليوم الجمعة 10 أبريل 2009، تغيرت قناعتي بسيرفر لايتي!

جاء فبالي أسوي عملية proof of concept، أو بالعربي “أثبات صحة وجدوى الفكرة”، يعني أتاكد من كل هالحكي، هل هو صدق سيرفر لايتي قوي وو… ولا بس دعايات وحكي كثير.

طلع كل الكلام اللي قريته عن السرعة وتحمل الضغط مو مجرد كلام، وطلع فعلاً لايتي له من أسمه نصيب! -  حيث إن كلمة  Lighty  مأخوذة من كلمة Lightly، ومعناها خفة أو بشكل خفيف -

وش كانت فكرتي؟

جهزت جهازي لأجل يكون سيرفر ويب، عشان أقارن سيرفر لايتي مع سيرفر أباتشي بشكل شخصي، وهذي إعداداتي:

1- سيرفر أباتشي، رقم الإصدار 2.2.11، آخر نسخة.

2- سيرفر لايتي، رقم الإصدار 1.4.20، آخرنسخة.

3- سيرفر قاعدة بيانات MySQL، رقم الإصدار5.0.77.

4- php-5.2.6-5

5- WordPress-2.7.1

والتركيب تم على سيرفر لينكس فيدورا 10، جهازي الشخصي.

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

هل تمت الإختبارات بشكل يدوي؟

بالتأكيد لا!

سيرفر أباتشي يوفر لك أداة Tool تقيس لك سرعة إستجابة سيرفرات الويب، وتعطيك نتائج لها، يعني تسوي Benchmark Test، الإداة هذي أسمها AB، إختصار لـ Apache Benchmark.

عملت أختبارين، الأول كانت هذي شروطه – شرط واحد فقط -:

دخل الموقع 1000 شخص، أو تم طلب تحميل 1000 ملف، كيف راح تكون سرعة أستجابة السيرفرات؟

سيرفر لايتي Lighty:


[root@rj-asus ~]# ab -n1000 http://127.0.0.1:81/wp-lighttpd/?p=5
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
..
..
..
Concurrency Level: 1
Time taken for tests: 124.439 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5297000 bytes
HTML transferred: 5076000 bytes
Requests per second: 8.04 [#/sec] (mean)
Time per request: 124.439 [ms] (mean)
Time per request: 124.439 [ms] (mean, across all concurrent requests)
Transfer rate: 41.57 [Kbytes/sec] received

سيرفر أباتشي Apache:


[root@rj-asus ~]# ab -n1000 http://127.0.0.1/wp-apache/?p=5
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
..
..
..
Concurrency Level: 1
Time taken for tests: 1138.483 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5237000 bytes
HTML transferred: 4992000 bytes
Requests per second: 0.88 [#/sec] (mean)
Time per request: 1138.483 [ms] (mean)
Time per request: 1138.483 [ms] (mean, across all concurrent requests)
Transfer rate: 4.49 [Kbytes/sec] received

تحليل النتائج:

لايتي Lighty:

- الوقت المستغرق لتنفيذ 1000 طلب: 124.439 ثانية (دقيقتين و 48 ثانية تقريباً).

- عدد تنفيذ الطلبات بالثانية: 8.04 طلب لكل ثانية.

- الوقت المستغرق لتنفيذ طلب واحد: 124.439 جزء من الثانية (0.12 ثانية لكل طلب تقريباً).

- معدل النقل: 41.57 كيلو بايت لكل ثانية.

- عدد الطلبات التي لم تنفذ: 0 طلب من 1000 طلب.

أباتشي Apache:

- الوقت المستغرق لتنفيذ 1000 طلب: 1138.483 ثانية (22 دقيقة تقريباً!).

- عدد تنفيذ الطلبات بالثانية: 0.88 طلب لكل ثانية!.

- الوقت المستغرق لتنفيذ طلب واحد:1138.483 جزء من الثانية (1.13 ثانية تقريباً!).

- معدل النقل: 4.49 كيلو بايت لكل ثانية.

- عدد الطلبات التي لم تنفذ: 0 طلب من 1000 طلب.

إنصدمت صراحة من بطء إستجابة سيرفر أباتشي!

فرق تقريباً 100% بين سرعة استجابة سيرفر لايتي وسيرفر أباتشي!

والجد، الإختبار هذا ما أقنعني، قلت أبسوي أختبار ثاني، وكان هذا هو الشرط:

- 1000 زائر دخلوا الموقع، و 100 زائر -بنفس اللحظة- طلبوا تحميل ملف معين، كيف راح تكون السرعة؟

لايتي Lighty:


[root@rj-asus ~]# ab -n1000 -c100 http://127.0.0.1:81/wp-lighttpd/?p=5
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
..
..
..
Concurrency Level: 100
Time taken for tests: 66.328 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 5297022 bytes
HTML transferred: 5076000 bytes
Requests per second: 15.08 [#/sec] (mean)
Time per request: 6632.792 [ms] (mean)
Time per request: 66.328 [ms] (mean, across all concurrent requests)
Transfer rate: 77.99 [Kbytes/sec] received

أباتشي Apache:


[root@rj-asus ~]# ab -n1000 -c100 http://127.0.0.1/wp-apache/?p=5
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
..
..
..
Concurrency Level: 100
Time taken for tests: 21.917 seconds
Complete requests: 1000
Failed requests: 802
(Connect: 0, Receive: 0, Length: 802, Exceptions: 0)

Write errors: 0
Non-2xx responses: 776
Total transferred: 1737266 bytes
HTML transferred: 1396042 bytes
Requests per second: 45.63 [#/sec] (mean)
Time per request: 2191.705 [ms] (mean)

Time per request: 21.917 [ms] (mean, across all concurrent requests)
Transfer rate: 77.41 [Kbytes/sec] received

تحليل النتائج:

لايتي Lighty:

- الوقت المستغرق لتنفيذ 1000 طلب و100 طلب بنفس اللحظة: 66.328 ثانية (دقيقة و6 ثواني تقريباً).

- عدد تنفيذ الطلبات بالثانية: 15.08 طلب لكل ثانية.

- الوقت المستغرق لتنفيذ طلب واحد: 6632.792 جزء من الثانية (6.6 ثواني لكل طلب تقريباً).

- الوقت المستغرق لتنفيذ طلب واحد من ضمن 100 طلب تحميل: 66.328 جزء من الثانية ( 0.06 ثواني تقريباً).

- معدل النقل: 77.99 كيلو بايت لكل ثانية.

- عدد الطلبات التي لم تنفذ: 0 طلب من 1000 طلب.

أباتشي Apache:

- الوقت المستغرق لتنفيذ 1000 طلب و100 طلب بنفس اللحظة: 21.917 ثانية.

- عدد تنفيذ الطلبات بالثانية: 45.63 طلب لكل ثانية.

- الوقت المستغرق لتنفيذ طلب واحد: 2191.705 جزء من الثانية (2.1 ثانية لكل طلب تقريباً).

- الوقت المستغرق لتنفيذ طلب واحد من ضمن 100 طلب تحميل: 21.917 جزء من الثانية.

- معدل النقل: 77.99 كيلو بايت لكل ثانية.

- عدد الطلبات التي لم تنفذ: 802 طلب من 1000 طلب!!

802 طلب ( تصفح أو تحميل ) ما تنفذت، يعني نفذ لك بس 198 طلب، والباقي طلع لك خطأ بالسيرفر ، ولا قدرت تتصفحه أو تتحمله!

لا يا أباتشي، عيب!

نقاط مهمة:

- إعدادت السيرفرات By Default، التعديل البسيط فقط لإضافة الموديولز الخاصة بالـ PHP.

- عملت الإختبارات أكثر من مره عشان اتأكد من صحة النتآئج، وكل النتائج السابقة اللي عملتها نفس اللي فوق.

- لأجل يزيد تأكدي من أخطاء سيرفر أباتشي، واضح لي في ملف access.log الخاص بتسجيل عمليات الدخول لسيرفر الويب اباتشي -Log-، إن السيرفر يتعطل كذا مره ويعرض خطأ رقم 500 – Internal Server Error -.

- سيرفر أباتشي فشل كذا مرة بإختبارات تحمل الضغط على جهازي.

-  كذا شخص أقترح إن يكون سيرفر أباتشي مخصص للمواقع اللي تحتوي على محتويات تفاعلية ومتغيرة Dynamic Content – زي برامج PHP – حيث إنه أسرع، اما المحتويات الثابتة زي الصور وغيرها، أقتراحوا سيرفر لايتي. وتقدر تسوي الطريقة هذي عن طريق mod_proxy. ولو إن الإختبارات اللي فوق أثبتت العكس:-).

- ذكرت فوق ” تغيرت قناعتي بسيرفر لايتي “، طبعاً لأفضل الأفضل :-).

- بخصوص Cpanel مع لايتي، إلى الآن مافيه خبر رسمي عن دعم Cpanel للايتي.

Posted in المصادر المفتوحة, خوادم وشبكات, لينكس | 18 Comments

18 Responses to Apache vs. Lighttpd

  1. يعطيك العافيه ابو جريس ، نتائج مذهلة الصراحة وغير متوقعة ابد !
    اذا كنت اريد التحويل من Apache إلى Lighty في السيرفر وش الي راح يتغير وهل راح تتأثر البرمجيات الي على السيرفر ؟

    بالنسبة لي URL-Rewriting هل هناك تغيرات كثيرة ؟
    كيف اربط الـcPanel مع الـLighty .

    يعطيك العافية حبيبنا ..

  2. جهاد says:

    اختبار حلو.

    هل الملفات المطلوبة في الاختبار PHP او static عادية؟

    ما تتصور انه بعد التضبيط (اعدادت الكومبايلايشن لل PHP مثلاً) بتكون النتائج مختلفة؟

    وفيه الحالات اللي يكون فيها الويب سيرفر هو نفسه اللي يجاوب طلبات الملفات الدايناميك والستاتيك. اللي في بالي ان اباتشي يسوي بروسس لكل طلب (request) يجيه, والذاكرة اللي يخصصها للبروسس تكون بحجم أكبر سب بروسس ماضي (خصوصاً اذا mod_php مركب).

    يعني مثلاً اذا كان احد الطلبات هو لزائر رفع صورة مثلاً, ولازم تحفظ الصورة بأحجام مختلفة – يعني لازم الصورة كلها تصير في الذاكرة, يعني البروسس قد يحتاج 16 او 32 ميقا بايت او حتى اكثر من الذاكرة. اذا جا بعده طلب لزائر ثاني يبغى بس ملف CSS صغير, البروسس هذا بياخذ نفس الحجم اللي اخذه الطلب اللي راح (16 او 32 ميقا بايت او اكثر), واللي هو تضييع كبير مرة للذاكرة. ودي أعرف اذا كان لايتي يسوي نفس هالشي او لا.

  3. @Abdullah Alhoshan ,
    “اذا كنت اريد التحويل من Apache إلى Lighty في السيرفر وش الي راح يتغير وهل راح تتأثر البرمجيات الي على السيرفر ؟ ”

    حسب تجربتي وعلمي، لا، ما تتأثر البرمجيات، اساسا أباتشي ماله علاقة بالبرمجيات اللي تشتغل بالسيرفر، مثلاً لما يكون عندك سكريبت PHP، أباتشي ما يتعامل معه بشكل شخصي، يحوله على الموديول mod_php وهو ينفذه.
    شوف هالصفحة http://www.apachetutor.org/dev/request

    “اذا كنت اريد التحويل من Apache إلى Lighty في السيرفر وش الي راح يتغير”

    كل شيء :-)..
    الفكرة واحدة مشتركة بين سيرفر أباتشي ولايتي، لكن التطبيق مختلف.

    “بالنسبة لي URL-Rewriting هل هناك تغيرات كثيرة ؟”
    فيه تغييرات بطريقة كتاباتها، شوف:
    http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModRewrite

    “كيف اربط الـcPanel مع الـLighty .”
    أبشرك ماقد ركبت cPanel بحياتي كلها، لا على أباتشي ولا على لايتي، كل شغلي shell it :-D!
    أبشوف كيفية التركيب، وأبرد عليك هنا، وشيك على إيميلك ياحلو.

    @جهاد ,
    ” هل الملفات المطلوبة في الاختبار PHP او static عادية؟ ”
    كانت PHP.

    “ما تتصور انه بعد التضبيط (اعدادت الكومبايلايشن لل PHP مثلاً) بتكون النتائج مختلفة؟”
    أكييد بتتغير، عشان كذا وضحت بالنقاط إن هذي Default Settings لكل سيرفر.

    مثلاً أباتشي، لو وقفت أغلب الموديولز اللي فيه وإستخدمت اللي تحتاجه فقط، بيطلع طيارة! < وهذا الشيء هم اللي مسوينه بالضبط لايتي.

    " ودي أعرف اذا كان لايتي يسوي نفس هالشي او لا."

    اها، سؤالك حلو وأستفدت منه صراحة.
    لأني لازم أشوفها عشان أجاوبك.
    فقط للمعلومية، لايتي ما يستخدم mod_php نهائياً، يستخدم fastCGI
    http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModFastCGI

    لما يجيه PHP request، لايتي يرسله إلى fastCGI، ومن ثم بدوره يرسله إلى php-cgi -بدل الموديول mod_php- وهي تسوي له بروسس.

    بس لاحظت وقت ال benchmark عند طلبي لملفات php، أباتشي “بنفسه” يشغل الموديول تحته، بحيث إنه يسوي fork كذا مره “لنفسه” عشان يخلص الطلبات.
    لكن لايتي، لاحظت إنه أول ما يجيه php request، على طول php-cgi تسوي لنفسها fork وترد على الطلبات، ينما البروسس حقت لايتي تشتغل مالها علاقة بالـ php-cgi.
    بالمناسبة، شوف بالرابط اللي فوق كيف فكرة load balancing الخاصة بـ fastCGI، حلوة!

  4. رائد says:

    Salam Jerais,
    I guess with minor tweaking you will get same performance for PHP from both.
    But with static files, Lighttpd will be more efficient, since it only use 1 process all the time (select based, instead of preforking).
    With the second test of course you will get horrible results, you are using 100 concurrent requests, to improve it in Apache change “StartServer” to 100.
    My own recommendation, stick with Apache unless you have more that 50 req/sec.
    If you do, use two servers (www,img), one for dynamic pages (PHP), and another for static files (images, js, css, flash), Apache is still the king of flexibility.
    You might also check:
    http://nginx.net/
    http://www.cherokee-project.com/

  5. اختبار وموضوع احترافي جداً , شكراً لك أخوي جريس على هذا الموضوع والتجربة المتميزة.

    طيب اذا كان لايتي افضل ليش اغلب السيرفرات الان تستخدم اباتشي؟

    شكراً لك اخوي جريس

  6. حاسوبية says:

    يحتاج نقول موضوع فتاك ؟

    ما شاء الله تبارك الله ,, ربنا يزيدك

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

    طيب بس سؤالي .. ليش سيرفر الاباشي أسرع للدينامك كونتنت خصيصا و اللايتي للستاتيك ؟

    موفق

  7. @Rayed,
    i tried to do benchmarking with default values for both of them without any tweaking to see how each one’ll work, and IMO, if we fine-tuned apache and lighty, we’ll have 2 web sever killers.
    thx for the heads-up and for nigx & Cherokee project, i’ll to give them a shot soon, i hope :-).
    glad to see your comment.

    @عبدالملك الثاري ,
    ليه أباتشي موجود على أغلب السيرفرات؟
    كذا سبب:-
    -تاريخ أباتشي، من متى أباتشي موجود؟
    من عام 1995 تقريباً، من أوائل سيرفرات الويب يعتبر، وسيرفر لايتي من عام 2003 تقريباً كانت بدايته.

    - أباتشي أكثر شهرة ومعروف، مقارنة مع لايتي.
    - كثرة المشاريع المبنية على أباتشي، مثل مشروع التوم كات Tomcat:
    http://www.apache.org/foundation/projects.html

    - أغلب المواقع تشتغل على أباتشي من البداية، والإنتقال إلى لايتي يتطلب شغل وتعديلات لأجل يكون نفس أباتشي بالضبط.

    - وأسباب كثيرة ومختلفة، وأهم سبب بنظري:
    أباتشي كويب سيرفر لايعلى عليه، محترم ولا عليه أي كلام، ومو أي واحد يتركه لأجل يروح لسيرفر ويب ثاني، زي لايتي مثلاُ.
    اللي يترك أباتشي ويروح إلى لايتي مثلاً، هذا أدمن يبغى “يمخمخ” على الويب سيرفر حقه، ومو أي أدمن كذا :-P

    @ حاسوبية ,
    ليه لايتي أسرع بالستاتيك؟
    شخصياً، ما جربت أشوف سرعة لايتي بالستاتيك مقارنة مع الأباتشي، لكن في الديناميك، تطرقت بشكل خفيف للأخ جهاد العمار في ردي هذا: http://jerais.com/plug/?p=639#comment-683

    ويمكن إن شاء الله أسوي مقارنة للستاتيك بين السيرفرين، لأجل يوضح تعامل الأثنين.

  8. لسته لبعض المواقع اللي تستخدم سيرفر لايتي كسيرفر أساسي:
    http://redmine.lighttpd.net/projects/lighttpd/wiki/PoweredByLighttpd

  9. أخي جريس جهد ممتاز جدّاً بارك الله فيك. بعد تجربة مع lighty هو سرفر جبّار وسريع وانا أتكلم عن طلبات أكثر بكثير من 1000 طلب مثل ما في تجربتك أخي.

    هناك أيضاً سرفر آخر جبّار وآخذ في الانتشار خصوصاً بعد أن حوّلت مؤسسة wordpress إلى هذا السرفر وهو nginx اذا سمح وقتك وقمت بعمل اختبار عليه فإن شاء الله سيكون لدى الجميع تصور أشمل.

    وجزاك الله خيراً كثيراً.

  10. eee says:

    اخي جيريس ودي أسأل سؤال ما عليك أمر
    الحين انا ادري اشلون اركب سيرفر اباتشي على اللينكس وPHPMYADMIN وMYSQL من عن طريق الأوامر
    sudo apt-get install php5
    وغيره من اوامر مش حافظها صراحتن ولكن انا قمت بتثبيت السيرفر اباتشي على اللينكس ولكن ودي اعرف اشلون اثبت سيرفر lighttpd على اللينكس , ولاحظت في المقال هذا انك مركب السيرفر بنفس النظام يعني ودي اعرف كيف؟ مشكور

  11. @eee ,
    كذا تركب سيرفر لايتي:
    sudo apt-get install lighttpd

    ومافهمت النقطة هذي:
    “ولاحظت في المقال هذا انك مركب السيرفر بنفس النظام يعني ودي اعرف كيف؟”
    ياليت توضح لاهنت.

  12. eee says:

    يعني انك مركب سيرفر lighttpd بنظام لينكس , ودي أعرف اشلون أركب Apache و lighttpd بنفس الجهاز باللينكس مع العلم اني مركب apache و phpmyadmin و mysql و localhost شغال تمام مع الأباتشي ولكن كيف اركب معه lighttpd ولا هذا مسحيل لازم يكون سيرفر واحد بس؟ اعتقد ان بس سيرفرواحد بالجهاز صح؟

  13. @eee ,
    لا مو مستحيل ولا حاجة، كنت مركبهم كلهم “وشغالين” بنفس الوقت.
    الفكرة بإنك تغير البورت اللي يشتغل عليه لايتي -الإفتراضي بورت رقم 80-، وتعين له بورت ثاني، زي حالتي انا معين له بورت رقم 81.
    السبب؟
    لأن أباتشي يشتغل على بورت رقم 80، ومحجوز له طالما إنه يشتغل، ولا راح يشتغل لايتي إذا شغلته بنفس الوقت مع أباتشي على نفس البورت.

    ومافيه شيء مستحيل، تقدر تشغل phpmyadmin, mysql في نفس السيرفر بدون أي مشاكل مع لايتي وأباتشي.
    بحالتي اللي فوق، رابط لايتي وأباتشي مع نفس سيرفر MySQL، ونفس الداتا بيس -لكن مع إختلاف اسم الجداول عشان ما يصير فيه تعارض- ولا فيه أي مشاكل.

    علمني وش المشكلة اللي معك وأساعدك إن شاء الله.

  14. a7bab says:

    ما شاء الله على التفكير بصراحه اذهال وان شاء الله استطيع المتابعه والتعلم مما تقدموه

  15. Hakeem says:

    Oh ..dear
    You remind me about those old days, when we use to stress test everything;).
    The 500 errors are very strange and it’s worth digging for the reason. It could be some sort of security feature to prevent DoS attack. Anyway, it’s a brilliant effort.

    See you mate

  16. eee says:

    @الروت جريس
    اها هالحين فهمت . طيب عندي سؤال بسيط لما انغير البورت في اللايتي هالحين اشلون اشبك عليه انا ادري عن الاباتشي اشبك عليه من المتصفج localhost او 127.0.0.1 وبدون ما اضيف له شيء يشبك على السيرفر او الصفحة الموجودة usr/var/www هالحين وين ملفات اللايتي نفس مكان الأباتشي الي هي هذا المسار ولا وين؟ وكيف اشبك عليه من المتصفح؟ بارك الله فيك وجعله خير لك يوم القيامة قول امين ياشيخ

  17. محمد says:

    موضوع جيد , اريد ان اسألك ماذا عن Ngnix ؟؟

  18. @Hakeem ,
    missed our old days, wished if they got longer :-(
    for Apache 500-error message, Apache was utilizing most of the CPU and memory, so any new request can’t be handled until all requests in the queue processed, so it’ll give this error.
    Hakeem,
    glad to see you commenting, stay around, and see you soon in KSA, insha’allah.

    @ eee ,
    ملفات اللايتي موجودة -أفتراضياً- هنا:
    /var/www/lighttpd/
    وتقدر تعدل مكانها عن بتعديلك لملف الإعدادت
    /etc/lighttpd/lighttpd.conf
    وبتلاقي خيار تغيير تعديل موقع ملفات الويب تحت الاسم
    server.document-root
    وكيف تشبك عليه؟ هذي سهلة.
    لما تعيد تشغيل لايتي، تقدر تشبك عليه بالمتصفح زي فكرتك لما تشبك على أباتشي -عن طريق تصفح الموقع http://localhost -.
    بس أهم شيء مو شغال عندك أباتشي ولايتي بنفس الوقت، إلا إذا غيرت البورت لأحد فيهم.
    وضح لك؟

    @محمد،
    بخصوص ngnix، ما جربته لحد الآن، أبحاول اجربه وأفيدكم.