نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف

ويب ايپليڪيشنون هاڻي هر جڳهه استعمال ڪيون ويون آهن، ۽ سڀني ٽرانسپورٽ پروٽوڪول جي وچ ۾، ايڇ ٽي ٽي پي جو حصو آهي. جڏهن ويب ايپليڪيشن ڊولپمينٽ جي نونسن جو مطالعو ڪيو، اڪثر ماڻهو آپريٽنگ سسٽم تي تمام گهٽ ڌيان ڏيندا آهن جتي اهي ايپليڪيشنون اصل ۾ هلن ٿيون. ترقي (Dev) ۽ آپريشنز (Ops) جي علحدگي صرف صورتحال کي خراب ڪري ڇڏيو. پر DevOps ڪلچر جي اڀار سان، ڊولپرز ڪلائوڊ ۾ پنهنجون ايپليڪيشنون هلائڻ جا ذميوار بڻجي رهيا آهن، تنهن ڪري اهو انهن لاءِ تمام ڪارائتو آهي ته هو آپريٽنگ سسٽم جي پسمنظر سان چڱيءَ طرح واقف ٿين. اهو خاص طور تي ڪارائتو آهي جيڪڏهن توهان ڪوشش ڪري رهيا آهيو هڪ سسٽم کي ترتيب ڏيڻ لاءِ هزارين يا ڏهه هزارين هڪ ئي وقت ۾ ڪنيڪشن.

ويب سروسز ۾ حدون تمام گهڻيون ساڳيون آهن جيڪي ٻين ايپليڪيشنن ۾ آهن. ڇا اهو لوڊ بيلنسرز يا ڊيٽابيس سرورز آهي، انهن سڀني ايپليڪيشنن کي اعلي ڪارڪردگي واري ماحول ۾ ساڳيو مسئلو آهي. انهن بنيادي حدن کي سمجهڻ ۽ عام طور تي انهن کي ڪيئن دور ڪجي توهان جي ويب ايپليڪيشنن جي ڪارڪردگي ۽ اسڪيبلٽي جو جائزو وٺڻ ۾ مدد ڪندي.

Я пишу эту серию статей в ответ на вопросы молодых разработчиков, которые хотят стать хорошо информированными системными архитекторами. Невозможно чётко понять методы оптимизации приложений Linux, не погрузившись в основы, как они работают на уровне операционной системы. Хотя есть много типов приложений, в этом цикле я хочу исследовать сетевые приложения, а не десктопные, такие как браузер или текстовый редактор. Этот материал рассчитан на разработчиков и архитекторов, которые хотят понять, как работают программы Linux или Unix и как их структурировать для высокой производительности.

Linux - هي آهي سرور روم операционная система, и чаще всего ваши приложения работают именно на этой ОС. Хотя я говорю «Linux», большую часть времени вы можете с уверенностью предположить, что имеются в виду все Unix-подобные операционные системы в целом. Тем не менее, я не тестировал сопровождающий код на других системах. Итак, если вас интересует FreeBSD или OpenBSD, результат может отличаться. Когда я пробую что-то Linux-специфическое, то указываю на это.

جڏهن ته توهان هن علم کي استعمال ڪري سگهو ٿا شروع کان هڪ ايپ ٺاهڻ لاءِ ۽ اهو مڪمل طور تي بهتر ڪيو ويندو، اهو بهتر ناهي ته ائين نه ڪيو وڃي. جيڪڏهن توهان پنهنجي تنظيم جي ڪاروباري ايپليڪيشن لاءِ C يا C++ ۾ نئون ويب سرور لکو ٿا، اهو ٿي سگهي ٿو توهان جي نوڪري تي آخري ڏينهن. بهرحال، انهن ايپليڪيشنن جي جوڙجڪ کي ڄاڻڻ ۾ مدد ملندي موجوده پروگرامن کي چونڊڻ ۾. توهان پروسيس تي ٻڌل سسٽم جو مقابلو ڪرڻ جي قابل هوندا ٿريڊ تي ٻڌل سسٽم سان گڏو گڏ واقعن جي بنياد تي. توھان سمجھندا ۽ سمجھندا سين ڇو نينگڪس Apache httpd کان بھتر ڪم ڪري ٿو، ڇو ھڪڙو Tornado جي بنياد تي Python ايپليڪيشن وڌيڪ استعمال ڪندڙن جي خدمت ڪري سگھي ٿي Django جي بنياد تي Python ايپليڪيشن جي مقابلي ۾.

