Fampisehoana fampiharana tambajotra Linux. Sava lalana

Ampiasaina eny rehetra eny ny fampiharana amin'ny Internet, ary amin'ireo protocole fitaterana rehetra, ny HTTP dia manana ny anjara liona. Rehefa mandalina ny nuances amin'ny fampivoarana ny rindranasa amin'ny tranonkala, ny ankamaroan'ny olona dia tsy miraharaha loatra ny rafitra fiasana izay tena iasan'ireo fampiharana ireo. Ny fisarahan'ny fampandrosoana (Dev) sy ​​ny asa (Ops) dia vao mainka nanaratsy ny toe-draharaha. Saingy miaraka amin'ny fiakaran'ny kolontsaina DevOps, lasa tompon'andraikitra amin'ny fampandehanana ny rindranasany amin'ny rahona ny mpamorona, noho izany dia tena ilaina ho azy ireo ny mahafantatra tsara ny ambadiky ny rafitra fiasana. Tena ilaina izany raha manandrana mametraka rafitra ho an'ny fifandraisana an'aliny na an'aliny ianao.

Ny fetra amin'ny serivisy tranonkala dia mitovy amin'ny an'ny fampiharana hafa. Na mpifandanja entana izany na mpizara angon-drakitra, ireo fampiharana rehetra ireo dia manana olana mitovy amin'izany amin'ny tontolon'ny asa avo lenta. Ny fahatakarana ireo fetra fototra ireo sy ny fomba handresena azy ireo amin'ny ankapobeny dia hanampy anao hanombantombana ny fahombiazan'ny fampiharana amin'ny tranonkalanao.

Manoratra ity andian-dahatsoratra ity aho ho valin'ny fanontaniana avy amin'ireo mpamorona tanora maniry ny ho lasa architects rafitra mahay. Tsy azo atao ny mahatakatra mazava tsara ny teknikan'ny fanatsarana ny fampiharana Linux raha tsy miditra amin'ny fototry ny fomba fiasan'izy ireo eo amin'ny sehatry ny rafitra fiasana. Na dia misy karazana rindranasa maro aza, amin'ity andiany ity dia te-hijery rindranasa mifototra amin'ny tranonkala aho fa tsy fampiharana desktop toy ny navigateur na tonian-dahatsoratra. Ity fitaovana ity dia natao ho an'ny mpamorona sy ny architects izay te-hahatakatra ny fomba fiasan'ny programa Linux na Unix sy ny fomba handrafetana azy ireo amin'ny fampisehoana avo lenta.

Linux dia efitrano mpizara rafitra fiasana, ary matetika ny fampiharanao dia mandeha amin'ity OS ity. Na dia miteny aza aho hoe "Linux", amin'ny ankamaroan'ny fotoana dia azonao atao ny mihevitra fa ny rafitra fiasa rehetra mitovy amin'ny Unix no tiako holazaina amin'ny ankapobeny. Na izany aza, tsy nanandrana ny code miaraka amin'ny rafitra hafa aho. Noho izany, raha liana amin'ny FreeBSD na OpenBSD ianao dia mety hiovaova ny valiny. Rehefa manandrana zavatra manokana Linux aho dia manondro izany.

Na dia azonao atao aza ny mampiasa an'io fahalalana io mba hananganana rindranasa iray hatrany am-boalohany ary ho azo atao tsara izany, dia tsara kokoa ny tsy manao izany. Raha manoratra mpizara tranonkala vaovao amin'ny C na C++ ho an'ny rindranasa fandraharahana an'ny fikambananao ianao, dia mety ho andro farany amin'ny asanao izao. Na izany aza, ny fahafantarana ny firafitry ireo fampiharana ireo dia hanampy amin'ny fisafidianana ireo programa efa misy. Azonao atao ny mampitaha ny rafitra mifototra amin'ny dingana amin'ny rafitra mifototra amin'ny kofehy ary koa ireo rafitra mifototra amin'ny hetsika. Ho takatrao sy hankasitrahanao ny antony mahatonga an'i Nginx manao tsara kokoa noho ny Apache httpd, nahoana ny fampiharana Python mifototra amin'ny Tornado dia afaka manompo mpampiasa bebe kokoa raha oharina amin'ny fampiharana Python mifototra Django.

ZeroHTTPd: Fitaovana fianarana

