Фаъолияти барномаҳои шабакаи Linux. Муқаддима

Барномаҳои веб ҳоло дар ҳама ҷо истифода мешаванд ва дар байни ҳама протоколҳои нақлиётӣ HTTP ҳиссаи шерро ишғол мекунад. Ҳангоми омӯзиши нозукиҳои таҳияи барномаҳои веб, аксарияти одамон ба системаи пардозандагӣ, ки дар он барномаҳо воқеан кор мекунанд, аҳамияти кам медиҳанд. Ҷудокунии рушд (Dev) ва амалиётҳо (Ops) вазъиятро танҳо бадтар кард. Аммо бо афзоиши фарҳанги DevOps, таҳиягарон барои иҷро кардани замимаҳои худ дар абр масъул мешаванд, аз ин рӯ барои онҳо шинос шудан бо пуштибонии системаи амалиётӣ хеле муфид аст. Ин махсусан муфид аст, агар шумо кӯшиш кунед, ки системаро барои ҳазорҳо ё даҳҳо ҳазор пайвастҳои ҳамзамон ҷойгир кунед.

Маҳдудиятҳо дар хидматҳои веб ба маҳдудиятҳои барномаҳои дигар хеле монанданд. Новобаста аз он ки он тавозуни сарборӣ ё серверҳои пойгоҳи додаҳо бошад, ҳамаи ин барномаҳо дар муҳити баландсифат мушкилоти шабеҳ доранд. Фаҳмидани ин маҳдудиятҳои асосӣ ва чӣ гуна бартараф кардани онҳо дар маҷмӯъ ба шумо дар арзёбии фаъолият ва миқёспазирии барномаҳои вебии шумо кӯмак мекунад.

Ман ин силсила мақолаҳоро дар посух ба саволҳои таҳиягарони ҷавон, ки мехоҳанд меъморони системаҳои огоҳ бошанд, менависам. Усулҳои оптимизатсияи барномаҳои Linux-ро бидуни ғарқ шудан ба асосҳои кор дар сатҳи системаи оператсионӣ равшан фаҳмидан ғайриимкон аст. Ҳарчанд намудҳои зиёди барномаҳо мавҷуданд, дар ин силсила ман мехоҳам, на барномаҳои мизи корӣ ба монанди браузер ё муҳаррири матн. Ин мавод барои таҳиягарон ва меъмороне пешбинӣ шудааст, ки мехоҳанд бифаҳманд, ки чӣ гуна барномаҳои Linux ё Unix кор мекунанд ва чӣ гуна сохтори онҳоро барои иҷрои баланд фаҳманд.

Linux аст ҳуҷраи сервер системаи оператсионӣ ва аксар вақт барномаҳои шумо дар ин ОС кор мекунанд. Гарчанде ки ман "Linux" мегӯям, аксар вақт шумо метавонед боварӣ ҳосил кунед, ки ман дар маҷмӯъ ҳамаи системаҳои амалиётии ба Unix монандро дар назар дорам. Аммо, ман рамзи ҳамроҳро дар системаҳои дигар санҷидаам. Ҳамин тавр, агар шумо ба FreeBSD ё OpenBSD таваҷҷӯҳ дошта бошед, натиҷаҳои шумо метавонанд фарқ кунанд. Вақте ки ман чизи мушаххаси Linux-ро кӯшиш мекунам, ман онро қайд мекунам.

Гарчанде ки шумо метавонед ин донишро барои сохтани барнома аз сифр истифода баред ва он ба таври комил оптимизатсия карда мешавад, беҳтараш ин корро накунед. Агар шумо барои барномаи тиҷоратии ташкилоти худ веб-сервери навро дар C ё C++ нависед, ин метавонад рӯзи охирини кори шумо бошад. Бо вуҷуди ин, донистани сохтори ин барномаҳо дар интихоби барномаҳои мавҷуда кӯмак хоҳад кард. Шумо метавонед системаҳои ба раванд асосёфтаро бо системаҳои ба ришта асосёфта ва инчунин системаҳои ба рӯйдод асосёфта муқоиса кунед. Шумо мефаҳмед ва қадр хоҳед кард, ки чаро Nginx аз Apache httpd беҳтар кор мекунад, чаро як барномаи Python дар асоси Tornado метавонад дар муқоиса бо барномаи Python дар асоси Django ба корбарони бештар хидмат расонад.

ZeroHTTPd: Воситаи омӯзиш

