Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo

Usetyenziso lwewebhu ngoku lusetyenziswa kuyo yonke indawo, kwaye phakathi kwazo zonke iiprothokholi zothutho, iHTTP ithatha isabelo sengonyama. Xa ufunda i-nuances yophuhliso lwesicelo sewebhu, abantu abaninzi bahlawula ingqalelo encinci kakhulu kwinkqubo yokusebenza apho ezi zicelo zisebenza ngokwenene. Ukwahlulwa kophuhliso (i-Dev) kunye nokusebenza (i-Ops) yenze kuphela imeko ibe mandundu. Kodwa ngokunyuka kwenkcubeko ye-DevOps, abaphuhlisi baba noxanduva lokuqhuba izicelo zabo kwilifu, ngoko ke kuluncedo kakhulu kubo ukuba baqhelane ngokupheleleyo ne-backend yenkqubo yokusebenza. Oku kuluncedo ngakumbi ukuba uzama ukusebenzisa inkqubo yamawaka okanye amashumi amawaka oqhagamshelo ngaxeshanye.

Izithintelo kwiinkonzo zewebhu zifana kakhulu nezo zezinye izicelo. Nokuba ngaba balinganisi bomthwalo okanye abancedisi bedatabase, zonke ezi zicelo zineengxaki ezifanayo kwindawo yokusebenza okuphezulu. Ukuqonda le mida isisiseko kunye nendlela yokuyoyisa ngokubanzi kuya kukunceda uvavanye ukusebenza kunye nobungakanani bezicelo zakho zewebhu.

Ndibhala olu ngcelele lwamanqaku ndiphendula imibuzo evela kubaphuhlisi abancinci abafuna ukuba ngabayili benkqubo abanolwazi. Akunakwenzeka ukuqonda ngokucacileyo iindlela zokusebenzisa iLinux ngaphandle kokuntywila kwiziseko zendlela ezisebenza ngayo kwinqanaba lenkqubo yokusebenza. Nangona zininzi iintlobo zezicelo, kolu ngcelele ndifuna ukuphonononga usetyenziso olusekwe kwiwebhu kunezicelo zedesktop ezifana nesikhangeli okanye umhleli wombhalo. Esi sixhobo senzelwe abaphuhlisi kunye nabakhi bezakhiwo abafuna ukuqonda indlela iLinux okanye iinkqubo ze-Unix ezisebenza ngayo kunye nendlela yokuyilungiselela ukusebenza okuphezulu.

ILinux yiyo igumbi lomncedisi inkqubo yokusebenza, kwaye amaxesha amaninzi izicelo zakho zisebenza kule OS. Nangona ndisithi "Linux", ixesha elininzi ungacinga ngokukhuselekileyo ukuba ndithetha zonke iinkqubo zokusebenza ezifana ne-Unix ngokubanzi. Nangona kunjalo, andizange ndiyivavanye ikhowudi ehamba kunye nezinye iinkqubo. Ke, ukuba unomdla kwiFreeBSD okanye kwi-OpenBSD, iziphumo zakho zinokwahluka. Xa ndizama into ethile yeLinux, ndiyayikhomba.

Ngelixa ungasebenzisa olu lwazi ukwakha i-app ukusuka ekuqaleni kwaye iya kulungiswa ngokugqibeleleyo, kungcono ukuba ungayenzi loo nto. Ukuba ubhala iseva yewebhu entsha kwi-C okanye kwi-C++ yesicelo seshishini lombutho wakho, oku kunokuba lusuku lwakho lokugqibela emsebenzini. Nangona kunjalo, ukwazi ubume bezi zicelo kuya kunceda ekukhetheni iinkqubo ezikhoyo. Uya kukwazi ukuthelekisa iinkqubo ezisekelwe kwinkqubo kunye neenkqubo ezisekelwe kwintambo kunye neziganeko ezisekelwe kwisiganeko. Uya kuqonda kwaye uqonde ukuba kutheni i-Nginx yenza ngcono kune-Apache httpd, kutheni isicelo seTornado esekwe kwiPython sinokusebenzela abasebenzisi abaninzi xa kuthelekiswa nesicelo sePython esekwe kwiDjango.

I-ZeroHTTPd: Isixhobo sokuFunda

