Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso

Izinhlelo zewebhu manje sezisetshenziswa yonke indawo, futhi phakathi kwazo zonke izimiso zezokuthutha, i-HTTP ithatha isabelo sengonyama. Lapho ufunda ama-nuances wokuthuthukiswa kwezinhlelo zokusebenza zewebhu, abantu abaningi abanaki kakhulu uhlelo lokusebenza lapho lezi zinhlelo zokusebenza zisebenza khona ngempela. Ukuhlukaniswa kwentuthuko (i-Dev) nokusebenza (i-Ops) kwenze isimo saba sibi kakhulu. Kepha ngokukhuphuka kwesiko le-DevOps, abathuthukisi baba nesibopho sokusebenzisa izinhlelo zabo emafini, ngakho-ke kubasiza kakhulu ukujwayelana kahle ne-backend yesistimu yokusebenza. Lokhu kuwusizo ikakhulukazi uma uzama ukuphakela isistimu yezinkulungwane noma amashumi ezinkulungwane zokuxhumeka ngasikhathi sinye.

Imikhawulo ezinsizeni zewebhu ifana kakhulu naleyo ekwezinye izinhlelo zokusebenza. Noma ngabe izilinganisi zokulayisha noma amaseva esizindalwazi, zonke lezi zinhlelo zokusebenza zinezinkinga ezifanayo endaweni yokusebenza okuphezulu. Ukuqonda le mikhawulo eyisisekelo nokuthi ungayinqoba kanjani ngokujwayelekile kuzokusiza ukuthi uhlole ukusebenza nokuqina kwezinhlelo zakho zokusebenza zewebhu.

Ngibhala lolu chungechunge lwama-athikili ngiphendula imibuzo evela konjiniyela abasha abafuna ukuba abadwebi bezinhlelo abanolwazi oluhle. Akunakwenzeka ukuqonda ngokucacile amasu okusebenzisa i-Linux ngaphandle kokungena ezisekelweni zendlela asebenza ngayo ezingeni lesistimu yokusebenza. Nakuba kunezinhlobo eziningi zezinhlelo zokusebenza, kulolu chungechunge ngifuna ukuhlola izinhlelo zokusebenza ezisekelwe kuwebhu kunezinhlelo zokusebenza zedeskithophu ezifana nesiphequluli noma umhleli wombhalo. Lokhu okubalulekile kuhloselwe onjiniyela nabadwebi bezakhiwo abafuna ukuqonda ukuthi izinhlelo ze-Linux noma ze-Unix zisebenza kanjani nokuthi zingahlelwa kanjani ukuze zisebenze kahle.

I-Linux i igumbi leseva uhlelo lokusebenza, futhi ngokuvamile izinhlelo zakho zokusebenza zisebenza kule OS. Noma ngithi "Linux", isikhathi esiningi ungacabanga ngokuphephile ukuthi ngiqonde wonke amasistimu wokusebenza afana ne-Unix ngokujwayelekile. Nokho, angikayihloli ikhodi ehambisana nalokhu kwamanye amasistimu. Ngakho-ke, uma uthanda i-FreeBSD noma i-OpenBSD, imiphumela yakho ingase ihluke. Uma ngizama okuthile okuqondene ne-Linux, ngiyakukhomba.

Yize ungasebenzisa lolu lwazi ukwakha uhlelo lokusebenza kusukela ekuqaleni futhi luzothuthukiswa ngokuphelele, kuhle kakhulu ukuthi ungakwenzi lokho. Uma ubhala iseva yewebhu entsha ku-C noma i-C++ yesicelo sebhizinisi lenhlangano yakho, lolu kungase kube usuku lwakho lokugcina emsebenzini. Kodwa-ke, ukwazi ukwakheka kwalezi zinhlelo zokusebenza kuzosiza ekukhetheni izinhlelo ezikhona. Uzokwazi ukuqhathanisa amasistimu asuselwa kunqubo namasistimu asuselwa kuchungechunge kanye nalawo asuselwa kumcimbi. Uzoqonda futhi ujabulele ukuthi kungani i-Nginx isebenza kangcono kune-Apache httpd, kungani uhlelo lokusebenza lwePython olusekelwe kuTornado lunganikeza abasebenzisi abaningi uma luqhathaniswa nohlelo lwePython olusekelwe ku-Django.

I-ZeroHTTPd: Ithuluzi Lokufunda

