Linux network application performance. Nhanganyaya

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

ZeroHTTPd iwebhu server yandakanyora kubva pakutanga muC sechishandiso chekudzidzisa. Iyo haina zvekunze zvinotsamira, kusanganisira kuwana Redis. Isu tinomhanyisa edu maRedis maitiro. Ona pasi apa kuti uwane mamwe mashoko.

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 uthash, yakakura hash tafura yekumisikidza inouya mune imwechete musoro faira. Mune zvimwe zviitiko, hapana kutsamira, kuitira kuti usaomese chirongwa.

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.

Linux network application performance. Nhanganyaya
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.

Linux network application performance. Nhanganyaya
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.

Linux network application performance. Nhanganyaya
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

Linux network application performance. Nhanganyaya
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.

Linux network application performance. Nhanganyaya

Linux network application performance. Nhanganyaya

Linux network application performance. Nhanganyaya

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 pano. Pane dhairekitori rakasiyana kune imwe neimwe dhizaini.

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

  1. Chikamu I: Iterative Architecture
  2. Chikamu II. Fork servers
  3. Chikamu III. Pre-fork maseva
  4. Chikamu IV. Maseva ane tambo dzekuuraya
  5. Chikamu V. Pre-threaded maseva
  6. Chikamu VI. Pol-based architecture
  7. Chikamu VII. epoll-based architecture

Source: www.habr.com

Voeg