ZeroHTTPd dia mpizara tranonkala izay nosoratako hatramin'ny voalohany amin'ny C ho fitaovana fampianarana. Tsy manana fiankinana ivelany izy io, anisan'izany ny fidirana amin'ny Redis. Manao ny fomba fiasa Redisy manokana izahay. Jereo eto ambany raha mila fanazavana fanampiny.

Na dia afaka miresaka momba ny teoria aza isika, dia tsy misy tsara kokoa noho ny fanoratana kaody, ny fampandehanana azy, ary ny fampitahana ny maritrano mpizara rehetra. Izany no fomba mazava indrindra. Noho izany, hanoratra mpizara tranonkala ZeroHTTPd tsotra isika amin'ny fampiasana modely tsirairay: mifototra amin'ny dingana, mifototra amin'ny kofehy, ary mifototra amin'ny hetsika. Andeha hojerentsika ny tsirairay amin'ireo mpizara ireo ary hojerentsika ny fomba fiasan'izy ireo raha oharina amin'ny tsirairay. ZeroHTTPd dia ampiharina amin'ny rakitra C tokana. Ny mpizara mifototra amin'ny hetsika dia misy uthash, fampiharana latabatra tenifototra lehibe izay tonga amin'ny rakitra lohateny tokana. Amin'ny toe-javatra hafa, tsy misy fiankinan-doha, mba tsy hanasarotra ny tetikasa.

Betsaka ny fanehoan-kevitra ao amin'ny kaody hanampy anao hahatakatra. Amin'ny maha mpizara tranonkala tsotra amin'ny andalana vitsivitsy amin'ny kaody, ZeroHTTPd dia rafitra kely indrindra amin'ny fampivoarana tranonkala. Izy io dia manana fiasa voafetra, saingy afaka manolotra rakitra static sy pejy "dynamique" tena tsotra. Tsy maintsy milaza aho fa ny ZeroHTTPd dia tsara amin'ny fianarana ny fomba hamoronana rindranasa Linux avo lenta. Amin'ny ankapobeny, ny ankamaroan'ny serivisy tranonkala dia miandry fangatahana, manamarina azy ireo ary mikarakara azy ireo. Izany indrindra no hataon'i ZeroHTTPd. Fitaovana fianarana io fa tsy famokarana. Tsy tsara amin'ny fikarakarana fahadisoana ary tsy azo inoana fa hirehareha amin'ny fomba fiarovana tsara indrindra (oh eny, nampiasa aho strcpy) na ny hafetsen'ny teny C. Fa manantena aho fa hahavita tsara ny asany.

Fampisehoana fampiharana tambajotra Linux. Sava lalana
ZeroHTTPd pejy fandraisana. Afaka mamoaka karazana rakitra isan-karazany ao anatin'izany ny sary

Fampiharana Boky Vahiny

Ny fampiharana tranonkala maoderina dia matetika tsy voafetra amin'ny rakitra static. Izy ireo dia manana fifandraisana sarotra amin'ny angon-drakitra isan-karazany, cache, sns. Noho izany dia hamorona fampiharana tranonkala tsotra antsoina hoe "Guest Book" izay ahafahan'ny mpitsidika mamela ny fidirana amin'ny anarany. Ny bokin'ny vahiny dia mitahiry ireo lahatsoratra navela teo aloha. Misy kaontera mpitsidika ihany koa eo amin'ny faran'ny pejy.

Fampisehoana fampiharana tambajotra Linux. Sava lalana
Fampiharana tranonkala "Guest Book" ZeroHTTPd

Voatahiry ao amin'ny Redis ny kaontin'ny mpitsidika sy ny fidirana amin'ny bokin'ny vahiny. Ho an'ny fifandraisana amin'i Redis, ny fomba fiasa manokana dia ampiharina; tsy miankina amin'ny tranomboky ivelany izy ireo. Tsy mpankafy be aho amin'ny famoahana kaody homebrew rehefa misy vahaolana azo imasom-bahoaka sy voasedra tsara. Saingy ny tanjon'ny ZeroHTTPd dia ny handalina ny fahombiazan'ny Linux sy ny fidirana amin'ny serivisy ivelany, raha toa ka misy fiantraikany lehibe amin'ny asa ny fanompoana ny fangatahana HTTP. Tsy maintsy mifehy tanteraka ny fifandraisana amin'i Redis ao amin'ny rafitra mpizara tsirairay. Amin'ny rafitra sasany dia mampiasa fanakanana antso izahay, amin'ny hafa mampiasa fomba fiasa mifototra amin'ny hetsika. Ny fampiasana tranomboky mpanjifa Redis ivelany dia tsy hanome an'io fifehezana io. Fanampin'izany, ny mpanjifanay Redis kely dia tsy manao afa-tsy asa vitsivitsy (mahazo, mametraka ary mampitombo ny fanalahidy; mahazo sy ampidirina amina array). Ankoatr'izay, ny protocol Redis dia tena kanto sy tsotra. Tsy mila mampianatra manokana azy akory ianao. Ny tena zava-misy fa ny protocole dia manao ny asa rehetra amin'ny andalana an-jatony amin'ny fehezan-dalàna dia mampiseho ny fiheverana tsara azy.