ZeroHTTPd: سکيا وارو اوزار

ZeroHTTPd هڪ ويب سرور آهي جنهن کي مون شروع کان C ۾ هڪ تدريسي اوزار طور لکيو آهي. ان ۾ ڪوبه خارجي انحصار نه آهي، بشمول ريڊس تائين رسائي. اسان اسان جي پنهنجي Redis طريقا هلائيندا آهيون. وڌيڪ تفصيل لاءِ هيٺ ڏسو.

جيتوڻيڪ اسين ڊگھي نظريي تي بحث ڪري سگھون ٿا، ڪوڊ لکڻ، ان کي هلائڻ، ۽ سڀني سرور آرڪيٽيڪچرز کي ھڪ ٻئي سان ڀيٽڻ کان بھتر ڪجھ به نه آھي. اهو سڀ کان وڌيڪ واضح طريقو آهي. تنهن ڪري، اسان هر ماڊل کي استعمال ڪندي هڪ سادي ZeroHTTPd ويب سرور لکنداسين: پروسيس تي ٻڌل، موضوع تي ٻڌل، ۽ واقعي جي بنياد تي. اچو ته انهن مان هر هڪ سرور کي چيڪ ڪريو ۽ ڏسو ته اهي هڪ ٻئي جي مقابلي ۾ ڪيئن ڪم ڪن ٿا. ZeroHTTPd هڪ واحد C فائل ۾ لاڳو ڪيو ويو آهي. واقعي تي ٻڌل سرور شامل آهي اٿش، هڪ عظيم هيش ٽيبل تي عمل درآمد جيڪو هڪ واحد هيڊر فائل ۾ اچي ٿو. ٻين حالتن ۾، ڪو به انحصار نه آهي، تنهنڪري منصوبي کي پيچيده نه ڪرڻ.

В коде очень много комментариев, чтобы помочь разобраться. Будучи простым веб-сервером в нескольких строчках кода, ZeroHTTPd также представляет собой минимальный фреймворк для веб-разработки. У него ограниченная функциональность, но он способен выдавать статические файлы и очень простые «динамические» страницы. Должен сказать, что ZeroHTTPd хорошо подходит для обучения, как создавать высокопроизводительные Linux-приложения. По большому счёту, большинство веб-сервисов ждут запросов, проверяют их и обрабатывают. Именно это будет делать ZeroHTTPd. Это инструмент для обучения, а не для продакшна. Он не силён в обработке ошибок и вряд ли похвастается лучшими практиками безопасности (о да, я использовал strcpy) يا سي ٻولي جون چالاڪ چالون. پر مون کي اميد آهي ته اهو پنهنجو ڪم سٺو ڪندو.

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف
ZeroHTTPd هوم صفحو. اهو تصويرن سميت مختلف فائلن جي قسمن کي ڪڍي سگھي ٿو

مهمان ڪتاب جي درخواست

جديد ويب ايپليڪيشنون عام طور تي جامد فائلن تائين محدود نه آهن. انهن جو مختلف ڊيٽابيس، ڪيش وغيره سان پيچيده لاڳاپا آهن. ان ڪري اسان هڪ سادي ويب ايپليڪيشن ٺاهينداسين جنهن کي "گيسٽ بڪ" سڏيو ويندو آهي جتي سياح پنهنجي نالن سان داخلائون ڇڏيندا آهن. مهمان ڪتاب اسٽورن جون داخلائون اڳ ۾ ڇڏيل آهن. صفحي جي تري ۾ هڪ دورو ڪندڙ انسداد پڻ آهي.

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف
ويب ايپليڪيشن "مهمان ڪتاب" ZeroHTTPd

