Linux network application performance. Mawu Oyamba

Mapulogalamu apaintaneti tsopano akugwiritsidwa ntchito kulikonse, ndipo pakati pa ma protocol onse amayendedwe, HTTP imatenga gawo la mkango. Mukamaphunzira zamitundu yosiyanasiyana ya chitukuko cha pulogalamu yapaintaneti, anthu ambiri salabadira kwenikweni makina ogwiritsira ntchito pomwe mapulogalamuwa amayendera. Kulekanitsidwa kwa chitukuko (Dev) ndi ntchito (Ops) kunangopangitsa kuti zinthu zikhale zovuta kwambiri. Koma ndi kukwera kwa chikhalidwe cha DevOps, opanga akukhala ndi udindo woyendetsa mapulogalamu awo pamtambo, kotero ndizothandiza kwambiri kuti adziwe bwino kumbuyo kwa makina opangira opaleshoni. Izi ndizothandiza makamaka ngati mukuyesera kutumiza makina olumikizirana masauzande kapena masauzande ambiri panthawi imodzi.

Zoletsa zapaintaneti ndizofanana kwambiri ndi zomwe zili muzinthu zina. Kaya ndi zolemetsa zolemetsa kapena ma seva a database, mapulogalamu onsewa ali ndi mavuto ofanana m'malo ochita bwino kwambiri. Kumvetsetsa zofooka zazikuluzikuluzi komanso momwe mungathanirane nazo kukuthandizani kuwunika momwe mawebusayiti amagwirira ntchito komanso kuchuluka kwake.

Ndikulemba mndandanda wa nkhanizi poyankha mafunso ochokera kwa achinyamata opanga mapulani omwe akufuna kukhala akatswiri odziwa zomangamanga. Ndikosatheka kumvetsetsa bwino njira zokwaniritsira ntchito za Linux popanda kudumphira pazoyambira momwe zimagwirira ntchito pamakina ogwiritsira ntchito. Ngakhale pali mitundu yambiri ya mapulogalamu, mndandandawu ndikufuna kufufuza mapulogalamu a pa intaneti m'malo mogwiritsa ntchito makompyuta monga msakatuli kapena zolemba zolemba. Nkhaniyi idapangidwira omanga ndi omanga omwe akufuna kumvetsetsa momwe mapulogalamu a Linux kapena Unix amagwirira ntchito komanso momwe angawapangire kuti azigwira bwino ntchito.

Linux ndi chipinda cha seva opareshoni, ndipo nthawi zambiri mapulogalamu anu amayendera pa OS iyi. Ngakhale ndimati "Linux", nthawi zambiri mutha kuganiza kuti ndikutanthauza machitidwe onse a Unix ngati onse. Komabe, sindinayese kachidindo kameneka pamakina ena. Chifukwa chake, ngati mukufuna FreeBSD kapena OpenBSD, zotsatira zanu zitha kusiyana. Ndikayesa china chake cha Linux, ndimachiwonetsa.

Ngakhale mutha kugwiritsa ntchito chidziwitsochi kuti mupange pulogalamu kuyambira pachiyambi ndipo idzakonzedwa bwino, ndibwino kuti musatero. Ngati mulemba seva yatsopano yapaintaneti mu C kapena C++ pa ntchito ya bizinesi ya bungwe lanu, ili lingakhale tsiku lanu lomaliza kugwira ntchito. Komabe, kudziwa mawonekedwe a mapulogalamuwa kudzakuthandizani kusankha mapulogalamu omwe alipo. Mudzatha kufanizira machitidwe opangidwa ndi ndondomeko ndi machitidwe opangira ulusi komanso zochitika. Mudzamvetsetsa ndikuyamikira chifukwa chake Nginx imachita bwino kuposa Apache httpd, chifukwa chiyani pulogalamu ya Tornado yochokera ku Python imatha kuthandiza ogwiritsa ntchito ambiri poyerekeza ndi pulogalamu ya Python ya Django.

ZeroHTTPd: Chida Chophunzirira