I-ZeroHTTPd iyiseva yewebhu engayibhala kusukela ekuqaleni ku-C njengethuluzi lokufundisa. Ayinakho ukuncika kwangaphandle, okuhlanganisa ukufinyelela ku-Redis. Siqhuba ezethu izinqubo zeRedis. Bona ngezansi ukuze uthole imininingwane eyengeziwe.

Nakuba singaxoxa ngethiyori isikhathi eside, akukho lutho olungcono kunokubhala ikhodi, ukuyiqhuba, nokuqhathanisa zonke izakhiwo zeseva enye nenye. Lena indlela esobala kakhulu. Ngakho-ke, sizobhala iseva yewebhu ye-ZeroHTTPd elula sisebenzisa imodeli ngayinye: inqubo-based, intambo-based, kanye nemicimbi. Ake sihlole ngayinye yalezi ziphakeli futhi sibone ukuthi zisebenza kanjani uma ziqhathaniswa nezinye. I-ZeroHTTPd isetshenziswa kufayela elilodwa le-C. Iseva esekelwe kumcimbi ihlanganisa uthash, ukuqaliswa okuhle kwetafula le-hashi eliza ngefayela elilodwa likanhlokweni. Kwezinye izimo, akukho ukuncika, ukuze kungabi nzima iphrojekthi.

Kunamazwana amaningi kukhodi ukuze akusize uqonde. Ukuba iseva yewebhu elula emigqeni embalwa yekhodi, i-ZeroHTTPd futhi iwuhlaka oluncane lokuthuthukiswa kwewebhu. Inokusebenza okulinganiselwe, kodwa iyakwazi ukunikeza amafayela amile namakhasi alula "ashukumisayo". Kufanele ngisho ukuthi i-ZeroHTTPd inhle ekufundeni ukuthi ungakha kanjani izinhlelo zokusebenza ze-Linux ezisebenza kahle. Ngokuvamile, izinsiza eziningi zewebhu zilinda izicelo, zihlole futhi zizicubungule. Yilokhu kanye iZeroHTTPd ezokwenza. Leli ithuluzi lokufunda, hhayi ukukhiqiza. Ayilungile ekuphatheni amaphutha futhi cishe ayinakuziqhenya ngezinqubo zokuphepha ezihamba phambili (oh yebo, ngisebenzise strcpy) noma amaqhinga ahlakaniphile olimi C. Kodwa ngithemba ukuthi liwenza kahle umsebenzi walo.

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso
Ikhasi lasekhaya le-ZeroHTTPd. Ingakwazi ukukhipha izinhlobo ezahlukene zamafayela kuhlanganise nezithombe

Isicelo sencwadi yesivakashi

Izinhlelo zokusebenza zewebhu zesimanje ngokuvamile azigcini kumafayela amile. Zinokusebenzelana okuyinkimbinkimbi nesizindalwazi esihlukahlukene, izinqolobane, njll. Ngakho-ke sizodala uhlelo lokusebenza lwewebhu olulula olubizwa ngokuthi "Incwadi Yezivakashi" lapho izivakashi zishiya okufakiwe ngaphansi kwamagama azo. Incwadi yesivakashi igcina okufakiwe okushiywe ngaphambili. Kukhona nekhawunta yezivakashi ngezansi kwekhasi.

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso
Uhlelo lokusebenza lwewebhu "Incwadi Yezivakashi" ZeroHTTPd

Ikhawunta yezivakashi kanye nencwadi yesivakashi igcinwa ku-Redis. Ukuxhumana neRedis, izinqubo eziqondene nawe ziyasetshenziswa; azincikile kumtapo wolwazi wangaphandle. Angiyena umlandeli omkhulu wokukhipha ikhodi ye-homebrew uma kunezixazululo ezitholakala esidlangalaleni nezihlolwe kahle. Kodwa inhloso ye-ZeroHTTPd ukufunda ukusebenza kwe-Linux nokufinyelela ezinsizeni zangaphandle, kuyilapho ukukhonza izicelo ze-HTTP kunomthelela omkhulu wokusebenza. Kufanele silawule ngokugcwele ukuxhumana ne-Redis kusakhiwo ngasinye seseva yethu. Kwezinye izakhiwo sisebenzisa izingcingo ezivimbayo, kwezinye sisebenzisa izinqubo ezisuselwe kumcimbi. Ukusebenzisa ilabhulali yeklayenti le-Redis yangaphandle ngeke kunikeze lokhu kulawula. Ukwengeza, iklayenti lethu elincane le-Redis lenza kuphela imisebenzi embalwa (ukuthola, ukusetha, nokwengeza ukhiye; ukuthola nokuhlanganisa ohlwini). Ngaphezu kwalokho, i-protocol ye-Redis inhle kakhulu futhi ilula. Awudingi nokuthi uyifundise ngokukhethekile. Lona kanye iqiniso lokuthi iphrothokholi yenza wonke umsebenzi emigqeni yekhodi eyikhulu ikhombisa ukuthi icatshangwe kahle kangakanani.