ZeroHTTPd ngumncedisi wewebhu endibhale ukusuka ekuqaleni ku-C njengesixhobo sokufundisa. Ayinakuxhomekeka kwangaphandle, kubandakanywa ukufikelela kwiRedis. Siqhuba ezethu iinkqubo zeRedis. Bona ngezantsi iinkcukacha ezingaphezulu.

Nangona sinokuxoxa ngethiyori ngobude, akukho nto ingcono kunokubhala ikhowudi, ukuyiqhuba, kunye nokuthelekisa zonke ii-architecture zomncedisi omnye komnye. Le yeyona ndlela icacileyo. Ke ngoko, siya kubhala iseva yewebhu ye-ZeroHTTPd elula sisebenzisa imodeli nganye: esekwe kwinkqubo, esekwe kwintambo, kunye nesekwe kwisiganeko. Makhe sijonge nganye kwezi seva kwaye sibone ukuba ziqhuba njani xa zithelekisa enye kwenye. I-ZeroHTTPd iphunyezwe kwifayile enye yeC. Iseva esekwe kwisiganeko ibandakanya uthash, uphumezo olukhulu lwetafile yehash esiza kwifayile yeheader enye. Kwezinye iimeko, akukho kuxhomekeka, ukuze kungabi nzima iprojekthi.

Kukho izimvo ezininzi kwikhowudi ukukunceda uqonde. Ukuba ngumncedisi wewebhu olula kwimigca embalwa yekhowudi, i-ZeroHTTPd nayo iyisakhelo esincinci sophuhliso lwewebhu. Inokusebenza okulinganiselweyo, kodwa iyakwazi ukukhonza iifayile ezimileyo kunye namaphepha alula kakhulu "aguqukayo". Ndimele nditsho ukuba i-ZeroHTTPd ilungile ekufundeni indlela yokwenza usetyenziso oluphezulu lweLinux. Ngokubanzi, uninzi lweenkonzo zewebhu zilinda izicelo, zijonge kwaye ziqhubeke. Yiloo nto kanye iZeroHTTPd eya kuyenza. Esi sisixhobo sokufunda, hayi imveliso. Akulunganga ekuphatheni iimpazamo kwaye akunakufane kuqhayise ngezona ndlela zokhuseleko (oh ewe, bendikhe ndasebenzisa strcpy) okanye amaqhinga obuchule bolwimi C. Kodwa ndiyathemba ukuba iwenza kakuhle umsebenzi wayo.

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo
Iphepha lasekhaya le-ZeroHTTPd. Iyakwazi ukuvelisa iindidi zefayile ezahlukeneyo kuquka imifanekiso

Isicelo seNcwadi yeeNdwendwe

Usetyenziso lwewebhu lwangoku alupheleli kwiifayile ezimileyo. Banonxibelelwano oluntsonkothileyo kunye noovimba beenkcukacha ezahlukeneyo, iicache, njl. Incwadi yeendwendwe igcina amangenelo ashiywe ngaphambili. Kukwakho nekhawuntara yeendwendwe emazantsi ephepha.

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo
Isicelo seWebhu "Incwadi yeeNdwendwe" ZeroHTTPd

Ikhawuntara yeendwendwe kunye namangenelo eencwadi zeendwendwe agcinwe eRedis. Kunxibelelwano neRedis, iinkqubo ezizezakho ziyaphunyezwa, azixhomekeke kwithala leencwadi langaphandle. Andingomntu othanda kakhulu ukukhupha ikhowudi ye-homebrew xa kukho izisombululo ezikhoyo esidlangalaleni kwaye zivavanywe kakuhle. Kodwa injongo yeZeroHTTPd kukufunda ukusebenza kweLinux kunye nokufikelela kwiinkonzo zangaphandle, ngelixa ukusebenzela izicelo zeHTTP kunempembelelo enkulu yokusebenza. Kufuneka silawule ngokupheleleyo unxibelelwano kunye neRedis kwi-architecture nganye yeseva yethu. Kwezinye izakhiwo sisebenzisa iifowuni ezithintelayo, kwezinye sisebenzisa iinkqubo ezisekelwe kwisiganeko. Ukusebenzisa ilayibrari yomxhasi weRedis yangaphandle ayizukubonelela ngolu lawulo. Ukongeza, umxhasi wethu omncinci weRedis wenza kuphela imisebenzi embalwa (ukufumana, ukuseta kunye nokunyusa isitshixo; ukufumana kunye nokongeza kuluhlu). Ukongeza, iprotocol yeRedis intle kakhulu kwaye ilula. Awudingi nokuba uyifundise ngokukodwa. Inyani yokuba iprotocol yenza wonke umsebenzi malunga nemigca elikhulu yekhowudi ibonisa ukuba icingelwe kakuhle kangakanani.

