Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju

Awọn ohun elo wẹẹbu ti wa ni lilo nibi gbogbo, ati laarin gbogbo awọn ilana gbigbe, HTTP gba ipin kiniun. Nigbati o ba n ṣe ikẹkọ awọn nuances ti idagbasoke ohun elo wẹẹbu, ọpọlọpọ eniyan san akiyesi diẹ si ẹrọ iṣẹ nibiti awọn ohun elo wọnyi n ṣiṣẹ. Iyapa ti idagbasoke (Dev) ati awọn iṣẹ (Ops) nikan jẹ ki ipo naa buru si. Ṣugbọn pẹlu igbega ti aṣa DevOps, awọn olupilẹṣẹ di oniduro fun ṣiṣe awọn ohun elo wọn ninu awọsanma, nitorinaa o wulo pupọ fun wọn lati di faramọ pẹlu ẹhin ti ẹrọ ṣiṣe. Eyi wulo paapaa ti o ba n gbiyanju lati mu eto kan ṣiṣẹ fun ẹgbẹẹgbẹrun tabi ẹgbẹẹgbẹrun awọn asopọ nigbakanna.

Awọn idiwọn ninu awọn iṣẹ wẹẹbu jọra pupọ si awọn ti o wa ninu awọn ohun elo miiran. Boya awọn iwọntunwọnsi fifuye tabi awọn olupin data data, gbogbo awọn ohun elo wọnyi ni awọn iṣoro kanna ni agbegbe iṣẹ ṣiṣe giga. Loye awọn idiwọn ipilẹ wọnyi ati bii o ṣe le bori wọn ni gbogbogbo yoo ṣe iranlọwọ fun ọ lati ṣe iṣiro iṣẹ ṣiṣe ati iwọn ti awọn ohun elo wẹẹbu rẹ.

Mo n kọ lẹsẹsẹ awọn nkan ni idahun si awọn ibeere lati ọdọ awọn idagbasoke ọdọ ti o fẹ lati di alaye ti awọn ayaworan awọn ọna ṣiṣe. Ko ṣee ṣe lati ni oye ni kedere awọn ilana imudara ohun elo Linux laisi omiwẹ sinu awọn ipilẹ ti bii wọn ṣe n ṣiṣẹ ni ipele ẹrọ ṣiṣe. Botilẹjẹpe ọpọlọpọ awọn ohun elo lo wa, ninu jara yii Mo fẹ lati ṣawari awọn ohun elo orisun wẹẹbu ju awọn ohun elo tabili bii ẹrọ aṣawakiri tabi olootu ọrọ. Ohun elo yii jẹ ipinnu fun awọn olupilẹṣẹ ati awọn ayaworan ile ti o fẹ lati loye bii Linux tabi awọn eto Unix ṣe n ṣiṣẹ ati bii o ṣe le ṣeto wọn fun iṣẹ ṣiṣe giga.

Linux jẹ yara olupin ẹrọ ṣiṣe, ati nigbagbogbo awọn ohun elo rẹ nṣiṣẹ lori OS yii. Botilẹjẹpe Mo sọ “Linux”, ni ọpọlọpọ igba o le ro lailewu pe Mo tumọ si gbogbo awọn ọna ṣiṣe bi Unix ni gbogbogbo. Sibẹsibẹ, Emi ko ṣe idanwo koodu ti o tẹle lori awọn ọna ṣiṣe miiran. Nitorinaa, ti o ba nifẹ si FreeBSD tabi OpenBSD, awọn abajade rẹ le yatọ. Nigbati mo gbiyanju nkankan Linux-kan pato, Mo ntoka o jade.

Lakoko ti o le lo imọ yii lati kọ ohun elo kan lati ibere ati pe yoo jẹ iṣapeye ni pipe, o dara julọ lati ma ṣe iyẹn. Ti o ba kọ olupin wẹẹbu tuntun ni C tabi C++ fun ohun elo iṣowo ti ajo rẹ, eyi le jẹ ọjọ ikẹhin rẹ lori iṣẹ naa. Sibẹsibẹ, mimọ ilana ti awọn ohun elo wọnyi yoo ṣe iranlọwọ ni yiyan awọn eto to wa tẹlẹ. Iwọ yoo ni anfani lati ṣe afiwe awọn ọna ṣiṣe ti o da lori ilana pẹlu awọn eto orisun okun bi awọn ti o da lori iṣẹlẹ. Iwọ yoo loye ati riri idi ti Nginx ṣe dara julọ ju Apache httpd, kilode ti ohun elo Python orisun Tornado le ṣe iranṣẹ awọn olumulo diẹ sii ni akawe si ohun elo Python orisun Django kan.