Счётчик посетителей и записи гостевой книги хранятся в Redis. Для коммуникаций с Redis реализованы собственные процедуры, они не зависят от внешней библиотеки. Я не большой поклонник выкатывать доморощенный код, когда есть общедоступные и хорошо протестированные решения. Но цель ZeroHTTPd — изучить производительность Linux и доступ к внешним службам, в то время как обслуживание HTTP-запросов серьёзно влияет на производительность. Мы должны полностью контролировать коммуникации с Redis в каждой из наших серверных архитектур. В одной архитектуре мы используем блокирующие вызовы, в других — процедуры на основе событий. Использование внешней клиентской библиотеки Redis не даст такой контроль. Кроме того, наш маленький клиент Redis выполняет только несколько функций (получение, настройка и увеличение ключа; получение и добавление к массиву). К тому же, протокол Redis исключительно элегантный и простой. Его даже учить специально не надо. Сам факт, что всю работу протокол выполняет примерно в ста строчках кода, говорит о том, насколько он хорошо продуман.

هيٺ ڏنل انگ اکر ڏيکاري ٿو ته ايپليڪيشن ڇا ڪري ٿي جڏهن ڪلائنٽ (برائوزر) درخواست ڪري ٿو /guestbookURL.

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف
مهمان ڪتاب ايپليڪيشن ڪيئن ڪم ڪري ٿي

جڏهن هڪ مهمان ڪتاب جو صفحو جاري ڪرڻ جي ضرورت آهي، اتي هڪ ڪال آهي فائيل سسٽم کي پڙهڻ لاءِ ٽيمپليٽ کي ميموري ۾ ۽ ٽي نيٽ ورڪ ڪالون Redis ڏانهن. ٽيمپليٽ فائل مٿي ڏنل اسڪرين شاٽ ۾ صفحي لاءِ اڪثر HTML مواد تي مشتمل آهي. مواد جي متحرڪ حصي لاءِ خاص جڳه دار پڻ آھن: پوسٽون ۽ دورو ڪندڙ انسداد. اسان انهن کي Redis کان وصول ڪندا آهيون، انهن کي صفحي ۾ داخل ڪريو ۽ ڪلائنٽ کي مڪمل طور تي ٺهيل مواد سان مهيا ڪريو. Redis ڏانهن ٽيون ڪال کان بچي سگهجي ٿو ڇاڪاڻ ته ريڊس نئين ڪيئي قيمت کي واپس آڻيندو آهي جڏهن وڌايو ويندو آهي. تنهن هوندي، اسان جي سرور لاءِ، جنهن وٽ هڪ هم وقت ساز واقعن تي ٻڌل فن تعمير آهي، ڪيترائي نيٽ ورڪ ڪالون سکيا جي مقصدن لاءِ سٺو امتحان آهن. تنهن ڪري اسان ريڊس واپسي جي قيمت کي رد ڪريون ٿا سياحن جي تعداد جي ۽ ان کي الڳ ڪال سان پڇو.

سرور آرڪيٽيڪچرز ZeroHTTPd

اسان ZeroHTTPd جا ست ورجن ٺاهي رهيا آهيون ساڳئي ڪارڪردگي سان پر مختلف فن تعمير:

  • ورجائيندڙ
  • فورڪ سرور (هڪ ٻار جو عمل في درخواست)
  • پري-فورڪ سرور (پري-فورڪنگ پروسيسز)
  • سرور تي عملدرآمد جي سلسلي سان (هڪ سلسلي في درخواست)
  • سرور کان اڳ ٺاھڻ سان
  • فن تعمير جي بنياد تي poll()
  • فن تعمير جي بنياد تي epoll

اسان هر فن تعمير جي ڪارڪردگي کي ماپ ڪريون ٿا سرور لوڊ ڪندي HTTP درخواستن سان. پر جڏهن انتهائي متوازي فن تعمير جي مقابلي ۾، سوالن جو تعداد وڌائي ٿو. اسان ٽي ڀيرا آزمايو ۽ سراسري حساب ڪريو.

جاچ جو طريقو

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف
ZeroHTTPd لوڊ ٽيسٽنگ سيٽ اپ