Ity sary manaraka ity dia mampiseho izay ataon'ny fampiharana rehefa mangataka ny mpanjifa (browser). /guestbookURL.

Fampisehoana fampiharana tambajotra Linux. Sava lalana
Ahoana ny fiasan'ny fampiharana boky vahiny

Rehefa mila avoaka ny pejin'ny boky vahiny, dia misy antso iray mankany amin'ny rafi-drakitra mba hamakiana ilay môdely ho fitadidiana ary antso an-tambajotra telo mankany Redis. Ny rakitra môdely dia ahitana ny ankamaroan'ny atiny HTML ho an'ny pejy ao amin'ny pikantsary etsy ambony. Misy ihany koa ny toerana manokana ho an'ny ampahany mavitrika amin'ny votoaty: lahatsoratra sy mpitsidika mpitsidika. Mandray azy ireo avy amin'ny Redis izahay, ampidiro ao amin'ny pejy ary omeo ny mpanjifa ny votoaty feno. Ny antso fahatelo amin'i Redis dia azo sorohina satria i Redis dia mamerina ny sanda fanalahidy vaovao rehefa mitombo. Na izany aza, ho an'ny mpizara anay, izay manana maritrano mifototra amin'ny hetsika asynchronous, antso an-tambajotra maro no fitsapana tsara ho an'ny tanjona fianarana. Noho izany dia arianay ny sandan'ny fiverenan'ny Redis amin'ny isan'ny mpitsidika ary manontany azy amin'ny antso mitokana.

Ny maritrano mpizara ZeroHTTPd

Manangana dikan-teny fito an'ny ZeroHTTPd izahay miaraka amin'ny fiasa mitovy fa ny maritrano samihafa:

  • Miverimberina
  • Mpizara fork (fizotry ny ankizy iray isaky ny fangatahana)
  • Mpizara pre-fork (pre-forking of process)
  • Server miaraka amin'ny kofehy famonoana (laharana iray isaky ny fangatahana)
  • Server misy famoronana mialoha ny kofehy
  • Architecture mifototra poll()
  • Architecture mifototra epoll

Mandrefy ny fahombiazan'ny maritrano tsirairay izahay amin'ny famenoana ny lohamilina amin'ny fangatahana HTTP. Saingy rehefa mampitaha ny maritrano mifanitsy indrindra dia mitombo ny isan'ny fanontaniana. Mitsapa in-telo izahay ary manao kajy ny salan'isa.

Fomba fitsapana

Fampisehoana fampiharana tambajotra Linux. Sava lalana
ZeroHTTPd fametrahana fitiliana entana

Zava-dehibe ny hoe rehefa manao fitsapana dia tsy mandeha amin'ny milina iray ny singa rehetra. Amin'ity tranga ity, ny OS dia mitaky fandaharam-potoana fanampiny raha mifaninana amin'ny CPU ny singa. Ny fandrefesana ny rafitra fiasana ambonin'ny tsirairay amin'ireo maritrano mpizara voafantina dia iray amin'ireo tanjona manan-danja indrindra amin'ity fanazaran-tena ity. Hanjary hanimba ny fizotrany ny fampitomboana ireo fari-pitsipika maro kokoa. Noho izany, ny fametrahana eo amin'ny sary etsy ambony dia miasa tsara indrindra.