ZeroHTTPd: Irinṣẹ Ẹkọ

ZeroHTTPd jẹ olupin wẹẹbu ti Mo kowe lati ibere ni C bi ohun elo ikọni. Ko ni awọn igbẹkẹle ita, pẹlu iraye si Redis. A ṣiṣe awọn ilana Redis ti ara wa. Wo isalẹ fun alaye diẹ sii.

Botilẹjẹpe a le jiroro lori imọ-jinlẹ ni ipari, ko si ohun ti o dara ju koodu kikọ, ṣiṣiṣẹ rẹ, ati ifiwera gbogbo awọn faaji olupin pẹlu ara wọn. Eyi ni ọna ti o han julọ. Nitorinaa, a yoo kọ olupin oju opo wẹẹbu ZeroHTTPd kan ti o rọrun nipa lilo awoṣe kọọkan: ipilẹ-ilana, o tẹle okun, ati ipilẹ iṣẹlẹ. Jẹ ká ṣayẹwo jade kọọkan ninu awọn wọnyi olupin ati ki o wo bi wọn ti ṣe akawe si kọọkan miiran. ZeroHTTPd ti wa ni imuse ni faili C kan ṣoṣo. Olupin ti o da lori iṣẹlẹ pẹlu uthash, imuse tabili hash nla ti o wa ninu faili akọsori kan. Ni awọn igba miiran, ko si awọn igbẹkẹle, ki o má ba ṣe idiju iṣẹ naa.

Ọpọlọpọ awọn asọye lo wa ninu koodu lati ṣe iranlọwọ fun ọ ni oye. Jije olupin wẹẹbu ti o rọrun ni awọn laini koodu diẹ, ZeroHTTPd tun jẹ ilana ti o kere julọ fun idagbasoke wẹẹbu. O ni iṣẹ ṣiṣe to lopin, ṣugbọn o lagbara lati sin awọn faili aimi ati awọn oju-iwe “imúdàgba” ti o rọrun pupọ. Mo ni lati sọ pe ZeroHTTPd dara fun kikọ bi o ṣe le ṣẹda awọn ohun elo Linux ti o ga julọ. Ni gbogbogbo, ọpọlọpọ awọn iṣẹ wẹẹbu nduro fun awọn ibeere, ṣayẹwo wọn ki o ṣe ilana wọn. Eyi ni deede ohun ti ZeroHTTPd yoo ṣe. Eyi jẹ ohun elo fun kikọ, kii ṣe iṣelọpọ. Ko ṣe nla ni mimu aṣiṣe ati pe ko ṣeeṣe lati ṣogo awọn iṣe aabo to dara julọ (oh bẹẹni, Mo lo strcpy) tabi awọn ẹtan ọlọgbọn ti ede C. Ṣugbọn Mo nireti pe o ṣe iṣẹ rẹ daradara.

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju
Oju-iwe ile ZeroHTTPd. O le gbejade awọn oriṣi faili ti o yatọ pẹlu awọn aworan

Alejo Book elo

Awọn ohun elo wẹẹbu ode oni kii ṣe opin si awọn faili aimi. Wọn ni awọn ibaraenisepo ti o nipọn pẹlu ọpọlọpọ awọn apoti isura infomesonu, awọn caches, bbl Nitorinaa a yoo ṣẹda ohun elo wẹẹbu ti o rọrun ti a pe ni “Iwe alejo” nibiti awọn alejo fi awọn titẹ sii silẹ labẹ awọn orukọ wọn. Iwe alejo tọju awọn titẹ sii ti a fi silẹ tẹlẹ. Wa ti tun kan alejo counter ni isalẹ ti awọn iwe.

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju
Ohun elo ayelujara "Alejo Book" ZeroHTTPd