اهو ضروري آهي ته ٽيسٽ هلائڻ دوران، سڀئي جزا ساڳي مشين تي نه هلن. انهي صورت ۾، او ايس اضافي شيڊولنگ اوور هيڊ کي شامل ڪري ٿو جيئن اجزاء سي پي يو لاء مقابلو ڪن ٿا. آپريٽنگ سسٽم کي ماپڻ هر هڪ چونڊيل سرور آرڪيٽيڪچرز جي مٿان هيڊ هن مشق جي اهم مقصدن مان هڪ آهي. وڌيڪ متغير شامل ڪرڻ عمل لاءِ نقصانڪار ٿي ويندا. تنهن ڪري، مٿي ڏنل تصوير ۾ سيٽنگ بهترين ڪم ڪري ٿي.

انهن مان هر هڪ سرور ڇا ڪندو آهي؟

  • load.unixism.net: هي اهو آهي جتي اسان هلون ٿا ab, Apache Benchmark افاديت. اهو اسان جي سرور آرڪيٽيڪچر کي جانچڻ لاءِ گهربل لوڊ ٺاهي ٿو.
  • nginx.unixism.net: ڪڏهن ڪڏهن اسين سرور پروگرام جا هڪ کان وڌيڪ مثال هلائڻ چاهيون ٿا. هن کي ڪرڻ لاء، نينگڪس سرور مناسب سيٽنگن سان ڪم ڪري ٿو لوڊ بيلنسر جي طور تي اچي رهيو آهي ab اسان جي سرور جي عملن ڏانهن.
  • zerohttpd.unixism.net: هتي اسان پنهنجي سرور پروگرامن کي ست مختلف آرڪيٽيڪچرز تي هلائيندا آهيون، هڪ وقت ۾.
  • redis.unixism.net: هي سرور ريڊس ڊيمن کي هلائي ٿو، جتي گيسٽ بڪ جون داخلائون ۽ وزيٽر ڪائونٽر محفوظ ٿيل آهن.

سڀئي سرور ساڳيا پروسيسر ڪور تي هلندا آهن. اهو خيال هر فن تعمير جي وڌ ۾ وڌ ڪارڪردگي جو جائزو وٺڻ آهي. جيئن ته سڀئي سرور پروگرام ساڳيا هارڊويئر تي آزمايا ويا آهن، اهو مقابلو لاء هڪ بنيادي آهي. منهنجو ٽيسٽ سيٽ اپ ڊجيٽل سمنڊ مان ڪرائي تي ورچوئل سرورز تي مشتمل آهي.

اسان ڇا ماپي رهيا آهيون؟

توھان مختلف اشارن کي ماپ ڪري سگھو ٿا. اسان هر فن تعمير جي ڪارڪردگي جو جائزو وٺون ٿا ڏنل ترتيب ۾ سرورز کي لوڊ ڪندي مختلف سطحن تي درخواستن سان: لوڊ وڌندو 20 کان 15 سمورو استعمال ڪندڙ.

جاچ جا نتيجا

هيٺ ڏنل چارٽ ڏيکاري ٿو سرور جي ڪارڪردگي مختلف فن تعمير تي متوازي جي مختلف سطحن تي. y-محور في سيڪنڊ درخواستن جو تعداد آھي، x-محور متوازي ڪنيڪشن آھي.

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف

نيٽ ورڪ ايپليڪيشن ڪارڪردگي Linuxتعارف

ھيٺ ڏنل جدول آھي نتيجن سان.

درخواستون في سيڪنڊ

متوازنيت
ورجائيندڙ
ڪانٽو
اڳي ڪانٽو
اسٽريمنگ
پري اسٽريمنگ
راء
ايپل

20
7
112
2100
1800
2250
1900
2050

50
7
190
2200
1700
2200
2000
2000

100
7
245
2200
1700
2200
2150
2100

200
7
330
2300
1750
2300
2200
2100

300
-
380
2200
1800
2400
2250
2150

400
-
410
2200
1750
2600
2000
2000

500
-
440
2300
1850
2700
1900
2212

600
-
460
2400
1800
2500
1700
2519

700
-
460
2400
1600
2490
1550
2607

800
-
460
2400
1600
2540
1400
2553

900
-
460
2300
1600
2472
1200
2567