Lo mfanekiso ulandelayo ubonisa okwenziwa sisicelo xa umxhasi (isikhangeli) ecela /guestbookURL.

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo
Sisebenza njani isicelo sencwadi yeendwendwe

Xa iphepha lencwadi yeendwendwe lifuna ukukhutshwa, kukho umnxeba omnye kwisistim yefayile yokufunda itemplate kwimemori kunye neefowuni ezintathu zenethiwekhi kwiRedis. Ifayile yetemplate iqulethe uninzi lomxholo weHTML wephepha kumfanekiso wekhusi ongentla. Kukwakho nezibambi-ndawo ezikhethekileyo zenxalenye eguqukayo yomxholo: izithuba kunye nekhawuntara yabatyeleli. Sizifumana kwiRedis, sizifake kwiphepha kwaye sinikeze umxhasi umxholo owenziwe ngokupheleleyo. Umnxeba wesithathu kwiRedis unokuphetshwa kuba iRedis ibuyisela ixabiso elitsha elingundoqo xa linyuswa. Nangona kunjalo, kwiseva yethu, ene-architecture esekelwe kwi-asynchronous, uninzi lweefowuni zenethiwekhi luvavanyo olulungileyo lweenjongo zokufunda. Ngoko silahla ixabiso lokubuyisela iRedis yenani leendwendwe kwaye sibuze ngefowuni eyahlukileyo.

Ulwakhiwo lweseva ZeroHTTPd

Sakha iinguqulelo ezisixhenxe zeZeroHTTPd ngokusebenza okufanayo kodwa izakhiwo ezahlukeneyo:

  • Ukuphindaphinda
  • Umncedisi wefolokhwe (inkqubo yomntwana omnye ngesicelo ngasinye)
  • Umncedisi wefolokhwe yangaphambili (ukwenziwa kwangaphambili kweenkqubo)
  • Iseva enemisonto yophumezo (umsonto omnye ngesicelo ngasinye)
  • Iseva enendalo yangaphambili yomsonto
  • Architecture esekelwe poll()
  • Architecture esekelwe epoll

Silinganisa ukusebenza kwesakhiwo ngasinye ngokulayisha iseva ngezicelo ze-HTTP. Kodwa xa kuthelekiswa ulwakhiwo oluhambelana kakhulu, inani lemibuzo liyanda. Sivavanya kathathu kwaye sibala umyinge.

Indlela yokuvavanya

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo
ZeroHTTPd ukusetwa kovavanyo lomthwalo

Kubalulekile ukuba xa uqhuba iimvavanyo, onke amacandelo angasebenzi kumatshini omnye. Kule meko, i-OS ifaka ishedyuli eyongezelelweyo njengoko izinto zikhuphisana nge-CPU. Ukulinganisa i-operating system overhead ye-architecture nganye ye-server ekhethiweyo yenye yezona njongo zibalulekileyo kulo msebenzi. Ukongeza izinto ezahlukeneyo kuya kuba yingozi kwinkqubo. Ngoko ke, ukusetwa kulo mfanekiso ungasentla kusebenza kakuhle.

Yenza ntoni nganye kwezi seva?

  • load.unixism.net: Kulapho sibalekela khona ab, usetyenziso lweApache Benchmark. Ivelisa umthwalo ofunekayo ukuvavanya ulwakhiwo lwethu lweseva.
  • nginx.unixism.net: Ngamanye amaxesha sifuna ukuqhuba ngaphezulu komzekelo omnye wenkqubo yeseva. Ukwenza oku, iseva ye-Nginx enezicwangciso ezifanelekileyo isebenza njenge-balancer yomthwalo evela ab kwiinkqubo zethu zeseva.
  • zerohttpd.unixism.net: Apha siqhuba iinkqubo zethu zeseva kwizakhiwo ezisixhenxe ezahlukeneyo, enye ngexesha.
  • redis.unixism.net: Lo mncedisi uqhuba iRedis daemon, apho amangeno eendwendwe kunye nezinto zokubala zabatyeleli zigcinwa khona.