ZeroHTTPd сервери веб аст, ки ман аз сифр дар C ҳамчун воситаи таълим навиштаам. Он вобастагии беруна надорад, аз ҷумла дастрасӣ ба Redis. Мо расмиёти Redis-и худро иҷро мекунем. Барои тафсилоти бештар дар зер нигаред.

Гарчанде ки мо метавонем назарияро ба таври васеъ муҳокима кунем, чизе беҳтар аз навиштани код, иҷро кардани он ва муқоисаи ҳамаи архитектураҳои сервер бо ҳамдигар нест. Ин усули равшантарин аст. Аз ин рӯ, мо бо истифода аз ҳар як модел веб-сервери оддии ZeroHTTPd менависем: дар асоси раванд, ришта ва рӯйдодҳо. Биёед ҳар яке аз ин серверҳоро тафтиш кунем ва бубинем, ки онҳо дар муқоиса бо ҳамдигар чӣ кор мекунанд. ZeroHTTPd дар як файли C амалӣ карда мешавад.Сервери воқеан асосёфтаро дар бар мегирад уташ, татбиқи бузурги ҷадвали hash, ки дар як файли сарлавҳа меояд. Дар ҳолатҳои дигар, вобастагӣ вуҷуд надорад, то лоиҳаро мушкил нагардонад.

Дар код шарҳҳои зиёде мавҷуданд, ки ба шумо дарк мекунанд. ЗероHTTPd як сервери оддӣ дар чанд сатри код буда, инчунин чаҳорчӯбаи ҳадди ақал барои таҳияи веб мебошад. Он дорои функсияҳои маҳдуд аст, аммо қодир аст ба файлҳои статикӣ ва саҳифаҳои хеле оддии "динамикӣ" хизмат расонад. Ман бояд бигӯям, ки ZeroHTTPd барои омӯхтани тарзи сохтани барномаҳои баландсифати Linux хуб аст. Умуман, аксари хидматҳои веб дархостҳоро интизор мешаванд, онҳоро тафтиш мекунанд ва коркард мекунанд. Ин маҳз ҳамон чизест, ки ZeroHTTPd хоҳад кард. Ин асбоби таълим аст, на истеҳсолот. Он дар коркарди хатогиҳо олӣ нест ва аз эҳтимол дур нест, ки таҷрибаҳои беҳтарини амниятӣ фахр кунад (ҳа, ман истифода кардам strcpy) ё ҳилаҳои оқилонаи забони Си Аммо ман умедворам, ки он кори худро хуб иҷро мекунад.

Фаъолияти барномаҳои шабакаи Linux. Муқаддима
Саҳифаи асосии ZeroHTTPd. Он метавонад намудҳои гуногуни файл, аз ҷумла тасвирҳоро барорад

Ариза китоби меҳмонон

Барномаҳои веби муосир одатан бо файлҳои статикӣ маҳдуд нестанд. Онҳо бо махзани маълумотҳои гуногун, кэшҳо ва ғайра робитаҳои мураккаб доранд. Ҳамин тавр, мо як барномаи оддии веб бо номи "Китоби меҳмонон" эҷод мекунем, ки меҳмонон дар зери номи худ сабтҳо мегузоранд. Дӯконҳои китоби меҳмонон сабтҳои қаблан гузошташуда. Дар поёни саҳифа инчунин ҳисобкунаки меҳмонон мавҷуд аст.

Фаъолияти барномаҳои шабакаи Linux. Муқаддима
Барномаи веб "Китоби меҳмонон" ZeroHTTPd

Ҳисобкунаки меҳмонон ва сабтҳои китоби меҳмонон дар Redis нигоҳ дошта мешаванд. Барои иртибот бо Redis, расмиёти худ амалӣ карда мешавад, онҳо аз китобхонаи беруна вобаста нестанд. Ман як мухлиси бузурги паҳн кардани коди homebrew нестам, вақте ки ҳалли дастрас ва хуб санҷидашуда мавҷуданд. Аммо ҳадафи ZeroHTTPd омӯзиши кори Linux ва дастрасӣ ба хидматҳои беруна мебошад, дар ҳоле ки хидматрасонии дархостҳои HTTP таъсири ҷиддии иҷроиш дорад. Мо бояд муоширатро бо Redis дар ҳар як меъмории серверамон пурра назорат кунем. Дар баъзе меъморӣ мо зангҳои бастаро истифода мебарем, дар дигарҳо мо расмиёти ба рӯйдод асосёфтаро истифода мебарем. Истифодаи китобхонаи муштарии берунии Redis ин назоратро таъмин намекунад. Илова бар ин, муштарии хурди Redis мо танҳо якчанд вазифаҳоро иҷро мекунад (гиред, танзим ва афзоиш додани калид; гирифтан ва илова кардан ба массив). Илова бар ин, протоколи Redis бениҳоят шево ва содда аст. Ба шумо ҳатто лозим нест, ки онро махсус таълим диҳед. Худи далели он, ки протокол тамоми корҳоро дар тақрибан сад сатри код иҷро мекунад, нишон медиҳад, ки он то чӣ андоза хуб андешида шудааст.

