Webhu maapplication ave kushandiswa kwese kwese, uye pakati pezvifambiso zvese, HTTP inotora chikamu cheshumba. Paunenge uchidzidza iwo nuances yewebhu application kuvandudza, vanhu vazhinji vanobhadhara kushoma kutarisisa kune inoshanda sisitimu uko izvi zvikumbiro zvinomhanya chaizvo. Kupatsanurwa kwebudiriro (Dev) uye mashandiro (Ops) kwakangoita kuti mamiriro acho anyanye kuipa. Asi nekusimuka kwetsika yeDevOps, vanogadzira vari kuita basa rekufambisa maapplication avo mugore, saka zvakakosha kuti vanyatso kujairana nekumashure kweiyo sisitimu yekushandisa. Izvi zvinonyanya kubatsira kana uri kuyedza kuendesa sisitimu yezviuru kana makumi ezviuru zvekubatanidza panguva imwe chete.
Izvo zvinorambidzwa mumasevhisi ewebhu zvakada kufanana nezviri mune mamwe maapplication. Kunyangwe iri mitoro inoremedza kana maseva edatabase, ese aya maapplication ane matambudziko akafanana munzvimbo yepamusoro-inoshanda. Kunzwisisa izvi zvakakosha zvipimo uye kuti ungazvikunda sei zvakajairika zvinokubatsira kuongorora mashandiro uye scalability yewebhu maapplication ako.
Ndiri kunyora iyi nhevedzano yezvinyorwa ndichipindura mibvunzo kubva kune vechidiki vanogadzira vanoda kuve vane ruzivo rwekugadzira masisitimu. Hazvigoneke kuti unzwisise zvakajeka Linux application optimization matekiniki pasina kunyura mune izvo zvekutanga zvemabatiro avanoita padanho rekushandisa. Kunyangwe paine akawanda marudzi emashandisirwo, mune ino nhevedzano ini ndoda kuongorora mawebhu-based application pane desktop desktop senge browser kana text editor. Ichi chinyorwa chakagadzirirwa vanogadzira uye vanovaka vanoda kunzwisisa kuti Linux kana Unix zvirongwa zvinoshanda sei uye maitiro ekuzvigadzira kuti zvishande zvakanyanya.
Linux ndiyo server room inoshanda sisitimu, uye kazhinji maapplication ako anomhanya pane iyi OS. Kunyangwe ini ndichiti "Linux", kazhinji yenguva iwe unogona kufunga zvakachengeteka kuti ndinoreva ese Unix-senge masisitimu anoshanda zvakazara. Nekudaro, ini handina kuyedza kodhi inoperekedza pane mamwe masisitimu. Saka, kana iwe uchifarira FreeBSD kana OpenBSD, mibairo yako inogona kusiyana. Pandinoedza chimwe chinhu Linux-chaiyo, ndinoinongedzera.
Nepo iwe uchigona kushandisa ruzivo urwu kuvaka app kubva kutanga uye ichave yakagadziridzwa zvakakwana, zvakanakisa kusaita izvozvo. Kana iwe ukanyora sevha nyowani yewebhu muC kana C++ yebhizinesi rekushanda kwesangano rako, rino rinogona kunge riri zuva rako rekupedzisira pabasa. Nekudaro, kuziva chimiro chezvishandiso izvi kuchabatsira pakusarudza zvirongwa zviripo. Iwe unozokwanisa kuenzanisa maitiro-akavakirwa masisitimu ane tambo-yakavakirwa masisitimu pamwe chete nezviitiko-zvakavakirwa. Iwe unozonzwisisa uye nekutenda kuti sei Nginx ichiita zvirinani kupfuura Apache httpd, nei Tornado yakavakirwa Python application inogona kushandira vashandisi vakawanda kana ichienzaniswa neiyo Django yakavakirwa Python application.
ZeroHTTPd: Chishandiso Chekudzidza
Kunyangwe isu taigona kukurukura dzidziso pakureba, hapana chinhu chiri nani pane kunyora kodhi, kuimhanyisa, uye kuenzanisa ese maseva ekuvaka neimwe neimwe. Iyi ndiyo nzira iri pachena. Naizvozvo, isu tichanyora yakapusa ZeroHTTPd webhu server tichishandisa yega yega modhi: process-based, thread-based, uye chiitiko-based. Ngatitarisei imwe neimwe yeaya maseva uye tione kuti anoita sei achienzaniswa neimwe. ZeroHTTPd inoshandiswa mune imwechete C faira. Iyo chiitiko-based server inosanganisira
Pane zvakawanda zvekutaura mukodhi kuti zvikubatsire kunzwisisa. Kuve iri nyore sevha yewebhu mumitsetse mishoma yekodhi, ZeroHTTPd zvakare idiki dhizaini rekuvandudza webhu. Iyo ine mashandiro mashoma, asi inokwanisa kushandira static mafaera uye ari nyore "simba" mapeji. Ndinofanira kutaura kuti ZeroHTTPd yakanaka pakudzidza kugadzira yakakwira-inoshanda Linux application. Kazhinji, masevhisi mazhinji ewebhu anomirira zvikumbiro, zvitarise uye wozvigadzirisa. Izvi ndizvo chaizvo zvichaitwa neZeroHTTPd. Ichi chishandiso chekudzidza, kwete kugadzira. Izvo hazvina kunaka pakubata kukanganisa uye hazvigone kuzvirumbidza zvakanakisa kuchengetedza maitiro (oh hongu, ndakashandisa strcpy
) kana mazano akachenjera emutauro weC. Asi ndinovimba inoita basa rayo nemazvo.
ZeroHTTPd peji remba. Inogona kuburitsa mhando dzakasiyana dzefaira kusanganisira mifananidzo
Guest Book Application
Mazuva ano mawebhu ekushandisa kazhinji haangogumiri kune static mafaera. Vane kudyidzana kwakaomarara neakasiyana dhatabhesi, cache, nezvimwe. Saka isu tichagadzira iri nyore webhu application inonzi "Guest Book" apo vashanyi vanosiya zvinyorwa pasi pemazita avo. Mabhuku evaenzi anochengeta zvinyorwa zvakasiiwa kare. Kune zvakare kaunda yevashanyi pazasi pepeji.
Webhu application "Guest Book" ZeroHTTPd
Iyo yevaenzi counter uye yevaenzi mabhuku ekupinda anochengetwa muRedis. Zvekutaurirana neRedis, maitiro ega anoitwa; hazvinei neraibhurari yekunze. Ini handisi munhu mukuru wekuburitsa kodhi yekumba kana paine mhinduro dziripo pachena uye dzakaedzwa zvakanaka. Asi chinangwa cheZeroHTTPd ndechekudzidza mashandiro eLinux uye kuwana masevhisi ekunze, uku kushumira zvikumbiro zveHTTP kune chekuita kwakakomba. Isu tinofanirwa kudzora zvizere kutaurirana neRedis mune yega yega server yedu architecture. Mune mamwe madhizaini tinoshandisa kuvharidzira mafoni, mune mamwe tinoshandisa zviitiko-based maitiro. Kushandisa rekunze Redis mutengi raibhurari hakuzopi kutonga uku. Pamusoro pezvo, mutengi wedu mudiki weRedis anongoita mashoma mabasa (kuwana, kuseta, uye kuwedzera kiyi; kuwana nekuwedzera kune array). Mukuwedzera, iyo Redis protocol yakanyanya kunaka uye yakapusa. Hautombofanire kunyatso kudzidzisa. Iyo chaiyo iyo protocol inoita basa rese muinenge zana mitsetse yekodhi inoratidza kuti yakanyatsofungwa sei.
Mufananidzo unotevera unoratidza zvinoitwa neapp kana mutengi (browser) akumbira /guestbookURL
.
Mashandiro anoita bhuku revaenzi
Kana peji rebhuku revaenzi richida kupihwa, pane imwe runhare kune faira system kuti uverenge template mundangariro uye matatu network mafoni kuRedis. Iyo template faira ine zvakawanda zveHTML zvemukati zvepeji mune skrini iri pamusoro. Kune zvakare akakosha mabatiro eiyo inoshanduka chikamu chemukati: mapositi uye yevashanyi counter. Isu tinovagamuchira kubva kuRedis, voisa mukati peji uye nekupa mutengi zvinhu zvakaumbwa zvizere. Kufona kwechitatu kuRedis kunogona kudzivirirwa nekuti Redis inodzosa hutsva hunokosha kana yawedzerwa. Nekudaro, kune yedu sevha, iyo ine asynchronous chiitiko-yakavakirwa architecture, akawanda etiweki mafoni muyedzo wakanaka wezvinangwa zvekudzidza. Saka isu tinorasa iyo Redis yekudzoka kukosha kwenhamba yevashanyi uye toibvunza nekufona kwakasiyana.
Server architectures ZeroHTTPd
Tiri kuvaka mavhezheni manomwe eZeroHTTPd ane mashandiro akafanana asi akasiyana ezvivakwa:
- Iterative
- Fork server (mwana mumwechete maitiro pachikumbiro)
- Pre-fork server (pre-forking of process)
- Server ine tambo dzekuuraya (tambo imwe pachikumbiro)
- Server ine pre-shinda kugadzira
- Architecture based
poll()
- Architecture based
epoll
Isu tinoyera mashandiro echivakwa chega chega nekurodha sevha nezvikumbiro zveHTTP. Asi kana tichienzanisa zvakanyanya kufanana zvivakwa, huwandu hwemibvunzo hunowedzera. Tinoedza katatu uye tinoverenga mavhareji.
Testing methodology
ZeroHTTPd load test setup
Izvo zvakakosha kuti kana uchimhanyisa bvunzo, zvese zvikamu hazvimhanye pamushini mumwe chete. Muchiitiko ichi, iyo OS inounza kumwe kurongeka kwepamusoro sezvo zvikamu zvinokwikwidza CPU. Kuyera sisitimu yekushandisa pamusoro peimwe neimwe yakasarudzwa sevha yekuvakisa ndechimwe chezvakakosha zvinangwa zvechiitwa ichi. Kuwedzera mamwe mabhii kunozokanganisa maitiro. Naizvozvo, marongero ari mumufananidzo uri pamusoro anoshanda zvakanyanya.
Imwe neimwe yemaseva aya inoitei?
- load.unixism.net: Apa ndipo patinomhanyira
ab
, Apache Benchmark utility. Iyo inoburitsa mutoro unodiwa kuyedza yedu server zvivakwa. - nginx.unixism.net: Dzimwe nguva tinoda kumhanya kanopfuura kamwechete kwesevha chirongwa. Kuti uite izvi, sevha yeNginx ine zvigadziriso zvakakodzera inoshanda seyeredhi inoremedza inobva ab kune yedu server maitiro.
- zerohttpd.unixism.net: Pano isu tinomhanyisa server yedu zvirongwa pane manomwe akasiyana ezvivakwa, imwe panguva.
- redis.unixism.net: Sevha iyi inoshandisa Redis daemon, uko kunochengetwa mabhuku evaenzi uye makaunta evaenzi.
Masevha ese anomhanya pane imwechete processor core. Pfungwa ndeyekuongorora hukuru hwekuita kweimwe neimwe yekuvaka. Sezvo ese mapurogiramu evhavha akaedzwa pane imwechete hardware, iyi ndiyo yekutanga yekuenzanisa. Kuseta kwangu kwekuyedza kunosanganisira maseva chaiwo akarendwa kubva kuDigital Ocean.
Tiri kuyera chii?
Iwe unogona kuyera zviratidzo zvakasiyana. Isu tinoongorora mashandiro echivakwa chega chega mune yakapihwa gadziriso nekurodha maseva nezvikumbiro pamazinga akasiyana ekuenzanisa: mutoro unokura kubva ku20 kusvika ku15 vashandisi venguva imwe chete.
Mhedzisiro yeYedzo
Chati inotevera inoratidza mashandiro emaseva pazvivakwa zvakasiyana pamatanho akasiyana ekuenzanisa. Iyo y-axis inhamba yezvikumbiro pasekondi imwe neimwe, iyo x-axis inobatana kubatanidza.
Pazasi pane tafura ine zvabuda.
zvikumbiro pasekondi
Kufananidza
iterative
fork
pre-fork
kuyerera
pre-streaming
chisarudzo
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
kupararira kukuru
2138
5000
-
kupararira kukuru
1600
1100
2519
-
2235
8000
-
-
1200
kupararira kukuru
2451
-
2100
10
-
-
kupararira kukuru
-
2200
-
2200
11
-
-
-
-
2200
-
2122
12
-
-
-
-
970
-
1958
13
-
-
-
-
730
-
1897
14
-
-
-
-
590
-
1466
15
-
-
-
-
532
-
1281
Kubva pagirafu netafura zvinogona kuonekwa kuti pamusoro pe8000 zvikumbiro panguva imwe chete tine vatambi vaviri chete vasara: pre-fork uye epoll. Sezvo mutoro unowedzera, poll-based server inoita zvakanyanya kudarika yekutenderera. Iyo tambo-pre-kusika architecture mukwikwidzi akakodzera kune epoll, chirevo chekuti Linux kernel inoronga sei nhamba huru dzetambo.
ZeroHTTPd Source Code
ZeroHTTPd Source Code
ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking │── main ─ ─ threading │ ├── main.c ├── 04_prethreading │ ├── main.c ├── 05_poll │ ├── main.c ├── 06_epoll │ └── main.c ─ Make public.c ─ make public.c ├── index .html │ └── tux png └── templates └── bhuku revaenzi └── index.html
Pamusoro pezvinyorwa zvinomwe zvezvivakwa zvese, kune mamwe maviri mune yepamusoro-level dhairekitori: yeruzhinji uye matemplate. Yekutanga ine index.html faira uye mufananidzo kubva kune yekutanga skrini. Iwe unogona kuisa mamwe mafaera nemaforodha ipapo, uye ZeroHTTPd inofanirwa kushandira iyo static mafaera pasina matambudziko. Kana iyo nzira iri mubrowser ichienderana nenzira iri muforodha yeruzhinji, ipapo ZeroHTTPd inotarisa index.html faira mune iri dhairekitori. Zvemukati zvebhuku revaenzi zvinogadzirwa zvine simba. Inongova nepeji yekumba, uye zvirimo zvinobva pafaira 'templates/guestbook/index.html'. ZeroHTTPd inowedzera nyore mapeji ane simba ekuwedzera. Pfungwa ndeyokuti vashandisi vanogona kuwedzera matemplate kune iyi dhairekitori uye kuwedzera ZeroHTTPd sezvinodiwa.
Kuvaka ese manomwe maseva, mhanya make all
kubva padanho repamusoro-dhairekitori - uye zvese zvinovaka zvichaonekwa mune ino dhairekitori. Mafaira anoteedzera anotarisa veruzhinji uye matemplate madhairekitori mudhairekitori kubva kwaanotangwa.
Linux API
Iwe haufanirwe kuve neruzivo muLinux API kuti unzwisise ruzivo mune ino chinyorwa chinyorwa. Nekudaro, ini ndinokurudzira kuverenga zvakawanda pamusoro pechinyorwa ichi; kune akawanda mareferenzi zviwanikwa paInternet. Kunyangwe isu tichabata pane akati wandei eLinux APIs, isu tarisiro yedu ichave yakanyanya pane maitiro, shinda, zviitiko, uye network stack. Pamusoro pemabhuku uye zvinyorwa nezve Linux API, ini zvakare ndinokurudzira kuverenga mana kune system mafoni uye raibhurari mabasa anoshandiswa.
Performance uye Scalability
Imwe chinyorwa pamusoro pekuita uye scalability. Nechepfungwa, hapana kubatana pakati pavo. Iwe unogona kuve newebhu sevhisi inoshanda zvakanaka kwazvo, ine nguva yekupindura yemamilliseconds mashoma, asi haina kuyera zvachose. Saizvozvo, panogona kunge paine kusaita zvakanaka kwewebhu application iyo inotora masekonzi mashoma kupindura, asi inoyera nemakumi kubata makumi ezviuru zvevashandisi panguva imwe chete. Nekudaro, musanganiswa wekuita kwepamusoro uye scalability musanganiswa une simba. Zvishandiso zvepamusoro-soro zvinowanzo shandisa zviwanikwa zvishoma uye nekudaro zvinoshandira vashandisi vanowirirana pane sevha, zvichideredza mitengo.
CPU uye I/O mabasa
Chekupedzisira, mukombuta panogara paine marudzi maviri anobvira emabasa: eI/O neCPU. Kugamuchira zvikumbiro paInternet (network I / O), kushumira mafaira (network uye disk I / O), kutaurirana nedhatabhesi (network uye disk I / O) zvose zviitiko zveI / O. Mimwe mibvunzo yedatabase inogona kunge iri CPU yakadzika (kurongedza, kuenzana miriyoni mhinduro, nezvimwewo). Mazhinji ewebhu maapplication anoganhurirwa neinogoneka I/O, uye processor haiwanzo kushandiswa yakazara yakazara. Paunoona kuti rimwe basa reI/O riri kushandisa yakawanda yeCPU, ingangove chiratidzo chehurombo hwekuvaka kwekushandisa. Izvi zvinogona kureva kuti zviwanikwa zveCPU zvakaraswa pane manejimendi manejimendi uye shanduko yemamiriro ezvinhu - uye izvi hazvina zvazvinobatsira. Kana iwe uri kuita chimwe chinhu sekugadzirisa mufananidzo, kushandura faira redhiyo, kana kudzidza muchina, saka chishandiso chinoda zvine simba CPU zviwanikwa. Asi kune akawanda maapplication izvi handizvo.
Dzidza zvakawanda nezve server architectures
Chikamu I: Iterative Architecture Chikamu II. Fork servers Chikamu III. Pre-fork maseva Chikamu IV. Maseva ane tambo dzekuuraya Chikamu V. Pre-threaded maseva Chikamu VI. Pol-based architecture Chikamu VII. epoll-based architecture
Source: www.habr.com