1000
-
475
2300
1700
2485
1150
2439

1500
-
490
2400
1550
2620
900
2479

2000
-
350
2400
1400
2396
550
2200

2500
-
280
2100
1300
2453
490
2262

3000
-
280
1900
1250
2502
وڏي پکيڙ
2138

5000
-
وڏي پکيڙ
1600
1100
2519
-
2235

8000
-
-
1200
وڏي پکيڙ
2451
-
2100

10،000
-
-
وڏي پکيڙ
-
2200
-
2200

11،000
-
-
-
-
2200
-
2122

12،000
-
-
-
-
970
-
1958

13،000
-
-
-
-
730
-
1897

14،000
-
-
-
-
590
-
1466

15،000
-
-
-
-
532
-
1281

Из графика и таблицы видно, что выше 8000 одновременных запросов у нас остаётся только две игрока: пре-форк и epoll. С ростом нагрузки сервер на базе poll работает хуже, чем потоковый. Архитектура с предварительным созданием потоков составляет достойную конкуренцию epoll: это свидетельство, насколько хорошо ядро Linux планирует большое количество потоков.

ZeroHTTPd ماخذ ڪوڊ

ZeroHTTPd ماخذ ڪوڊ هتي. هر فن تعمير لاءِ الڳ ڊاريڪٽري آهي.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── main.c ├── 03_preforking ├── main.c ├── 04_preforking 05_ ٿريڊنگ │ ├── main.c ├── 06_پري ٿريڊنگ │ ├── main.c ├── 07_poll │ ├── main.c ├── XNUMX_epoll │ ├─── main.c ├ عوامي├── main.c ├── انڊيڪس .html │ └── ٽڪس png └── ٽيمپليٽ └── مهمانن جو ڪتاب └── index.html

سڀني آرڪيٽيڪچرز لاءِ ستن ڊائريڪٽرن کان علاوه، مٿين سطح جي ڊاريڪٽري ۾ ٻه وڌيڪ آهن: عوامي ۽ ٽيمپليٽس. پهرين ۾ index.html فائل ۽ پهرين اسڪرين شاٽ جي تصوير شامل آهي. توهان اتي رکي سگهو ٿا ٻيون فائلون ۽ فولڊر، ۽ ZeroHTTPd انهن جامد فائلن کي بغير ڪنهن مسئلن جي خدمت ڪرڻ گهرجي. جيڪڏهن برائوزر ۾ رستو عوامي فولڊر ۾ رستي سان ملندو آهي، پوء ZeroHTTPd هن ڊاريڪٽري ۾ index.html فائل ڳولي ٿو. مھمانن جي ڪتاب لاءِ مواد متحرڪ طور تي ٺاھيو ويو آھي. اهو صرف هڪ هوم صفحو آهي، ۽ ان جو مواد فائيل 'templates/guestbook/index.html' تي ٻڌل آهي. ZeroHTTPd آساني سان متحرڪ صفحا شامل ڪري ٿو واڌ لاءِ. خيال اهو آهي ته صارف هن ڊاريڪٽري ۾ ٽيمپليٽ شامل ڪري سگهن ٿا ۽ ضرورت مطابق ZeroHTTPd کي وڌايو.

سڀني ستن سرورن کي ٺاهڻ لاء، هلائي make all مٿين سطح جي ڊاريڪٽري مان - ۽ سڀ تعميرات هن ڊاريڪٽري ۾ ظاهر ٿيندا. Executable فائلون ڊاريڪٽري ۾ عوام ۽ ٽيمپليٽ ڊائريڪٽرن کي ڳوليندا آهن جتان اهي شروع ڪيا ويا آهن.

Linux API

Чтобы понять информацию в этом цикле статей, не обязательно хорошо разбираться в Linux API. Однако рекомендую прочитать больше на эту тему, в Сети много справочных ресурсов. Хотя мы коснёмся нескольких категорий Linux API, наше внимание будет сосредоточено в основном на процессах, потоках, событиях и сетевом стеке. Кроме книг и статей про Linux API, рекомендую также почитать маны для системных вызовов и используемых библиотечных функций.

ڪارڪردگي ۽ اسڪاليبلٽي