Дар расми зерин нишон дода шудааст, ки барнома ҳангоми дархости муштарӣ (браузер) чӣ кор мекунад /guestbookURL.

Фаъолияти барномаҳои шабакаи Linux. Муқаддима
Чӣ тавр барномаи китоби меҳмонон кор мекунад

Вақте ки саҳифаи китоби меҳмонон бояд бароварда шавад, як занг ба системаи файлӣ барои хондани қолаб дар хотира ва се занги шабакавӣ ба Redis вуҷуд дорад. Файли шаблон қисми зиёди мундариҷаи HTML-ро барои саҳифа дар тасвири дар боло овардашуда дар бар мегирад. Инчунин барои қисми динамикии мундариҷа ҷойнишинҳои махсус мавҷуданд: паёмҳо ва ҳисобкунакҳои меҳмонон. Мо онҳоро аз Redis қабул мекунем, онҳоро ба саҳифа ворид мекунем ва ба муштарӣ мундариҷаи пурраи ташаккулёфтаро пешниҳод мекунем. Аз занги сеюм ба Redis пешгирӣ кардан мумкин аст, зеро Redis ҳангоми афзоиш арзиши калиди навро бармегардонад. Аммо, барои сервери мо, ки меъмории асинхронӣ дар асоси рӯйдодҳо дорад, шумораи зиёди зангҳои шабакавӣ як санҷиши хуб барои мақсадҳои омӯзишӣ мебошанд. Ҳамин тавр, мо арзиши баргардонидани Redis-ро аз шумораи меҳмонон даст мекашем ва онро бо занги алоҳида дархост мекунем.

Меъмории сервер ZeroHTTPd

Мо ҳафт версияи ZeroHTTPd-ро бо ҳамон функсия, вале меъмории гуногун сохта истодаем:

  • Итеративӣ
  • Сервери Форк (як раванди кӯдак барои як дархост)
  • Сервери пеш аз форвард (форккунии пешакии равандҳо)
  • Сервер бо риштаҳои иҷро (як ришта барои як дархост)
  • Сервер бо эҷоди пеш аз ришта
  • Архитектура асос ёфтааст poll()
  • Архитектура асос ёфтааст epoll

Мо иҷрои ҳар як меъмориро тавассути бор кардани сервер бо дархостҳои HTTP чен мекунем. Аммо ҳангоми муқоисаи меъмории хеле параллелӣ, шумораи дархостҳо зиёд мешавад. Мо се маротиба санҷида, ҳисоби миёнаро ҳисоб мекунем.

Методологияи санҷиш

Фаъолияти барномаҳои шабакаи Linux. Муқаддима
Танзими санҷиши сарбории ZeroHTTPd

Муҳим он аст, ки ҳангоми санҷишҳо ҳама ҷузъҳо дар як мошин кор намекунанд. Дар ин ҳолат, OS хароҷоти иловагии банақшагирӣ мекунад, зеро ҷузъҳо барои CPU рақобат мекунанд. Андозагирии сарбории системаи амалиётии ҳар як меъмории интихобшудаи сервер яке аз муҳимтарин ҳадафҳои ин машқ мебошад. Илова кардани тағирёбандаҳои бештар ба раванд зараровар хоҳад буд. Аз ин рӯ, танзимот дар расми боло беҳтарин кор мекунад.