Isibalo esilandelayo sibonisa lokho okwenziwa uhlelo lokusebenza uma iklayenti (isiphequluli) icela /guestbookURL.

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso
Indlela isicelo sencwadi yesivakashi esisebenza ngayo

Uma ikhasi lencwadi yesivakashi lidinga ukukhishwa, kuba nocingo olulodwa oluya ohlelweni lwefayela lokufunda isifanekiso kumemori namakholi enethiwekhi amathathu aya ku-Redis. Ifayela lesifanekiso liqukethe okuningi kokuqukethwe kwe-HTML kwekhasi kusithombe-skrini esingenhla. Kukhona futhi izimeli ezikhethekile zengxenye eguqukayo yokuqukethwe: okuthunyelwe nekhawunta yezivakashi. Siwathola kwa-Redis, siwafake ekhasini futhi sinikeze iklayenti okuqukethwe okwakhiwe ngokugcwele. Ucingo lwesithathu oluya ku-Redis lungagwenywa ngoba i-Redis ibuyisela inani lokhiye omusha lapho inyuswa. Kodwa-ke, kuseva yethu, enesakhiwo esisekelwe kumcimbi ongavumelanisiwe, izingcingo eziningi zenethiwekhi ziwukuhlola okuhle ngezinjongo zokufunda. Ngakho-ke silahla inani lokubuya le-Redis lenombolo yezivakashi futhi sibuze ngekholi ehlukile.

Izakhiwo zeseva ZeroHTTPd

Sakha izinguqulo eziyisikhombisa ze-ZeroHTTPd ngokusebenza okufanayo kodwa izakhiwo ezihlukene:

  • Okuphindaphindayo
  • Iseva yemfoloko (inqubo yengane eyodwa ngesicelo ngasinye)
  • Iseva yangaphambi kwemfoloko (ukufokhwa kwangaphambili kwezinqubo)
  • Iseva enezintambo zokusebenzisa (uchungechunge olulodwa ngesicelo ngasinye)
  • Iseva enokudalwa komucu wangaphambili
  • I-Architecture esekelwe poll()
  • I-Architecture esekelwe epoll

Sikala ukusebenza kwesakhiwo ngasinye ngokulayisha iseva ngezicelo ze-HTTP. Kodwa uma uqhathanisa izakhiwo ezihambisana kakhulu, inani lemibuzo liyakhula. Sihlola izikhathi ezintathu bese sibala isilinganiso.

Indlela yokuhlola

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso
Ukusethwa kokuhlolwa kokulayisha kwe-ZeroHTTPd

Kubalulekile ukuthi lapho wenza izivivinyo, zonke izingxenye azisebenzi emshinini ofanayo. Kulokhu, i-OS ingenisa okungaphezulu kokuhlela okungeziwe njengoba izingxenye ziqhudelana nge-CPU. Ukulinganisa ngaphezulu kwesistimu yokusebenza yezakhiwo zeseva ezikhethiwe kungenye yezinjongo ezibaluleke kakhulu zalo msebenzi. Ukwengeza okuhlukile kuzolimaza inqubo. Ngakho-ke, isimo esisesithombeni esingenhla sisebenza kahle kakhulu.