ZeroHTTPd ndi seva yapaintaneti yomwe ndidalemba kuyambira poyambira ku C ngati chida chophunzitsira. Ilibe zodalira zakunja, kuphatikiza kupeza Redis. Timayendetsa njira zathu za Redis. Onani pansipa kuti mumve zambiri.

Ngakhale titha kukambirana zamalingaliro motalika, palibe chabwino kuposa kulemba kachidindo, kuiyendetsa, ndikufananiza mamangidwe onse a seva wina ndi mnzake. Iyi ndiyo njira yowonekera kwambiri. Chifukwa chake, tidzalemba tsamba losavuta la ZeroHTTPd pogwiritsa ntchito mtundu uliwonse: kutengera njira, ulusi, komanso zochitika. Tiyeni tiwone ma seva awa ndikuwona momwe amagwirira ntchito poyerekeza ndi mnzake. ZeroHTTPd imayikidwa mufayilo imodzi C. Seva yotengera zochitika imaphatikizapo utha, kukhazikitsa kwakukulu kwa tebulo la hashi komwe kumabwera mufayilo imodzi yamutu. Nthawi zina, palibe zodalira, kuti musasokoneze ntchitoyi.

Pali ndemanga zambiri mu code kuti zikuthandizeni kumvetsetsa. Pokhala seva yosavuta yapaintaneti m'mizere ingapo ya ma code, ZeroHTTPd ndinso dongosolo lochepa la chitukuko cha intaneti. Ili ndi magwiridwe antchito ochepa, koma imatha kutumiza mafayilo osasunthika komanso masamba osavuta "amphamvu". Ndiyenera kunena kuti ZeroHTTPd ndi yabwino kuphunzira kupanga mapulogalamu apamwamba a Linux. Mwambiri, mawebusayiti ambiri amadikirira zopempha, kuzifufuza ndikuzikonza. Izi ndi zomwe ZeroHTTPd idzachita. Ichi ndi chida chophunzirira, osati kupanga. Sizili bwino pakuwongolera zolakwika ndipo sizingatheke kudzitamandira bwino zachitetezo (o, eya, ndidagwiritsa ntchito strcpy) kapena machenjerero a chinenero cha C. Koma ndikuyembekeza kuti imagwira ntchito yake bwino.

Linux network application performance. Mawu Oyamba
Tsamba lofikira la ZeroHTTPd. Iwo akhoza linanena bungwe osiyana wapamwamba mitundu kuphatikizapo zithunzi

Guest Book Application

Mapulogalamu amakono a intaneti nthawi zambiri samangokhala ndi mafayilo osasunthika. Amakhala ndi machitidwe ovuta ndi ma database osiyanasiyana, ma cache, ndi zina zambiri. Chifukwa chake tidzapanga tsamba losavuta lotchedwa "Guest Book" pomwe alendo amasiya zolemba pansi pa mayina awo. Mabuku a alendo amasunga zolemba zomwe zidasiyidwa kale. Palinso kauntala ya alendo pansi pa tsamba.

Linux network application performance. Mawu Oyamba
Webusaiti "Guest Book" ZeroHTTPd

Makauntala a alendo ndi zolemba zamabuku a alendo zimasungidwa ku Redis. Pakulumikizana ndi Redis, njira zanu zimakhazikitsidwa; sizidalira laibulale yakunja. Sindine wokonda kutulutsa kachidindo kanyumba kanyumba pomwe pali mayankho omwe amapezeka pagulu komanso oyesedwa bwino. Koma cholinga cha ZeroHTTPd ndikuphunzira momwe Linux imagwirira ntchito komanso kupeza ntchito zakunja, pomwe kutumikira zopempha za HTTP kuli ndi vuto lalikulu. Tiyenera kuwongolera kulumikizana ndi Redis muzomanga zathu zonse za seva. Muzomangamanga zina timagwiritsa ntchito mafoni oletsa, ena amagwiritsa ntchito zochitika. Kugwiritsa ntchito laibulale yamakasitomala akunja a Redis sikungapereke chiwongolero ichi. Kuphatikiza apo, kasitomala wathu wamng'ono wa Redis amangogwira ntchito zingapo (kupeza, kukhazikitsa, ndi kukulitsa kiyi; kupeza ndi kuwonjezera pagulu). Kuphatikiza apo, protocol ya Redis ndiyokongola kwambiri komanso yosavuta. Simufunikanso kuphunzitsa mwapadera. Mfundo yomwe protocol imagwira ntchito yonse pafupifupi mizere zana ya code ikuwonetsa momwe imaganiziridwa bwino.