Ҳар яке аз ин серверҳо чӣ кор мекунанд?

  • load.unixism.net: Ин ҷоест, ки мо медаванд ab, утилитаи Apache Benchmark. Он сарбориро барои санҷиши меъмории сервери мо тавлид мекунад.
  • nginx.unixism.net: Баъзан мо мехоҳем зиёда аз як мисоли барномаи серверро иҷро кунем. Барои ин, сервери Nginx бо танзимоти мувофиқ ҳамчун мувозинати сарборӣ кор мекунад ab ба равандҳои сервери мо.
  • zerohttpd.unixism.net: Дар ин ҷо мо барномаҳои сервери худро дар ҳафт меъмории гуногун, яке дар як вақт иҷро мекунем.
  • redis.unixism.net: Ин сервер демони Redis-ро идора мекунад, ки дар он сабтҳои китоби меҳмонон ва ҳисобкунакҳои меҳмонон нигоҳ дошта мешаванд.

Ҳама серверҳо дар як ядрои протсессор кор мекунанд. Идеяи он аст, ки баҳодиҳии ҳадди аксар иҷрои ҳар як меъморӣ. Азбаски ҳамаи барномаҳои серверӣ дар як сахтафзор санҷида мешаванд, ин барои муқоиса асос аст. Танзимоти санҷишии ман аз серверҳои виртуалӣ иборат аст, ки аз Digital Ocean ба иҷора гирифта шудаанд.

Мо чиро чен карда истодаем?

Шумо метавонед нишондиҳандаҳои гуногунро чен кунед. Мо иҷрои ҳар як меъмориро дар конфигуратсияи додашуда тавассути бор кардани серверҳо бо дархостҳо дар сатҳҳои гуногуни параллелизм арзёбӣ мекунем: сарборӣ аз 20 то 15 000 корбарони ҳамзамон меафзояд.

Натиҷаҳои санҷиш

Диаграммаи зерин иҷрои серверҳоро дар меъмории гуногун дар сатҳҳои гуногуни параллелизм нишон медиҳад. Меҳвари y - шумораи дархостҳо дар як сония, меҳвари x пайвастҳои мувозӣ мебошад.

Фаъолияти барномаҳои шабакаи Linux. Муқаддима

Фаъолияти барномаҳои шабакаи Linux. Муқаддима

Фаъолияти барномаҳои шабакаи Linux. Муқаддима

Дар зер ҷадвал бо натиҷаҳо оварда шудааст.

дархостҳо дар як сония

параллелизм
такроршаванда
чангак
пешаки
ҷараён
ҷараёни пешаки
рӯйхати интихобкунандагон
epoll

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 дархости ҳамзамон мо танҳо ду бозигар боқӣ мондаем: pre-fork ва epoll. Вақте ки сарборӣ зиёд мешавад, сервери ба назарпурсӣ асосёфта аз сервери ҷараёнӣ бадтар кор мекунад. Меъмории ришта-пеш аз офариниш рақиби арзандаи epoll мебошад, ки шаҳодати он аст, ки ядрои Linux миқдори зиёди риштаҳоро то чӣ андоза хуб ба нақша гирифтааст.

Рамзи сарчашмаи ZeroHTTPd

Рамзи сарчашмаи ZeroHTTPd дар ин ҷо. Барои ҳар як меъморӣ феҳристи алоҳида мавҷуд аст.

ZeroHTTPd │ ├── 01_итеративӣ │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking асосӣ ───c. 04_ ришта │ ├── main.c ├── 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └── main.c │ └── main.c ──файли оммавӣ ── ├── индекс .html │ └── tux . png └── қолибҳо └── дафтари меҳмонон └── index.html

Илова ба ҳафт директория барои ҳамаи меъморӣ, дар феҳристи сатҳи боло боз дуто мавҷуд аст: оммавӣ ва қолибҳо. Дар аввал файли index.html ва тасвири скриншоти аввалро дар бар мегирад. Шумо метавонед файлҳо ва ҷузвдонҳои дигарро дар он ҷо ҷойгир кунед ва ZeroHTTPd бояд он файлҳои статикиро бидуни мушкилот хидмат кунад. Агар роҳ дар браузер ба роҳ дар ҷузвдони умумӣ мувофиқат кунад, пас ZeroHTTPd файли index.html-ро дар ин директория ҷустуҷӯ мекунад. Мундариҷаи китоби меҳмонон ба таври динамикӣ тавлид мешавад. Он танҳо саҳифаи хонагӣ дорад ва мундариҷаи он ба файли "templates/guestbook/index.html" асос ёфтааст. ZeroHTTPd ба осонӣ саҳифаҳои динамикиро барои васеъкунӣ илова мекунад. Идеяи он аст, ки корбарон метавонанд ба ин феҳрист қолабҳо илова кунанд ва ҳангоми зарурат ZeroHTTPd-ро васеъ кунанд.