Zonke iiseva zisebenza kumbindi womqhubekekisi ofanayo. Umbono kukuvavanya ukusebenza okuphezulu koyilo ngalunye. Ekubeni zonke iinkqubo zeseva zivavanywa kwi-hardware efanayo, oku kusisiseko sokuthelekisa. Ukuseta uvavanyo lwam luqulathe iiseva ezinenyani eziqeshiweyo kwiDijithali Ocean.

Silinganisa ntoni?

Unokulinganisa izikhombisi ezahlukeneyo. Sivavanya ukusebenza kwesakhiwo ngasinye kwisimo esinikiweyo ngokulayisha iiseva kunye nezicelo kumanqanaba ahlukeneyo okuhambelana: umthwalo ukhula ukusuka kwi-20 ukuya kwi-15 abasebenzisi abahambelanayo.

Iziphumo zovavanyo

Itshathi elandelayo ibonisa ukusebenza kweeseva kulwakhiwo olwahlukileyo kumanqanaba ahlukeneyo okuhambelana. I-axis ka-y linani lezicelo ngesekhondi, i-x-axis luqhagamshelwano olunxuseneyo.

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo

Ukusebenza kwesicelo senethiwekhi yeLinux. Intshayelelo

Ngezantsi yitafile eneziphumo.

izicelo ngomzuzwana

ukuhambelana
Ukuphindaphinda
ifolokhwe
ifolokhwe yangaphambili
ukusasaza
ukusasaza kwangaphambili
poll
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
ukusasazeka okukhulu
2138

5000
-
ukusasazeka okukhulu
1600
1100
2519
-
2235

8000
-
-
1200
ukusasazeka okukhulu
2451
-
2100

10
-
-
ukusasazeka okukhulu
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Ukusuka kwigrafu kunye netheyibhile kunokubonwa ukuba ngaphezu kwe-8000 yezicelo ngaxeshanye sinabadlali ababini kuphela abaseleyo: ifolokhwe yangaphambili kunye ne-epoll. Njengoko umthwalo usanda, iseva esekwe kwi-poll yenza okubi kunokusasaza. I-architecture ye-thread-pre-creation yi-epoll efanelekileyo okhuphisana nayo, ubungqina bokuba i-Linux kernel icwangcisa kakuhle inani elikhulu leentambo.

Ikhowudi yoMthombo weZeroHTTPd

Ikhowudi yoMthombo weZeroHTTPd apha. Kukho uluhlu olwahlukileyo lolwakhiwo ngalunye.

I-ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── eyona.c ├── 03_preforking │─ │ main │─ ukuthunga │ ├── main.c ├── 04_prethreading │ ├── main.c ├── 05_poll │ ├── main.c ├── 06_epoll │ └── main.c ─ Yenza ifayile ephambili.c ├ Yenza esidlangalaleni.c ├── index .html │ └── tux png └── itemplates └── guestbook └── index.html

Ukongeza kwizalathisi ezisixhenxe kuzo zonke izakhiwo, kukho ezinye ezimbini kulawulo olukwinqanaba eliphezulu: uluntu kunye neetemplates. Eyokuqala iqulethe ifayile ye index.html kunye nomfanekiso osuka kumfanekiso wekhusi lokuqala. Unokubeka ezinye iifayile kunye neefolda apho, kwaye iZeroHTTPd kufuneka isebenze ezo fayile ezimileyo ngaphandle kweengxaki. Ukuba umendo kwisikhangeli sihambelana nendlela kwifolda yoluntu, emva koko iZeroHTTPd ijonga ifayile ye index.html kolu lawulo. Umxholo wencwadi yeendwendwe uveliswa ngamandla. Inephepha lasekhaya kuphela, kwaye umxholo walo usekwe kwifayile 'templates/guestbook/index.html'. I-ZeroHTTPd yongeza ngokulula amaphepha aguqukayo okwandisa. Umbono kukuba abasebenzisi banokongeza iitemplates kolu luhlu kwaye bandise iZeroHTTPd njengoko kufuneka.