Chithunzi chotsatirachi chikuwonetsa zomwe pulogalamuyo imachita kasitomala (msakatuli) akapempha /guestbookURL.

Linux network application performance. Mawu Oyamba
Momwe buku la alendo limagwirira ntchito

Tsamba labukhu la alendo likayenera kuperekedwa, pali kuyimba kumodzi ku fayilo yamafayilo kuti muwerenge template mu kukumbukira ndi mafoni atatu a netiweki ku Redis. Fayilo ya template ili ndi zambiri za HTML patsamba lomwe lili pamwambapa. Palinso zosungirako zapadera za gawo losinthika la zomwe zili: ma post ndi kauntala ya alendo. Timawalandira kuchokera ku Redis, kuwayika patsamba ndikupatsa kasitomala zomwe zimapangidwa bwino. Kuyimba kwachitatu kwa Redis kutha kupewedwa chifukwa Redis imabweretsanso chinsinsi chatsopano ikawonjezeredwa. Komabe, kwa seva yathu, yomwe ili ndi zomangamanga zosagwirizana ndi zochitika, mafoni ambiri ochezera pa intaneti ndi mayeso abwino pazolinga zophunzirira. Chifukwa chake timataya mtengo wobwerera wa Redis wa kuchuluka kwa alendo ndikufunsa ndi foni yosiyana.

Zomangamanga za seva ZeroHTTPd