Барои сохтани ҳамаи ҳафт сервер, иҷро кунед make all аз феҳристи сатҳи боло - ва ҳамаи сохтмонҳо дар ин директория пайдо мешаванд. Файлҳои иҷрошаванда директорияҳои оммавӣ ва қолибҳоро дар директорияе, ки аз он оғоз мешаванд, ҷустуҷӯ мекунанд.

API Linux

Барои фаҳмидани маълумот дар ин силсила мақола ба шумо лозим нест, ки дар Linux API хуб донед. Бо вуҷуди ин, ман тавсия медиҳам, ки дар ин мавзӯъ бештар хонед; дар Интернет захираҳои истинодҳои зиёде мавҷуданд. Гарчанде ки мо ба якчанд категорияҳои API-ҳои Linux дахл хоҳем кард, таваҷҷӯҳи мо асосан ба равандҳо, риштаҳо, рӯйдодҳо ва стеки шабака хоҳад буд. Илова ба китобҳо ва мақолаҳо дар бораи Linux API, ман инчунин тавсия медиҳам, ки манаро барои зангҳои системавӣ ва функсияҳои китобхонаи истифодашуда хонед.

Самаранокӣ ва миқёспазирӣ

Як ёддошт дар бораи иҷроиш ва миқёспазирӣ. Дар байни онхо аз чихати назариявй алокае нест. Шумо метавонед хидмати веб дошта бошед, ки хеле хуб кор мекунад ва вақти посухи чанд миллисонияро ташкил медиҳад, аммо он умуман миқёс надорад. Ба ҳамин монанд, метавонад як веб-барномаи суст коркунанда бошад, ки барои посух додан чанд сония вақт лозим аст, аммо он барои коркарди даҳҳо ҳазор корбарони ҳамзамон даҳҳо миқёс дорад. Аммо, омезиши иҷрои баланд ва миқёспазирӣ як комбинатсияи хеле пурқувват аст. Барномаҳои баландмаъно умуман захираҳоро сарфакорона истифода мебаранд ва ба ин васила ба корбарони ҳамзамон бештар дар сервер самаранок хидмат мерасонанд ва хароҷотро кам мекунанд.

Вазифаҳои CPU ва I/O

Ниҳоят, дар компютер ҳамеша ду намуди имконпазири вазифаҳо мавҷуданд: барои I/O ва CPU. Қабули дархостҳо аз тариқи Интернет (дар шабакаҳои воридотӣ/барорӣ), хидматрасонии файлҳо (шабака ва диски воридотӣ/барорӣ), муошират бо базаи маълумотҳо (шабака ва диски воридотӣ/барорӣ) ин ҳама фаъолиятҳои воридотӣ мебошанд. Баъзе дархостҳои пойгоҳи додаҳо метавонанд CPU каме пуршиддат бошанд (таъминкунӣ, ба ҳисоби миёна як миллион натиҷа ва ғайра). Аксари замимаҳои веб бо ҳадди имконпазири воридот ва баромад маҳдуданд ва протсессор бо иқтидори пуррааш кам истифода мешавад. Вақте ки шумо мебинед, ки баъзе вазифаҳои I/O миқдори зиёди CPU-ро истифода мебаранд, ин эҳтимол нишонаи меъмории сусти барномаҳост. Ин метавонад маънои онро дошта бошад, ки захираҳои CPU барои идоракунии равандҳо ва гузариши контекст сарф мешаванд - ва ин комилан муфид нест. Агар шумо коре ба монанди коркарди тасвир, табдили файли аудио ё омӯзиши мошин дошта бошед, он гоҳ барнома захираҳои пурқуввати CPU-ро талаб мекунад. Аммо барои аксари барномаҳо ин тавр нест.

Дар бораи меъмории сервер бештар маълумот гиред

  1. Қисми I: Архитектураи такрорӣ
  2. Қисми II. Серверҳои Fork
  3. Қисми III. Серверҳои пешакӣ
  4. Қисми IV. Серверҳо бо риштаҳои иҷро
  5. Қисми V. Серверҳои пешакӣ
  6. ҚИСМИ VI. Архитектура дар асоси Пол
  7. Қисми VII. меъморӣ дар асоси epoll

Манбаъ: will.com

Илова Эзоҳ