Inona no ataon'ireo mpizara tsirairay ireo?

  • load.unixism.net: Eto izahay no mihazakazaka ab, fampiasa Apache Benchmark. Izy io dia miteraka ny enta-mavesatra ilaina mba hitsapana ny maritrano mpizara.
  • nginx.unixism.net: Indraindray isika dia te-hanao ohatra mihoatra ny iray amin'ny programa mpizara. Mba hanaovana izany, ny mpizara Nginx miaraka amin'ny filaharana mifanaraka amin'izany dia miasa ho toy ny mpifandanja entana ab amin'ny fizotry ny mpizara anay.
  • zerohttpd.unixism.net: Eto izahay dia mitantana ny programa mpizara amin'ny rafitra fito samy hafa, iray isaky ny mandeha.
  • redis.unixism.net: Ity mpizara ity dia mitantana ny daemon Redis, izay misy ny fidirana amin'ny bokin'ny vahiny sy ny kaontin'ny mpitsidika.

Ny mpizara rehetra dia mandeha amin'ny fotodrafitrasa iray ihany. Ny hevitra dia ny fanombanana ny fahombiazan'ny maritrano tsirairay. Koa satria ny programa mpizara rehetra dia voasedra amin'ny fitaovana iray ihany, ity dia fototra ho an'ny fampitahana. Ny fanamboarana andrana nataoko dia misy mpizara virtoaly nofaina tamin'ny Digital Ocean.

Inona no refesintsika?

Afaka mandrefy tondro samihafa ianao. Manombatombana ny fahombiazan'ny maritrano tsirairay amin'ny rindrankajy nomena izahay amin'ny alàlan'ny famenoana ireo lohamilina amin'ny fangatahana amin'ny ambaratonga mitovy: mitombo 20 ka hatramin'ny 15 ny mpampiasa miaraka.

Voka fitsapana

Ity tabilao manaraka ity dia mampiseho ny fahombiazan'ny mpizara amin'ny maritrano samihafa amin'ny ambaratonga mitovy amin'ny parallèle. Ny y-axis dia ny isan'ny fangatahana isan-tsegondra, ny x-axis dia fifandraisana parallèle.

Fampisehoana fampiharana tambajotra Linux. Sava lalana

Fampisehoana fampiharana tambajotra Linux. Sava lalana

Fampisehoana fampiharana tambajotra Linux. Sava lalana

Ireto ambany ireto ny tabilao misy ny valiny.

fangatahana isan-tsegondra

fitoviana
miverimberina
fork
pre-fork
mivantana
mialoha ny streaming
fitsapan-kevitra
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
fiparitahana lehibe
2138

5000
-
fiparitahana lehibe
1600
1100
2519
-
2235

8000
-
-
1200
fiparitahana lehibe
2451
-
2100

10
-
-
fiparitahana lehibe
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Avy amin'ny grafika sy ny latabatra dia hita fa mihoatra ny 8000 ny fangatahana miaraka dia manana mpilalao roa sisa tavela: pre-fork sy epoll. Rehefa mitombo ny entana, ny mpizara mifototra amin'ny fitsapan-kevitra dia miasa ratsy kokoa noho ny iray mandeha. Ny maritrano alohan'ny famoronana kofehy dia mpifaninana mendrika amin'ny epoll, porofon'ny fandraisan'ny kernel Linux fandrindrana kofehy marobe.

ZeroHTTPd Source Code

ZeroHTTPd Source Code eto. Misy lahatahiry manokana ho an'ny maritrano tsirairay.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking ─ ─ ─ ─ ─ . kofehy │ ├── main.c ├── 04_prethreading │ ├── main.c ├── 05_poll │ ├── main.c ├── 06_epoll │ └── ─ ─ public ─ ├── index .html │ └── tux png └── templates └── guestbook └── index.html

Ho fanampin'ny lahatahiry fito ho an'ny maritrano rehetra dia misy roa hafa ao amin'ny lahatahiry ambony indrindra: public sy templates. Ny voalohany dia misy ny rakitra index.html sy ny sary avy amin'ny pikantsary voalohany. Azonao atao ny mametraka rakitra sy lahatahiry hafa ao, ary ZeroHTTPd dia tokony hanolotra ireo rakitra static tsy misy olana. Raha mifanaraka amin'ny lalana ao amin'ny lahatahiry ho an'ny daholobe ny lalana ao amin'ny navigateur, dia i ZeroHTTPd no mitady ny rakitra index.html ao amin'ity lahatahiry ity. Ny votoaty ho an'ny boky vahiny dia noforonina mavitrika. Pejy fandraisana ihany no misy azy, ary mifototra amin'ny rakitra 'templates/guestbook/index.html' ny votoatiny. ZeroHTTPd dia manampy pejy mavitrika amin'ny fanitarana. Ny hevitra dia ny ahafahan'ny mpampiasa manampy môdely amin'ity lahatahiry ity ary manitatra ZeroHTTPd raha ilaina.