Onka alejo ati awọn titẹ sii iwe alejo ti wa ni ipamọ ni Redis. Fun awọn ibaraẹnisọrọ pẹlu Redis, awọn ilana ti ara jẹ imuse; wọn ko dale lori ile-ikawe ita. Emi kii ṣe olufẹ nla kan ti yiyi koodu Homebrew jade nigba ti o wa ni gbangba ati awọn solusan idanwo daradara. Ṣugbọn idi ti ZeroHTTPd ni lati ṣe iwadi iṣẹ ṣiṣe Linux ati iraye si awọn iṣẹ ita, lakoko ti o nsin awọn ibeere HTTP ni ipa iṣẹ ṣiṣe to ṣe pataki. A gbọdọ ṣakoso awọn ibaraẹnisọrọ ni kikun pẹlu Redis ni ọkọọkan awọn faaji olupin wa. Ni diẹ ninu awọn faaji a lo awọn ipe dina, ninu awọn miiran a lo awọn ilana ti o da lori iṣẹlẹ. Lilo ile-ikawe alabara Redis ita gbangba kii yoo pese iṣakoso yii. Ni afikun, alabara Redis kekere wa ṣe awọn iṣẹ diẹ nikan (gbigba, ṣeto, ati jijẹ bọtini kan; gbigba ati fifi sori ẹrọ). Ni afikun, Ilana Redis jẹ yangan pupọ ati rọrun. Iwọ ko paapaa nilo lati kọ ẹkọ ni pataki. Otitọ pupọ pe ilana naa ṣe gbogbo iṣẹ ni bii awọn laini koodu ọgọọgọrun fihan bi o ṣe ro pe o jẹ daradara.

Nọmba atẹle yii fihan kini ohun elo ṣe nigbati alabara (oluwakiri) beere /guestbookURL.

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju
Bawo ni ohun elo iwe alejo ṣiṣẹ

Nigbati oju-iwe iwe alejo kan nilo lati gbejade, ipe kan wa si eto faili lati ka awoṣe sinu iranti ati awọn ipe nẹtiwọọki mẹta si Redis. Faili awoṣe ni pupọ julọ akoonu HTML fun oju-iwe ni sikirinifoto loke. Awọn oniduro pataki tun wa fun apakan agbara ti akoonu: awọn ifiweranṣẹ ati counter alejo. A gba wọn lati Redis, fi sii wọn sinu oju-iwe ati pese alabara pẹlu akoonu ti o ni kikun. Ipe kẹta si Redis le yago fun nitori Redis da iye bọtini tuntun pada nigbati o ba pọ si. Bibẹẹkọ, fun olupin wa, eyiti o ni faaji ti o da lori iṣẹlẹ asynchronous, ọpọlọpọ awọn ipe nẹtiwọọki jẹ idanwo to dara fun awọn idi ikẹkọ. Nitorinaa a ṣabọ iye ipadabọ Redis ti nọmba awọn alejo ki a beere lọwọ rẹ pẹlu ipe lọtọ.

Server architectures ZeroHTTPd

A n kọ awọn ẹya meje ti ZeroHTTPd pẹlu iṣẹ ṣiṣe kanna ṣugbọn awọn ọna faaji oriṣiriṣi:

  • Atunṣe
  • Olupin orita (ilana ọmọ kan fun ibeere)
  • Olupin-tẹlẹ orita (ṣaaju-forking ti awọn ilana)
  • Olupin pẹlu awọn okun ipaniyan (o tẹle ara kan fun ibeere)
  • Server pẹlu ami-o tẹle ẹda
  • orisun faaji poll()
  • orisun faaji epoll

A ṣe iwọn iṣẹ ti faaji kọọkan nipasẹ ikojọpọ olupin pẹlu awọn ibeere HTTP. Ṣugbọn nigbati o ba ṣe afiwe awọn ile-iṣọ afiwera giga, nọmba awọn ibeere pọ si. A ṣe idanwo ni igba mẹta ati iṣiro apapọ.

Ilana idanwo

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju
Eto idanwo fifuye ZeroHTTPd

O ṣe pataki pe nigba ṣiṣe awọn idanwo, gbogbo awọn paati ko ṣiṣẹ lori ẹrọ kanna. Ni ọran yii, OS nfa eto ṣiṣe afikun si oke bi awọn paati ti njijadu fun Sipiyu. Wiwọn ẹrọ ṣiṣe lori ọkọọkan awọn faaji olupin ti a yan jẹ ọkan ninu awọn ibi-afẹde pataki julọ ti adaṣe yii. Fifi awọn oniyipada diẹ sii yoo di ipalara si ilana naa. Nitorinaa, eto ti o wa ninu aworan loke ṣiṣẹ dara julọ.