Yenzani ngayinye yalezi ziphakeli?

  • load.unixism.net: Yilapho sigijima khona ab, i-Apache Benchmark utility. Ikhiqiza umthwalo odingekayo ukuhlola izakhiwo zethu zeseva.
  • nginx.unixism.net: Kwesinye isikhathi sifuna ukusebenzisa izibonelo ezingaphezu kwesisodwa sohlelo lweseva. Ukwenza lokhu, iseva ye-Nginx enezilungiselelo ezifanele isebenza njengesilinganisi somthwalo esivela kuso ab ezinqubweni zethu zeseva.
  • zerohttpd.unixism.net: Lapha sisebenzisa izinhlelo zethu zeseva kuma-architecture ayisikhombisa ahlukene, eyodwa ngesikhathi.
  • redis.unixism.net: Lesi siphakeli sisebenzisa i-Redis daemon, lapho kugcinwa khona okufakwayo ezincwadini zezihambeli nezibali zezivakashi.

Wonke amaseva asebenza ku-processor core efanayo. Umqondo uwukuhlola ukusebenza okuphezulu kwesakhiwo ngasinye. Njengoba zonke izinhlelo zeseva zivivinywa kuhadiwe efanayo, lokhu kuyisisekelo sokuqhathanisa. Ukusetha kwami ​​ukuhlola kuqukethe amaseva abonakalayo aqashwe ku-Digital Ocean.

Sikalani?

Ungakwazi ukukala izinkomba ezahlukene. Sihlola ukusebenza kwesakhiwo ngasinye ekucushweni okunikeziwe ngokulayisha amaseva anezicelo kumaleveli ahlukene wokufana: umthwalo ukhula usuka kubasebenzisi abangu-20 ukuya ku-15 ngesikhathi esisodwa.

Imiphumela yokuhlola

Ishadi elilandelayo libonisa ukusebenza kwamaseva ezakhiweni ezihlukene emazingeni ahlukene okufana. I-eksisi ka-y inombolo yezicelo ngomzuzwana, i-eksisi ka-x iwukuxhumana okuhambisanayo.

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso

Ukusebenza kohlelo lokusebenza lwenethiwekhi ye-Linux. Isingeniso

Ngezansi kunethebula elinemiphumela.

izicelo ngomzuzwana

ukufana
okuphindaphindayo
imfoloko
imfoloko yangaphambili
ukusakaza
ukusakaza ngaphambili
i-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
ukusabalala okukhulu
2138

5000
-
ukusabalala okukhulu
1600
1100
2519
-
2235

8000
-
-
1200
ukusabalala okukhulu
2451
-
2100

10
-
-
ukusabalala okukhulu
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Kusuka kugrafu nethebula kungabonakala ukuthi ngaphezu kwezicelo ezingu-8000 kanyekanye sinabadlali ababili kuphela abasele: i-pre-fork ne-epoll. Njengoba umthwalo ukhula, iseva esekwe kupholi yenza okubi kakhulu kunokusakaza-bukhoma. I-thread-pre-creation architecture iyimbangi efanelekayo ye-epoll, ubufakazi bokuthi i-Linux kernel ihlela kahle izinombolo ezinkulu zezintambo.

Ikhodi Yomthombo we-ZeroHTTPd

Ikhodi Yomthombo we-ZeroHTTPd lapha. Kukhona uhla lwemibhalo oluhlukile lwesakhiwo ngasinye.

I-ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking │ main │─ │ main │ ing │ ├── main.c ├── 04_prethreading │ ├── main.c ├── 05_poll │ ├── main.c ├── 06_epoll │ └── main.c ─ Yenza umphakathi.c ├ Yenza umphakathi. ── index.html │ └── tux . png └── izifanekiso └── Guestbook └── index.html

Ngaphezu kwezinkomba eziyisikhombisa zazo zonke izakhiwo, kunezinye ezimbili ohlwini lwemibhalo lwezinga eliphezulu: ezomphakathi nezifanekiso. Esokuqala siqukethe ifayela le-index.html kanye nesithombe esivela kusithombe-skrini sokuqala. Ungabeka amanye amafayela namafolda lapho, futhi i-ZeroHTTPd kufanele inikeze lawo mafayela amile ngaphandle kwezinkinga. Uma indlela ekusiphequluli ifana nendlela ekufolda yomphakathi, i-ZeroHTTPd ibheka ifayela elithi index.html kulolu hlu lwemibhalo. Okuqukethwe kwebhuku lezivakashi kukhiqizwa ngamandla. Inekhasi lasekhaya kuphela, futhi okuqukethwe kwayo kusekelwe efayeleni elithi 'templates/guestbook/index.html'. I-ZeroHTTPd ingeza kalula amakhasi ashukumisayo ukuze anwetshwe. Umbono wukuthi abasebenzisi bangangeza izifanekiso kulolu hlu lwemibhalo futhi banwebe i-ZeroHTTPd njengoba kudingeka.