Mba hananganana mpizara fito rehetra, mihazakazaka make all avy amin'ny lahatahiry ambony indrindra - ary ny fananganana rehetra dia hiseho amin'ity lahatahiry ity. Ny rakitra azo tanterahana dia mitady ny lahatahiry ho an'ny daholobe sy ny templates ao amin'ny lahatahiry izay nanombohana azy.

Linux API

Tsy mila mahay tsara ny Linux API ianao vao mahazo ny fampahalalana ato amin'ity andian-dahatsoratra ity. Na izany aza, manoro hevitra aho hamaky bebe kokoa momba ity lohahevitra ity; misy loharanon-kevitra maro ao amin'ny Internet. Na dia hikasika sokajy maromaro amin'ny Linux API aza izahay, ny fifantohanay dia ny fizotrany, ny kofehy, ny hetsika ary ny tambazotran'ny tambajotra. Ho fanampin'ny boky sy lahatsoratra momba ny Linux API, dia manoro hevitra ihany koa aho hamaky mana ho an'ny antson'ny rafitra sy ny fiasan'ny tranomboky ampiasaina.

Fahombiazana sy fahavitrihana

Fanamarihana iray momba ny fampisehoana sy ny scalability. Ara-teorika dia tsy misy ifandraisany amin'izy ireo. Afaka manana serivisy tranonkala miasa tsara ianao, miaraka amin'ny fotoana famaliana milisegondra vitsivitsy, fa tsy mirefy mihitsy. Toy izany koa, mety misy fampiharana tranonkala tsy mahomby izay maka segondra vitsy vao mamaly, saingy mizana am-polony izy io mba handraisana mpampiasa an'aliny miaraka. Na izany aza, ny fampifangaroana ny fampisehoana avo lenta sy ny scalability dia fitambarana mahery vaika. Amin'ny ankapobeny dia mampiasa loharanon-karena amin'ny ankapobeny ny fampiharana avo lenta ary noho izany dia manompo amin'ny fomba mahomby kokoa ireo mpampiasa miaraka amin'ny mpizara, mampihena ny fandaniana.

CPU sy I/O asa

Farany, amin'ny informatika dia misy karazana asa roa azo atao foana: ho an'ny I/O sy CPU. Ny fandraisana fangatahana amin'ny Internet (tambajotra I/O), fandefasana rakitra (tambajotra sy kapila I/O), fifandraisana amin'ny angon-drakitra (tambajotra sy kapila I/O) dia hetsika I/O rehetra. Ny fangatahana angon-drakitra sasany dia mety ho somary mafimafy CPU (fandaminana, salan'isa vokatra iray tapitrisa, sns.). Ny ankamaroan'ny fampiharana amin'ny Internet dia voafetra amin'ny I/O ambony indrindra azo atao, ary zara raha ampiasaina amin'ny fahafaha-manao feno ny processeur. Rehefa hitanao fa ny asa I/O sasany dia mampiasa CPU be dia be, dia mety ho mariky ny rafitra fampiharana ratsy izany. Mety midika izany fa very maina ny loharanon-karena CPU amin'ny fitantanana ny dingana sy ny fiovan'ny toe-javatra - ary tsy ilaina izany. Raha toa ianao ka manao zavatra toy ny fanodinana sary, fiovam-peo, na fianarana milina, dia mila loharanon-karena CPU matanjaka ny fampiharana. Saingy ho an'ny ankamaroan'ny fampiharana dia tsy izany no izy.

Mianara bebe kokoa momba ny maritrano mpizara

  1. Fizarana I: Architecture Iterative
  2. Fizarana II. Mpizara fork
  3. Fizarana III. Mpizara mialoha fork
  4. Fizarana IV. Servers misy kofehy famonoana
  5. Fizarana V. Serveur efa misy kofehy
  6. Fizarana VI. Architecture mifototra amin'ny Pol
  7. Fizarana VII. Architecture mifototra amin'ny epoll

Source: www.habr.com

Add a comment