Гарчанде ки шумо метавонед ин донишро барои сохтани барнома аз сифр истифода баред ва он ба таври комил оптимизатсия карда мешавад, беҳтараш ин корро накунед. Агар шумо барои барномаи тиҷоратии ташкилоти худ веб-сервери навро дар C ё C++ нависед, ин метавонад рӯзи охирини кори шумо бошад. Бо вуҷуди ин, донистани сохтори ин барномаҳо дар интихоби барномаҳои мавҷуда кӯмак хоҳад кард. Шумо метавонед системаҳои ба раванд асосёфтаро бо системаҳои ба ришта асосёфта ва инчунин системаҳои ба рӯйдод асосёфта муқоиса кунед. Шумо мефаҳмед ва қадр хоҳед кард, ки чаро Nginx аз Apache httpd беҳтар кор мекунад, чаро як барномаи Python дар асоси Tornado метавонад дар муқоиса бо барномаи Python дар асоси Django ба корбарони бештар хидмат расонад.
ZeroHTTPd: Воситаи омӯзиш
ZeroHTTPd сервери веб аст, ки ман аз сифр дар C ҳамчун воситаи таълим навиштаам. Он вобастагии беруна надорад, аз ҷумла дастрасӣ ба Redis. Мо расмиёти Redis-и худро иҷро мекунем. Барои тафсилоти бештар дар зер нигаред.
Гарчанде ки мо метавонем назарияро ба таври васеъ муҳокима кунем, чизе беҳтар аз навиштани код, иҷро кардани он ва муқоисаи ҳамаи архитектураҳои сервер бо ҳамдигар нест. Ин усули равшантарин аст. Аз ин рӯ, мо бо истифода аз ҳар як модел веб-сервери оддии ZeroHTTPd менависем: дар асоси раванд, ришта ва рӯйдодҳо. Биёед ҳар яке аз ин серверҳоро тафтиш кунем ва бубинем, ки онҳо дар муқоиса бо ҳамдигар чӣ кор мекунанд. ZeroHTTPd дар як файли C амалӣ карда мешавад.Сервери воқеан асосёфтаро дар бар мегирад уташ, татбиқи бузурги ҷадвали hash, ки дар як файли сарлавҳа меояд. Дар ҳолатҳои дигар, вобастагӣ вуҷуд надорад, то лоиҳаро мушкил нагардонад.
Дар код шарҳҳои зиёде мавҷуданд, ки ба шумо дарк мекунанд. ЗероHTTPd як сервери оддӣ дар чанд сатри код буда, инчунин чаҳорчӯбаи ҳадди ақал барои таҳияи веб мебошад. Он дорои функсияҳои маҳдуд аст, аммо қодир аст ба файлҳои статикӣ ва саҳифаҳои хеле оддии "динамикӣ" хизмат расонад. Ман бояд бигӯям, ки ZeroHTTPd барои омӯхтани тарзи сохтани барномаҳои баландсифати Linux хуб аст. Умуман, аксари хидматҳои веб дархостҳоро интизор мешаванд, онҳоро тафтиш мекунанд ва коркард мекунанд. Ин маҳз ҳамон чизест, ки ZeroHTTPd хоҳад кард. Ин асбоби таълим аст, на истеҳсолот. Он дар коркарди хатогиҳо олӣ нест ва аз эҳтимол дур нест, ки таҷрибаҳои беҳтарини амниятӣ фахр кунад (ҳа, ман истифода кардам strcpy) ё ҳилаҳои оқилонаи забони Си Аммо ман умедворам, ки он кори худро хуб иҷро мекунад.
Саҳифаи асосии ZeroHTTPd. Он метавонад намудҳои гуногуни файл, аз ҷумла тасвирҳоро барорад
nginx.unixism.net: Баъзан мо мехоҳем зиёда аз як мисоли барномаи серверро иҷро кунем. Барои ин, сервери Nginx бо танзимоти мувофиқ ҳамчун мувозинати сарборӣ кор мекунад ab ба равандҳои сервери мо.
zerohttpd.unixism.net: Дар ин ҷо мо барномаҳои сервери худро дар ҳафт меъмории гуногун, яке дар як вақт иҷро мекунем.
redis.unixism.net: Ин сервер демони Redis-ро идора мекунад, ки дар он сабтҳои китоби меҳмонон ва ҳисобкунакҳои меҳмонон нигоҳ дошта мешаванд.
Ҳама серверҳо дар як ядрои протсессор кор мекунанд. Идеяи он аст, ки баҳодиҳии ҳадди аксар иҷрои ҳар як меъморӣ. Азбаски ҳамаи барномаҳои серверӣ дар як сахтафзор санҷида мешаванд, ин барои муқоиса асос аст. Танзимоти санҷишии ман аз серверҳои виртуалӣ иборат аст, ки аз Digital Ocean ба иҷора гирифта шудаанд.
Мо чиро чен карда истодаем?
Шумо метавонед нишондиҳандаҳои гуногунро чен кунед. Мо иҷрои ҳар як меъмориро дар конфигуратсияи додашуда тавассути бор кардани серверҳо бо дархостҳо дар сатҳҳои гуногуни параллелизм арзёбӣ мекунем: сарборӣ аз 20 то 15 000 корбарони ҳамзамон меафзояд.
Натиҷаҳои санҷиш
Диаграммаи зерин иҷрои серверҳоро дар меъмории гуногун дар сатҳҳои гуногуни параллелизм нишон медиҳад. Меҳвари y - шумораи дархостҳо дар як сония, меҳвари x пайвастҳои мувозӣ мебошад.
Илова ба ҳафт директория барои ҳамаи меъморӣ, дар феҳристи сатҳи боло боз дуто мавҷуд аст: оммавӣ ва қолибҳо. Дар аввал файли 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-ро талаб мекунад. Аммо барои аксари барномаҳо ин тавр нест.