Tikupanga mitundu isanu ndi iwiri ya ZeroHTTPd yokhala ndi magwiridwe antchito omwewo koma mamangidwe osiyanasiyana:

  • Zobwerezabwereza
  • Seva ya Fork (njira ya mwana m'modzi pa pempho)
  • Pre-fork seva (pre-forking of process)
  • Seva yokhala ndi ulusi woyeserera (ulusi umodzi pa pempho)
  • Seva yokhala ndi ulusi wopangidwa kale
  • Zomangamanga zochokera poll()
  • Zomangamanga zochokera epoll

Timayesa magwiridwe antchito a kamangidwe kalikonse pokweza seva ndi zopempha za HTTP. Koma poyerekezera zomanga zofanana kwambiri, kuchuluka kwa mafunso kumawonjezeka. Timayesa katatu ndikuwerengera pafupifupi.

Njira yoyesera

Linux network application performance. Mawu Oyamba
Kukhazikitsa kwa kuyesa kwa ZeroHTTPd

Ndikofunikira kuti poyesa mayeso, zigawo zonse sizikuyenda pamakina amodzi. Pachifukwa ichi, OS imabweretsanso zina zowonjezera monga zigawo zimapikisana ndi CPU. Kuyeza kachitidwe kogwiritsa ntchito pamwamba pa chilichonse mwazomangamanga za seva ndi chimodzi mwazolinga zofunika kwambiri pa ntchitoyi. Kuonjezera zosintha zambiri kudzakhala kowononga ndondomekoyi. Choncho, zomwe zili pachithunzi pamwambapa zimagwira ntchito bwino.

Kodi seva iliyonse imachita chiyani?

  • load.unixism.net: Apa ndi pamene timathamangira ab, Apache Benchmark utility. Zimapanga katundu wofunikira kuyesa mamangidwe athu a seva.
  • nginx.unixism.net: Nthawi zina timafuna kuyendetsa maulendo angapo a pulogalamu ya seva. Kuti muchite izi, seva ya Nginx yokhala ndi zoikamo zoyenera imagwira ntchito ngati cholemetsa chochokera ab ku machitidwe athu a seva.
  • zerohttpd.unixism.net: Apa tikuyendetsa mapulogalamu athu a seva pazomanga zisanu ndi ziwiri, imodzi imodzi.
  • redis.unixism.net: Seva iyi imayendetsa daemon ya Redis, pomwe zolembera za alendo ndi zowerengera za alendo zimasungidwa.

Ma seva onse amayenda pa purosesa yomweyo. Lingaliro ndikuwunika momwe ntchito yomanga imagwirira ntchito. Popeza mapulogalamu onse a seva amayesedwa pa hardware yomweyo, ichi ndi chiyambi chofanizira. Kukhazikitsa kwanga koyeserera kumakhala ndi maseva enieni obwerekedwa ku Digital Ocean.

Kodi tikuyesa chiyani?

Mukhoza kuyeza zizindikiro zosiyanasiyana. Timayesa magwiridwe antchito a zomangamanga zilizonse pakukonza uku pokweza ma seva ndi zopempha pamagawo osiyanasiyana ofananira: katunduyo amakula kuchokera ku 20 mpaka 15 ogwiritsa ntchito nthawi imodzi.

Zotsatira zakuyesa

Tchati chotsatirachi chikuwonetsa momwe ma seva amagwirira ntchito pamapangidwe osiyanasiyana pamagawo osiyanasiyana ofananira. Y-axis ndi kuchuluka kwa zopempha pamphindikati, x-axis ndi kulumikizana kofanana.

Linux network application performance. Mawu Oyamba

Linux network application performance. Mawu Oyamba

Linux network application performance. Mawu Oyamba

Pansipa pali tebulo lokhala ndi zotsatira.

zopempha pamphindikati

concur ndalama
obwerezabwereza
foloko
chisanadze mphanda
akukhamukira
kukhamukiratu
zofufuzira
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
kufalikira kwakukulu
2138

5000
-
kufalikira kwakukulu
1600
1100
2519
-
2235

8000
-
-
1200
kufalikira kwakukulu
2451
-
2100

10
-
-
kufalikira kwakukulu
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Kuchokera pa graph ndi tebulo zitha kuwoneka kuti pamwamba pa 8000 zopempha nthawi imodzi tili ndi osewera awiri okha omwe atsala: pre-fork ndi epoll. Pamene katundu akuchulukirachulukira, seva yokhazikitsidwa ndi voti imachita zoyipa kuposa kukhamukira. Kapangidwe ka ulusi-pre-creation ndi mpikisano woyenera ku epoll, umboni wa momwe Linux kernel imakonzekera bwino ulusi wambiri.

ZeroHTTPd Source Code

ZeroHTTPd Source Code apa. Pali chikwatu chosiyana cha kamangidwe kalikonse.

ZeroHTTPd
│
├── 01_obwerezabwereza
│ ├── main.c
├──02_forking
│ ├── main.c
├── 03_preforking
│ ├── main.c
├── 04_kuwerenga
│ ├── main.c
├── 05_prethreading
│ ├── main.c
├── 06_poll
│ ├── main.c
├── 07_epoll
│ └── main.c
├── Makefile
├── anthu
│ ├── index.html
│ └── tux.png
└── zithunzi
    └── buku la alendo
        └── index.html

Kuphatikiza pa maupangiri asanu ndi awiri azomangamanga onse, palinso ena awiri pamndandanda wapamwamba kwambiri: anthu onse ndi ma templates. Yoyamba ili ndi fayilo ya index.html ndi chithunzi kuchokera pachithunzi choyamba. Mutha kuyika mafayilo ndi zikwatu pamenepo, ndipo ZeroHTTPd iyenera kutumiza mafayilo osasunthika popanda vuto lililonse. Ngati njira yomwe ili mumsakatuli ikugwirizana ndi chikwatu cha anthu onse, ZeroHTTPd imayang'ana fayilo ya index.html mu bukhuli. Zomwe zili m'buku la alendo zimapangidwa mwamphamvu. Ili ndi tsamba loyambira lokha, ndipo zomwe zili mkati mwake zimatengera fayilo ya 'templates/guestbook/index.html'. ZeroHTTPd imawonjezera mosavuta masamba osinthika owonjezera. Lingaliro ndilakuti ogwiritsa ntchito amatha kuwonjezera ma tempuleti ku bukhuli ndikukulitsa ZeroHTTPd pakufunika.

Kuti mupange ma seva asanu ndi awiri onse, thamangani make all kuchokera pamndandanda wapamwamba - ndipo zonse zomanga zidzawonekera mu bukhuli. Mafayilo omwe amatha kukwaniritsidwa amayang'ana zolemba zapagulu ndi ma templates mu bukhu lomwe amayambirako.

Linux API

Simufunikanso kudziwa bwino Linux API kuti mumvetsetse zomwe zili patsamba lino. Komabe, ndikupangira kuti muwerenge zambiri pamutuwu; pali zambiri zothandizira pa intaneti. Ngakhale tikhudza magulu angapo a Linux APIs, cholinga chathu chizikhala panjira, ulusi, zochitika, ndi ma network. Kuphatikiza pa mabuku ndi zolemba za Linux API, ndimalimbikitsanso kuwerenga mana pama foni am'dongosolo ndi ntchito zama library zomwe zimagwiritsidwa ntchito.

Kuchita ndi Scalability

Cholemba chimodzi chokhudza magwiridwe antchito ndi scalability. Mwachidziwitso, palibe kugwirizana pakati pawo. Mutha kukhala ndi ntchito yapaintaneti yomwe imagwira ntchito bwino kwambiri, yokhala ndi nthawi yoyankha ya ma milliseconds ochepa, koma siyikula konse. Momwemonso, pakhoza kukhala pulogalamu yapaintaneti yomwe siyikuyenda bwino yomwe imatenga masekondi angapo kuti iyankhe, koma imakula ndi makumi kuti igwire masauzande a ogwiritsa ntchito nthawi imodzi. Komabe, kuphatikiza kwa magwiridwe antchito apamwamba ndi scalability ndi kuphatikiza kwamphamvu kwambiri. Ntchito zogwira ntchito kwambiri nthawi zambiri zimagwiritsa ntchito zinthu moyenera ndipo motero zimathandiza ogwiritsa ntchito nthawi imodzi pa seva, kuchepetsa ndalama.

Ntchito za CPU ndi I/O

Pomaliza, pamakompyuta pamakhala mitundu iwiri ya ntchito: ya I/O ndi CPU. Kulandira zopempha pa intaneti (network I/O), kutumiza mafayilo (network ndi disk I/O), komanso kulumikizana ndi database (network ndi disk I/O) zonse ndizochitika za I/O. Mafunso ena a database amatha kukhala ozama kwambiri a CPU (kusanja, kuchulukitsa zotsatira miliyoni, ndi zina). Mapulogalamu ambiri apaintaneti amakhala ochepa ndi kuchuluka komwe kungatheke kwa I/O, ndipo purosesa sagwiritsidwa ntchito kawirikawiri. Mukawona kuti ntchito ina ya I/O ikugwiritsa ntchito ma CPU ambiri, ndiye kuti ichi ndi chizindikiro cha zomangamanga zosavomerezeka. Izi zitha kutanthauza kuti zida za CPU zimawonongeka pakuwongolera njira ndikusintha kwazinthu - ndipo izi sizothandiza kwenikweni. Ngati mukuchita zina monga kukonza zithunzi, kutembenuza mafayilo amawu, kapena kuphunzira pamakina, ndiye kuti kugwiritsa ntchito kumafunikira zida zamphamvu za CPU. Koma kwa ntchito zambiri izi sizili choncho.

Dziwani zambiri za zomangamanga za seva

  1. Gawo I: Iterative Architecture
  2. Gawo II. Ma seva a foloko
  3. Gawo III. Ma seva a pre-fork
  4. Gawo IV. Ma seva okhala ndi ulusi wakupha
  5. Gawo V. Ma seva opangidwa kale
  6. Gawo VI. Zomangamanga za Pol
  7. Gawo VII. epoll-based architecture

Source: www.habr.com

Kuwonjezera ndemanga