Kini kọọkan ninu awọn olupin wọnyi ṣe?

  • load.unixism.net: Eyi ni ibi ti a nṣiṣẹ ab, Apache Benchmark IwUlO. O ṣe agbejade ẹru ti o nilo lati ṣe idanwo awọn faaji olupin wa.
  • nginx.unixism.net: Nigba miiran a fẹ ṣiṣe diẹ sii ju apẹẹrẹ kan ti eto olupin kan. Lati ṣe eyi, olupin Nginx pẹlu awọn eto ti o yẹ ṣiṣẹ bi iṣiro fifuye ti nbọ lati ab si awọn ilana olupin wa.
  • zerohttpd.unixism.net: Nibi ti a nṣiṣẹ wa olupin awọn eto lori meje yatọ si faaji, ọkan ni akoko kan.
  • redis.unixism.net: Olupin yii nṣiṣẹ Redis daemon, nibiti awọn titẹ sii iwe alejo ati awọn nọmba alejo ti wa ni ipamọ.

Gbogbo awọn olupin nṣiṣẹ lori ero isise kanna. Ero naa ni lati ṣe iṣiro iṣẹ ṣiṣe ti o pọju ti faaji kọọkan. Niwọn igba ti gbogbo awọn eto olupin ti ni idanwo lori ohun elo kanna, eyi jẹ ipilẹṣẹ fun lafiwe. Eto idanwo mi ni awọn olupin foju ti a ya lati Digital Ocean.

Kini a n wọn?

O le wiwọn awọn afihan oriṣiriṣi. A ṣe iṣiro iṣẹ ti faaji kọọkan ni iṣeto ti a fun nipasẹ ikojọpọ awọn olupin pẹlu awọn ibeere ni awọn ipele oriṣiriṣi ti afiwe: ẹru naa dagba lati 20 si 15 awọn olumulo nigbakanna.

Awọn abajade idanwo

Atẹle ti o tẹle n ṣe afihan iṣẹ ti awọn olupin lori oriṣiriṣi awọn faaji ni awọn ipele ti o yatọ. Iwọn y-axis jẹ nọmba awọn ibeere fun iṣẹju-aaya, x-axis jẹ awọn asopọ ti o jọra.

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju

Lainos iṣẹ ohun elo nẹtiwọki. Ọrọ Iṣaaju

Ni isalẹ ni tabili pẹlu awọn abajade.

ibeere fun keji

parallelism
aṣetunṣe
orita
ami-orita
sisanwọle
ami-sisanwọle
iboro
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
nla itankale
2138

5000
-
nla itankale
1600
1100
2519
-
2235

8000
-
-
1200
nla itankale
2451
-
2100

10
-
-
nla itankale
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Lati iwọn ati tabili o le rii pe loke 8000 awọn ibeere nigbakanna a ni awọn oṣere meji nikan ti o ku: orita-tẹlẹ ati epoll. Bi ẹru naa ṣe n pọ si, olupin ti o da lori ibo ṣe buru ju ọkan ṣiṣan lọ. Okun-tẹlẹ-ẹda faaji jẹ oludije ti o yẹ si epoll, majẹmu si bawo ni ekuro Linux ṣe ṣeto awọn nọmba nla ti awọn okun.

ZeroHTTPd koodu Orisun

ZeroHTTPd koodu Orisun nibi. Nibẹ ni a lọtọ liana fun kọọkan faaji.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking—│ 04_ threading │ ├── main.c ├── 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └─├ gbogbo eniyan Make.c ├── atọka .html │ └── tux png └── awọn awoṣe └── iwe alejo └── index.html

Ni afikun si awọn ilana meje fun gbogbo awọn ayaworan ile, meji diẹ sii wa ninu itọsọna ipele-giga: gbogbo eniyan ati awọn awoṣe. Ni igba akọkọ ti ni awọn index.html faili ati awọn aworan lati akọkọ sikirinifoto. O le fi awọn faili miiran ati awọn folda sibẹ, ati pe ZeroHTTPd yẹ ki o sin awọn faili aimi wọnyẹn laisi awọn iṣoro eyikeyi. Ti ọna ẹrọ aṣawakiri ba baamu ọna ti o wa ninu folda gbangba, lẹhinna ZeroHTTPd wa faili index.html ninu itọsọna yii. Awọn akoonu fun awọn alejo iwe ti wa ni ti ipilẹṣẹ ni agbara. O ni oju-iwe ile nikan, ati pe akoonu rẹ da lori faili 'awọn awoṣe/bookbook/index.html'. ZeroHTTPd ni irọrun ṣafikun awọn oju-iwe ti o ni agbara fun itẹsiwaju. Ero naa ni pe awọn olumulo le ṣafikun awọn awoṣe si itọsọna yii ati fa ZeroHTTPd bi o ti nilo.