Ukwakha wonke amaseva ayisikhombisa, sebenzisa make all kusuka kumkhombandlela wezinga eliphezulu - futhi zonke izakhiwo zizovela kulolu hlu lwemibhalo. Amafayela asebenzisekayo abheka izinkomba zomphakathi nezifanekiso kuhla lwemibhalo aqaliswe kulo.

I-Linux API

Awudingi ukuba wazi kahle i-Linux API ukuze uqonde ulwazi kulolu chungechunge lwendatshana. Kodwa-ke, ngincoma ukufunda okwengeziwe ngalesi sihloko; kunezinsiza eziningi zokubhekisela ku-inthanethi. Yize sizothinta izigaba ezimbalwa zama-Linux API, ukugxila kwethu kuzoba ikakhulukazi ezinqubweni, emilukweni, emicimbini, kanye nesitaki senethiwekhi. Ngokungeziwe ezincwadini nezindatshana ezimayelana ne-Linux API, ngiphinde ngincome i-manana yokufunda kumakholi wesistimu nemisebenzi yelabhulali esetshenzisiwe.

Ukusebenza kanye Scalability

Inothi elilodwa elimayelana nokusebenza nokulinganisa. Ngokwethiyori, akukho ukuxhumana phakathi kwabo. Ungaba nesevisi yewebhu esebenza kahle kakhulu, enesikhathi sokuphendula sama-millisecond ambalwa, kodwa ayilingani nhlobo. Ngokufanayo, kungase kube khona uhlelo lokusebenza lwewebhu olusebenza kabi oluthatha imizuzwana embalwa ukuphendula, kodwa lukala ngamashumi ukuze luphathe amashumi ezinkulungwane zabasebenzisi ngesikhathi esisodwa. Kodwa-ke, inhlanganisela yokusebenza okuphezulu nokuqina kuyinhlanganisela enamandla kakhulu. Izinhlelo zokusebenza ezisebenza kahle kakhulu ngokuvamile zisebenzisa izinsiza kancane futhi ngaleyo ndlela zisiza abasebenzisi ngesikhathi esisodwa kuseva, zehlise izindleko.

Imisebenzi ye-CPU ne-I/O

Okokugcina, kukhompyutha kuhlala kunezinhlobo ezimbili zemisebenzi engenzeka: ye-I/O ne-CPU. Ukwamukela izicelo nge-inthanethi (inethiwekhi ye-I/O), ukuthumela amafayela (inethiwekhi nediski I/O), ukuxhumana nesizindalwazi (inethiwekhi nediski I/O) yonke imisebenzi ye-I/O. Eminye imibuzo yesizindalwazi ingaba i-CPU ejulile (ukuhlunga, isilinganiso semiphumela eyisigidi, njll.). Izinhlelo zokusebenza eziningi zewebhu zinqunyelwe ubuningi obungenzeka be-I/O, futhi iphrosesa ayivamisile ukusetshenziswa ngomthamo ogcwele. Uma ubona ukuthi omunye umsebenzi we-I/O usebenzisa i-CPU eningi, cishe kuwuphawu lwezakhiwo ezingezinhle zohlelo lokusebenza. Lokhu kungasho ukuthi izinsiza ze-CPU ziyamoshwa ekuphathweni kwenqubo nasekushintsheni umongo - futhi lokhu akulona usizo ngokuphelele. Uma wenza okuthile njengokucutshungulwa kwesithombe, ukuguqulwa kwefayela lomsindo, noma ukufunda ngomshini, uhlelo lokusebenza ludinga izinsiza ezinamandla ze-CPU. Kodwa ezicelweni eziningi akunjalo.

Funda kabanzi mayelana nezakhiwo zeseva

  1. Ingxenye I: I-Iterative Architecture
  2. Ingxenye II. Amaseva wemfoloko
  3. Ingxenye III. Amaseva angaphambi kwemfoloko
  4. Ingxenye IV. Amaseva anezintambo zokusebenza
  5. Ingxenye V. Amaseva acushwe ngaphambilini
  6. Ingxenye VI. Izakhiwo ezisekelwe ku-Pol
  7. Ingxenye VII. i-epoll-based architecture

Source: www.habr.com

Engeza amazwana