Ukwakha zonke iiseva ezisixhenxe, sebenzisa make all ukusuka kulawulo lomgangatho ophezulu - kwaye zonke izakhiwo ziya kuvela kolu lawulo. Iifayile eziphunyeziweyo zijonge uluntu kunye neetemplates abalawuli kulawulo apho ziqaliswe khona.

Linux API

Awudingi ukuba nolwazi kakuhle kwi-Linux API ukuze uqonde ulwazi kolu ngcelele lwenqaku. Nangona kunjalo, ndincoma ukufunda ngakumbi ngesi sihloko; kukho izixhobo ezininzi zokubhekisa kwi-Intanethi. Nangona siya kuchukumisa kwiindidi ezininzi ze-Linux APIs, ugxininiso lwethu luya kuba ikakhulu kwiinkqubo, imisonto, iminyhadala, kunye nesitaki sothungelwano. Ukongeza kwiincwadi kunye namanqaku malunga ne-Linux API, ndikwancoma ukufunda i-mana yeefowuni zenkqubo kunye nemisebenzi yelayibrari esetyenzisiweyo.

Ukusebenza kunye noScalability

Inqaku elinye malunga nokusebenza kunye nokulinganisa. Ngokwethiyori, akukho nxibelelwano phakathi kwabo. Unokuba nenkonzo yewebhu esebenza kakuhle kakhulu, kunye nexesha lokuphendula lee-milliseconds ezimbalwa, kodwa ayilingani konke konke. Ngokunjalo, kunokubakho usetyenziso lwewebhu olungaqhubi kakuhle oluthatha imizuzwana embalwa ukuphendula, kodwa lulinganisa ngamashumi ukuphatha amashumi amawaka abasebenzisi abasebenzisanayo. Nangona kunjalo, indibaniselwano yokusebenza okuphezulu kunye ne-scalability yindibaniselwano enamandla kakhulu. Izicelo ezisebenza kakhulu ngokuqhelekileyo zisebenzisa izibonelelo ngokunciphisa kwaye ngaloo ndlela zikhonza ngokufanelekileyo abasebenzisi abaninzi ngexesha elinye kumncedisi, ukunciphisa iindleko.

Imisebenzi ye-CPU kunye ne-I / O

Ekugqibeleni, kwi-computing kusoloko kukho iindidi ezimbini ezinokwenzeka zemisebenzi: ye-I/O kunye ne-CPU. Ukufumana izicelo kwi-Intanethi (inethiwekhi ye-I/O), iifayile ezisetyenziswayo (inethiwekhi kunye nediski ye-I/O), ukunxibelelana nedathabheyisi (inethiwekhi kunye nediski I/O) yiyo yonke imisebenzi ye-I/O. Eminye imibuzo yedatabase inokuba yi-CPU enzulu (ukuhlelwa, ukulinganisa iziphumo ezisisigidi, njl.). Uninzi lwezicelo zewebhu zikhawulelwe ngobuninzi obunokwenzeka be-I/O, kwaye iprosesa ayifane isetyenziswe kumthamo opheleleyo. Xa ubona ukuba umsebenzi othile we-I/O usebenzisa i-CPU eninzi, isenokuba luphawu lolwakhiwo olubi lwesicelo. Oku kunokuthetha ukuba izixhobo ze-CPU zichithwa ekulawuleni inkqubo kunye nokutshintsha umxholo - kwaye oku akuloncedo ngokupheleleyo. Ukuba wenza into efana nokulungiswa komfanekiso, ukuguqulwa kwefayile yeaudio, okanye ukufunda ngomatshini, ke isicelo sifuna izixhobo ezinamandla ze-CPU. Kodwa kwizicelo ezininzi oku akunjalo.

Funda ngakumbi malunga noyilo lweseva

  1. Icandelo I: Iterative Architecture
  2. Icandelo II. Abancedisi befolokhwe
  3. Icandelo III. Iiseva zangaphambi kwefolokhwe
  4. Icandelo IV. Iiseva ezinemisonto yophumezo
  5. Icandelo V. Iiseva ezifakwe ngaphambili
  6. Icandelo VI. I-Pol-based architecture
  7. Icandelo VII. i-epoll-based architecture

umthombo: www.habr.com

Yongeza izimvo