Lati kọ gbogbo awọn olupin meje, ṣiṣe make all lati oke-ipele liana - ati gbogbo awọn kọ yoo han ni yi liana. Awọn faili ti o le ṣiṣẹ wa fun gbogbo eniyan ati awọn ilana ilana awoṣe ninu itọsọna eyiti wọn ṣe ifilọlẹ.

Lainos API

O ko nilo lati ni oye daradara ni Lainos API lati loye alaye ninu jara nkan yii. Sibẹsibẹ, Mo ṣeduro kika diẹ sii lori koko yii; ọpọlọpọ awọn orisun itọkasi wa lori Intanẹẹti. Botilẹjẹpe a yoo fi ọwọ kan awọn ẹka pupọ ti Linux APIs, idojukọ wa yoo jẹ akọkọ lori awọn ilana, awọn okun, awọn iṣẹlẹ, ati akopọ nẹtiwọọki. Ni afikun si awọn iwe ati awọn nkan nipa Linux API, Mo tun ṣeduro kika mana fun awọn ipe eto ati awọn iṣẹ ikawe ti a lo.

Išẹ ati Scalability

Ọkan akọsilẹ nipa iṣẹ ati scalability. Ni imọ-jinlẹ, ko si asopọ laarin wọn. O le ni iṣẹ wẹẹbu kan ti o ṣiṣẹ daradara, pẹlu akoko idahun ti awọn milliseconds diẹ, ṣugbọn kii ṣe iwọn rara. Bakanna, ohun elo wẹẹbu ti ko ṣiṣẹ le wa ti o gba iṣẹju diẹ lati dahun, ṣugbọn o ṣe iwọn nipasẹ awọn mewa lati mu ẹgbẹẹgbẹrun awọn olumulo nigbakanna. Sibẹsibẹ, apapo ti iṣẹ giga ati scalability jẹ apapo ti o lagbara pupọ. Awọn ohun elo ti o ga julọ ni gbogbogbo lo awọn orisun ni iwọnwọn ati nitorinaa ṣiṣẹ daradara diẹ sii awọn olumulo nigbakanna lori olupin, idinku awọn idiyele.

Sipiyu ati I/O awọn iṣẹ-ṣiṣe

Ni ipari, ni iširo nigbagbogbo awọn oriṣi awọn iṣẹ ṣiṣe meji ṣee ṣe: fun I/O ati Sipiyu. Gbigba awọn ibeere lori Intanẹẹti (nẹtiwọki I/O), awọn faili ti n ṣiṣẹ (nẹtiwọọki ati disk I/O), sisọ pẹlu ibi ipamọ data (nẹtiwọọki ati I/O disk) jẹ gbogbo awọn iṣẹ I/O. Diẹ ninu awọn ibeere data le jẹ aladanla Sipiyu diẹ (titọ, aropin awọn abajade miliọnu kan, ati bẹbẹ lọ). Pupọ julọ awọn ohun elo wẹẹbu ni opin nipasẹ I/O ti o pọju ti o ṣeeṣe, ati pe ero isise naa ko lo ni agbara ni kikun. Nigbati o ba rii pe diẹ ninu awọn iṣẹ-ṣiṣe I / O nlo ọpọlọpọ Sipiyu, o ṣeese julọ jẹ ami ti faaji ohun elo ti ko dara. Eyi le tumọ si pe awọn orisun Sipiyu ti sọnu lori iṣakoso ilana ati iyipada ọrọ - ati pe eyi ko wulo patapata. Ti o ba n ṣe nkan bii sisẹ aworan, iyipada faili ohun, tabi ẹkọ ẹrọ, lẹhinna ohun elo nilo awọn orisun Sipiyu ti o lagbara. Ṣugbọn fun ọpọlọpọ awọn ohun elo eyi kii ṣe ọran naa.

Kọ ẹkọ diẹ sii nipa awọn faaji olupin

  1. Apá I: Iterative Architecture
  2. Apa II. orita apèsè
  3. Abala III. Pre-orita apèsè
  4. Apa IV. Awọn olupin pẹlu awọn okun ti ipaniyan
  5. Apá V. Pre-asapo olupin
  6. Apa VI. Pol-orisun faaji
  7. Apa VII. epoll-orisun faaji

orisun: www.habr.com

Fi ọrọìwòye kun