ڪارڪردگي ۽ اسپيبلبل بابت هڪ نوٽ. نظرياتي طور تي، انهن جي وچ ۾ ڪوبه تعلق نه آهي. توھان وٽ ھڪڙي ويب سروس آھي جيڪا تمام سٺي ڪم ڪري ٿي، ڪجھ ملي سيڪنڊن جي جوابي وقت سان، پر اھو ڪجھ به ماپ نٿو ڪري. ساڳيءَ طرح، ٿي سگهي ٿو هڪ خراب ڪارڪردگيءَ واري ويب ايپليڪيشن جيڪا جواب ڏيڻ ۾ چند سيڪنڊن جو وقت وٺي، پر اهو ڏهن هزارن سان گڏ استعمال ڪندڙن کي سنڀالڻ لاءِ ڏهن جي ماپ ڪري ٿو. جڏهن ته، اعلي ڪارڪردگي ۽ اسڪالبل جو ميلاپ هڪ تمام طاقتور ميلاپ آهي. اعليٰ ڪارڪردگي واريون ايپليڪيشنون عام طور تي وسيلن کي گھٽ استعمال ڪنديون آهن ۽ اهڙيءَ طرح موثر طريقي سان سرور تي وڌيڪ سمورو استعمال ڪندڙن جي خدمت ڪندي، خرچن کي گھٽائڻ.

CPU ۽ I/O ڪم

آخرڪار، ڪمپيوٽنگ ۾ هميشه ٻه ممڪن قسم جا ڪم آهن: I/O ۽ CPU لاءِ. انٽرنيٽ تي درخواستون وصول ڪرڻ (نيٽ ورڪ I/O)، فائلون مهيا ڪرڻ (نيٽ ورڪ ۽ ڊسڪ I/O)، ڊيٽابيس سان رابطو ڪرڻ (نيٽ ورڪ ۽ ڊسڪ I/O) سڀ I/O سرگرميون آهن. ڪجھ ڊيٽابيس جا سوال ٿورڙا سي پي يو ٿي سگھن ٿا (ترتيب ڪرڻ، ھڪ ملين نتيجن جي اوسط، وغيره). گهڻيون ويب ايپليڪيشنون وڌ کان وڌ ممڪن I/O تائين محدود هونديون آهن، ۽ پروسيسر تمام گهٽ استعمال ڪيو ويندو آهي مڪمل گنجائش تي. جڏهن توهان ڏسندا آهيو ته ڪجهه I/O ڪم تمام گهڻو سي پي يو استعمال ڪري رهيو آهي، اهو گهڻو ڪري ناقص ايپليڪيشن آرڪيٽيڪچر جي نشاني آهي. ان جو مطلب اهو ٿي سگھي ٿو ته سي پي يو وسيلن کي پروسيس مينيجمينٽ ۽ حوالن جي سوئچنگ تي ضايع ڪيو ويو آهي - ۽ اهو مڪمل طور تي مفيد ناهي. جيڪڏھن توھان ڪجھ ڪري رھيا آھيو تصوير پروسيسنگ، آڊيو فائل ڪنورشن، يا مشين لرننگ، پوءِ ايپليڪيشن کي طاقتور سي پي يو وسيلن جي ضرورت آھي. پر اڪثر ايپليڪيشنن لاءِ اهو معاملو ناهي.

سرور آرڪيٽيڪچر بابت وڌيڪ ڄاڻو

  1. حصو I: تکراري فن تعمير
  2. حصو II. فورڪ سرورز
  3. حصو III. پري-فورڪ سرور
  4. حصو IV. عمل جي سلسلي سان سرور
  5. حصو V. پري-ٿريڊ ٿيل سرور
  6. حصو VI. پول جي بنياد تي فن تعمير
  7. حصو VII. ايپول تي ٻڌل فن تعمير

جو ذريعو: www.habr.com

DDoS تحفظ سان سائيٽن لاءِ قابل اعتماد هوسٽنگ خريد ڪريو، VPS VDS سرور 🔥 DDoS تحفظ سان قابل اعتماد ويب سائيٽ هوسٽنگ خريد ڪريو، VPS VDS سرورز | ProHoster