Ts'ebetso ea marang-rang ea Linux. Selelekela

Lisebelisoa tsa marang-rang li se li sebelisoa hohle, 'me har'a liprothokholo tsohle tsa lipalangoang, HTTP e nka karolo ea tau. Ha u ithuta lintlha tse mabapi le nts'etsopele ea ts'ebeliso ea webo, batho ba bangata ha ba ele hloko haholo sistimi e sebetsang moo lits'ebetso tsena li sebetsang teng. Karohano ea nts'etsopele (Dev) le ts'ebetso (Ops) e mpefatsa boemo le ho feta. Empa ka ho phahama ha setso sa DevOps, bahlahisi ba ntse ba ikarabella bakeng sa ho tsamaisa lits'ebetso tsa bona marung, kahoo ho bohlokoa haholo ho bona ho tloaelana hantle le backend ea sistimi e sebetsang. Sena se bohlokoa haholo haeba o leka ho kenya sistimi bakeng sa likhokahano tse likete kapa mashome a likete ka nako e le 'ngoe.

Meeli ea lits'ebeletso tsa marang-rang e ts'oana haholo le ea lits'ebetso tse ling. Hore na ke li-balancers tsa mojaro kapa li-server tsa database, lits'ebetso tsena kaofela li na le mathata a ts'oanang tikolohong e sebetsang hantle. Ho utloisisa mefokolo ena ea mantlha le mokhoa oa ho e hlola ka kakaretso ho tla u thusa ho lekola ts'ebetso le sekhahla sa lits'ebetso tsa hau tsa marang-rang.

Ke ngola letoto lena la lingoliloeng ho araba lipotso tse tsoang ho baetsi ba bacha ba batlang ho ba baetsi ba meralo ba nang le tsebo. Ha ho khonehe ho utloisisa ka ho hlaka mekhoa ea ho ntlafatsa ts'ebeliso ea Linux ntle le ho kenella ka har'a metheo ea hore na e sebetsa joang maemong a sistimi e sebetsang. Leha ho na le mefuta e mengata ea lits'ebetso, letotong lena ke batla ho hlahloba lits'ebetso tse thehiloeng marang-rang ho fapana le lits'ebetso tsa komporo joalo ka sebatli kapa mohlophisi oa mongolo. Boitsebiso bona bo reretsoe bahlahisi le litsebi tsa meralo ba batlang ho utloisisa hore na Linux kapa Unix mananeo a sebetsa joang le hore na a ka a hlophisa joang bakeng sa ts'ebetso e phahameng.

Linux ke kamore ea seva sistimi e sebetsang, 'me hangata lits'ebetso tsa hau li sebetsa ho OS ena. Leha ke re "Linux", boholo ba nako u ka nka ka mokhoa o sireletsehileng hore ke bolela lits'ebetso tsohle tse ts'ebetso tse kang Unix ka kakaretso. Leha ho le joalo, ha ke so leke khoutu e tsamaeang le litsamaiso tse ling. Kahoo, haeba u thahasella FreeBSD kapa OpenBSD, liphetho tsa hau li ka fapana. Ha ke leka ntho e itseng ka Linux, kea e supa.

Leha o ka sebelisa tsebo ena ho theha sesebelisoa ho tloha qalong mme e tla ntlafatsoa hantle, ho molemo ho se etse joalo. Haeba u ngola seva se secha sa marang-rang ho C kapa C++ bakeng sa ts'ebeliso ea khoebo ea mokhatlo oa hau, lena e kanna ea ba letsatsi la hao la ho qetela mosebetsing. Leha ho le joalo, ho tseba sebopeho sa lits'ebetso tsena ho tla thusa ho khetha mananeo a teng. U tla khona ho bapisa litsamaiso tse thehiloeng ho ts'ebetso le litsamaiso tse thehiloeng ho khoele hammoho le tse thehiloeng ho liketsahalo. U tla utloisisa le ho ananela hore na ke hobane'ng ha Nginx e sebetsa betere ho feta Apache httpd, hobaneng ts'ebeliso ea Tornado e thehiloeng Python e ka sebeletsa basebelisi ba bangata ha e bapisoa le ts'ebeliso ea Python ea Django.

ZeroHTTPd: Sesebelisoa sa ho Ithuta

ZeroHTTPd ke sebatli sa webo seo ke se ngotseng ho tloha qalong ho C joalo ka sesebelisoa sa ho ruta. Ha e na litšepe tsa kantle, ho kenyelletsa le phihlello ea Redis. Re tsamaisa mekhoa ea rona ea Redis. Sheba ka tlase bakeng sa lintlha tse ling.

Le hoja re ka buisana ka khopolo ka nako e telele, ha ho letho le molemo ho feta ho ngola khoutu, ho e tsamaisa, le ho bapisa meralo eohle ea li-server le tse ling. Ena ke mokhoa o hlakileng ka ho fetisisa. Ka hona, re tla ngola sebatli se bonolo sa ZeroHTTPd re sebelisa mofuta o mong le o mong: o thehiloeng ts'ebetsong, o thehiloeng ho khoele, le o thehiloeng ketsahalong. Ha re hlahlobeng e 'ngoe le e' ngoe ea li-server tsena 'me re bone hore na li sebetsa joang ha li bapisoa le tse ling. ZeroHTTPd e kentsoe faeleng e le 'ngoe ea C. Seva e thehiloeng ketsahalong e kenyelletsa uthash, ts'ebetsong e ntle ea tafole ea hash e tlang ka faele e le 'ngoe ea hlooho. Maemong a mang, ha ho na ba itšetlehileng ka bona, e le hore ba se ke ba thatafatsa morero.

Ho na le maikutlo a mangata ka har'a khoutu ho u thusa ho utloisisa. Ho ba seva sa marang-rang se bonolo meleng e 'maloa ea khoutu, ZeroHTTPd hape ke moralo o fokolang oa nts'etsopele ea webo. E na le ts'ebetso e fokolang, empa e khona ho sebeletsa lifaele tse tsitsitseng le maqephe a bonolo haholo a "matla". Ke tlameha ho bolela hore ZeroHTTPd e ntle bakeng sa ho ithuta ho theha lits'ebetso tsa Linux tse sebetsang hantle. Ka kakaretso, litšebeletso tse ngata tsa marang-rang li emela likopo, li hlahlobe le ho li sebetsa. Sena ke sona hantle seo ZeroHTTPd e tla se etsa. Sena ke sesebelisoa sa ho ithuta, eseng tlhahiso. Ha e ntle ho sebetsana le liphoso 'me ha ho na monyetla oa ho ithorisa ka mekhoa e metle ea ts'ireletso (oh, ke ne ke sebelisa strcpy) kapa maqheka a bohlale a puo ea C. Empa ke tšepa hore e etsa mosebetsi oa eona hantle.

Ts'ebetso ea marang-rang ea Linux. Selelekela
Leqephe la lapeng la ZeroHTTPd. E ka ntša mefuta e fapaneng ya difaele ho akarelletsa le litšoantšo

Kopo ea Buka ea Baeti

Lisebelisoa tsa morao-rao tsa marang-rang hangata ha li felle feela ho lifaele tse tsitsitseng. Ba na le litšebelisano tse rarahaneng le li-database tse fapa-fapaneng, li-cache, joalo-joalo. Kahoo re tla etsa kopo e bonolo ea websaete e bitsoang "Guest Book" moo baeti ba tlohelang litlhaloso tlas'a mabitso a bona. Buka ea baeti e boloka likenyo tse siiloeng pejana. Ho boetse ho na le khaontara ea baeti botlaaseng ba leqephe.

Ts'ebetso ea marang-rang ea Linux. Selelekela
Sesebelisoa sa webo "Buka ea Baeti" ZeroHTTPd

Li-counter le libuka tsa baeti li bolokiloe Redis. Bakeng sa likhokahano le Redis, lits'ebetso tsa hau lia kengoa; ha li itšetlehe ka laeborari ea kantle. Ha ke motho ea ratang ho hlahisa khoutu ea lapeng ha ho na le litharollo tse fumanehang phatlalatsa le tse lekiloeng hantle. Empa sepheo sa ZeroHTTPd ke ho ithuta ts'ebetso ea Linux le phihlello ea lits'ebeletso tsa kantle, ha ho sebeletsa likopo tsa HTTP ho na le phello e matla ea ts'ebetso. Re tlameha ho laola ka botlalo lipuisano le Redis ho e 'ngoe le e' ngoe ea meralo ea rona ea li-server. Meahong e meng re sebelisa li-call tse thibelang, ho tse ling re sebelisa mekhoa e thehiloeng liketsahalong. Ho sebelisa laeborari ea bareki ba kantle ho Redis ho ke ke ha fana ka taolo ena. Ntle le moo, moreki oa rona e monyane oa Redis o etsa mesebetsi e fokolang feela (ho fumana, ho beha, le ho eketsa senotlolo; ho fumana le ho hlomella lethathamong). Ntle le moo, protocol ea Redis e ntle haholo ebile e bonolo. Ha ho hlokahale hore u e rute ka ho khetheha. Taba ea hore protocol e etsa mosebetsi oohle ka mela e ka bang lekholo ea khoutu e bonts'a hore na e nahanoa hantle hakae.

Setšoantšo se latelang se bontša seo sesebelisoa se se etsang ha moreki (sebatli) a se kopa /guestbookURL.

Ts'ebetso ea marang-rang ea Linux. Selelekela
Kamoo kopo ea buka ea baeti e sebetsang kateng

Ha leqephe la buka ea baeti le hloka ho ntšoa, ho na le mohala o le mong ho sistimi ea faele ho bala template mohopolong le mehala e meraro ea marang-rang ho Redis. Faele ea template e na le boholo ba litaba tsa HTML tsa leqephe le hlahang skrineng e kaholimo. Ho boetse ho na le litšoantšiso tse khethehileng bakeng sa karolo e matla ea litaba: poso le k'haonte ea baeti. Re li amohela ho tsoa ho Redis, re li kenya leqepheng ebe re fa moreki litaba tse entsoeng ka botlalo. Mohala oa boraro ho Redis o ka qojoa hobane Redis e khutlisa boleng bo bocha ba senotlolo ha e eketsoa. Leha ho le joalo, bakeng sa seva sa rona, se nang le meralo ea liketsahalo tse sa tloaelehang, mehala e mengata ea marang-rang ke teko e ntle bakeng sa merero ea ho ithuta. Kahoo re lahla boleng ba ho khutla ba Redis ba palo ea baeti ebe re e botsa ka mohala o arohaneng.

Mehaho ea li-server ZeroHTTPd

Re aha mefuta e supileng ea ZeroHTTPd ka ts'ebetso e ts'oanang empa meaho e fapaneng:

  • E pheta-phetoang
  • Seva ea fereko (ts'ebetso ea ngoana a le mong ka kopo)
  • Seva ea pre-fork (pele ho fereko ea lits'ebetso)
  • Seva e nang le likhoele tsa ts'ebetso (khoele e le 'ngoe ka kopo)
  • Seva e nang le tlhahiso ea pele ho khoele
  • Architecture e thehiloeng poll()
  • Architecture e thehiloeng epoll

Re lekanya tšebetso ea moaho o mong le o mong ka ho kenya seva ka likopo tsa HTTP. Empa ha ho bapisoa meaho e tšoanang haholo, palo ea lipotso e ea eketseha. Re leka ka makhetlo a mararo ebe re bala karolelano.

Mokhoa oa ho etsa liteko

Ts'ebetso ea marang-rang ea Linux. Selelekela
Setupo sa teko ea boima ba ZeroHTTPd

Ke habohlokoa hore ha ho etsoa liteko, likarolo tsohle li se ke tsa sebetsa mochine o le mong. Tabeng ena, OS e kenyelletsa kemiso e eketsehileng ea kemiso ha likarolo li qothisana lehlokoa le CPU. Ho lekanya tsamaiso ea ts'ebetso ka holim'a e 'ngoe le e' ngoe ea li-server tse khethiloeng ke e 'ngoe ea lipakane tsa bohlokoa ka ho fetisisa tsa boikoetliso bona. Ho eketsa mefuta e mengata ho tla ba kotsi ts'ebetsong. Ka hona, boemo bo setšoantšong se ka holimo bo sebetsa hantle.

E 'ngoe le e 'ngoe ea li-server tsee e etsa eng?

  • load.unixism.net: Mona ke moo re mathelang teng ab, sesebelisoa sa Apache Benchmark. E hlahisa mojaro o hlokahalang ho leka meralo ea rona ea seva.
  • nginx.unixism.net: Ka linako tse ling re batla ho tsamaisa mohlala o fetang o le mong oa lenaneo la seva. Ho etsa sena, seva sa Nginx se nang le litlhophiso tse nepahetseng se sebetsa joalo ka sekala sa mojaro se tsoang ab ho lits'ebetso tsa seva sa rona.
  • zerohttpd.unixism.net: Mona re tsamaisa mananeo a rona a seva ho meaho e supileng e fapaneng, e le 'ngoe ka nako.
  • redis.unixism.net: Seva ena e tsamaisa daemon ea Redis, moo ho bolokoang menyako ea libuka tsa baeti le likhaunta tsa baeti.

Li-server tsohle li sebetsa ho processor e tšoanang. Morero ke ho lekola ts'ebetso e phahameng ka ho fetisisa ea moaho o mong le o mong. Kaha mananeo ohle a seva a lekoa ho hardware e tšoanang, sena ke motheo oa ho bapisa. Tlhahlobo ea ka e kenyelletsa li-server tse hiriloeng ho tloha Digital Ocean.

Re lekanya eng?

U ka lekanya matšoao a fapaneng. Re lekola ts'ebetso ea meralo e 'ngoe le e' ngoe ka tlhophiso e fanoeng ka ho kenya li-server ka likopo maemong a fapaneng a parallelism: mojaro o hola ho tloha ho 20 ho isa ho 15 basebelisi ba nako e le 'ngoe.

Liphetho tsa liteko

Chate e latelang e bonts'a ts'ebetso ea li-server meahong e fapaneng maemong a fapaneng a ho bapisa. Axis ea y ke palo ea likopo motsotsoana, x-axis ke likhokahano tse bapileng.

Ts'ebetso ea marang-rang ea Linux. Selelekela

Ts'ebetso ea marang-rang ea Linux. Selelekela

Ts'ebetso ea marang-rang ea Linux. Selelekela

Ka tlase ke tafole e nang le liphetho.

likopo ka motsotsoana

ho bapisa
pheta-pheto
fereko
pele ho fereko
phallela
ho phallela pele
phuputso
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
ho hasana ho hoholo
2138

5000
-
ho hasana ho hoholo
1600
1100
2519
-
2235

8000
-
-
1200
ho hasana ho hoholo
2451
-
2100

10
-
-
ho hasana ho hoholo
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Ho tloha ho graph le tafoleng ho ka bonoa hore ka holimo ho likopo tsa 8000 ka nako e le 'ngoe re na le libapali tse peli feela tse setseng: pre-fork le epoll. Ha mojaro o ntse o eketseha, seva se thehiloeng ho likhetho se sebetsa hampe ho feta ho phallela. Mohaho oa pele ho popo ke mohlolisani ea tšoanelehang ho epoll, bopaki ba hore na Linux kernel e hlophisa likhoele tse ngata hakae.

Khoutu ea Mohloli oa ZeroHTTPd

Khoutu ea Mohloli oa ZeroHTTPd mona. Ho na le bukana e arohaneng bakeng sa moaho o mong le o mong.

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 └── litempele └── buka ea baeti └── index.html

Ntle le li-directory tse supileng bakeng sa meralo eohle ea meralo, ho na le tse ling tse peli bukeng ea boemo bo holimo: sechaba le litempele. Ea pele e na le faele ea index.html le setšoantšo se hlahang skrineng sa pele. U ka beha lifaele le lifoldara tse ling moo, 'me ZeroHTTPd e lokela ho sebeletsa lifaele tseo tse tsitsitseng ntle le mathata. Haeba tsela ea sebatli e lumellana le tsela e foldareng ea sechaba, ZeroHTTPd e batla faele ea index.html bukeng ena. Litaba tsa buka ea baeti li hlahisoa ka matla. E na le leqephe la lehae feela, 'me litaba tsa eona li ipapisitse le faele ea' templates/guestbook/index.html'. ZeroHTTPd e eketsa habonolo maqephe a matla bakeng sa katoloso. Morero ke hore basebelisi ba ka eketsa litempele bukeng ena mme ba holise ZeroHTTPd ha ho hlokahala.

Ho aha li-server tse supileng kaofela, matha make all ho tsoa bukeng ea boemo bo holimo - 'me tsohle tse hahang li tla hlaha bukeng ena. Lifaele tse sebetsang li batla li-directory tsa sechaba le li-templates bukeng eo li qalisoang ho eona.

Linux API

Ha ho hlokahale hore u tsebe hantle Linux API ho utloisisa tlhahisoleseling letotong la sengoloa sena. Leha ho le joalo, ke khothaletsa ho bala haholoanyane ka sehlooho sena; ho na le lisebelisoa tse ngata tsa litšupiso ho Marang-rang. Leha re tla ama likarolo tse 'maloa tsa Linux APIs, maikutlo a rona e tla ba haholo lits'ebetsong, likhoele, liketsahalo le marang-rang a marang-rang. Ntle le libuka le lingoliloeng tse mabapi le Linux API, ke boetse ke khothaletsa ho bala mana bakeng sa mehala ea sistimi le mesebetsi ea laeborari e sebelisitsoeng.

Tshebetso le Scalability

Ntlha e le 'ngoe mabapi le ts'ebetso le scalability. Ka khopolo, ha ho na kamano pakeng tsa bona. U ka ba le ts'ebeletso ea webo e sebetsang hantle haholo, ka nako ea karabelo ea li-milliseconds tse 'maloa, empa ha e na sekhahla ho hang. Ka mokhoa o ts'oanang, ho ka 'na ha e-ba le ts'ebeliso ea marang-rang e sa sebetseng hantle e nkang metsotsoana e seng mekae ho arabela, empa e lekanya ka mashome ho sebetsana le basebelisi ba mashome a likete ka nako e le 'ngoe. Leha ho le joalo, motsoako oa ts'ebetso e phahameng le scalability ke motsoako o matla haholo. Lisebelisoa tse sebetsang hantle ka kakaretso li sebelisa lisebelisoa ka mokhoa o fokolang 'me ka hona li sebeletsa basebelisi ka nako e le ngoe ho seva, ho fokotsa litšenyehelo.

Mesebetsi ea CPU le I/O

Qetellong, ho komporo ho na le mefuta e 'meli e ka khonehang ea mesebetsi: bakeng sa I/O le CPU. Ho fumana likopo ka Marang-rang (network I/O), ho sebeletsa lifaele (network le disk I/O), ho buisana le database (network le disk I/O) kaofela ke mesebetsi ea I/O. Lipotso tse ling tsa database li ka ba matla haholo ho CPU (ho hlopha, ho etsa liphetho tse milione, joalo-joalo). Lisebelisoa tse ngata tsa marang-rang li lekantsoe ke boholo bo ka khonehang ba I/O, 'me processor ha e sebelisoe ka botlalo. Ha u bona hore mosebetsi o mong oa I / O o sebelisa CPU e ngata, mohlomong ke sesupo sa meralo e fosahetseng ea ts'ebeliso. Sena se ka bolela hore lisebelisoa tsa CPU li senyehile taolong ea ts'ebetso le ho fetoha ha maemo - mme sena ha se na thuso ho hang. Haeba u etsa ntho e kang ho lokisa litšoantšo, ho fetola faele ea molumo, kapa ho ithuta ka mochine, joale kopo e hloka lisebelisoa tse matla tsa CPU. Empa bakeng sa likopo tse ngata sena ha se joalo.

Ithute haholoanyane ka meaho ea li-server

  1. Karolo ea I: Iterative Architecture
  2. Karolo ea II. Li-server tsa fereko
  3. Karolo ea III. Li-server tsa pre-fork
  4. Karolo ea IV. Li-server tse nang le likhoele tsa ts'ebetso
  5. Karolo ea V. Li-server tse kentsoeng pele
  6. Karolo ea VI. Mehaho e thehiloeng ho Pol
  7. Karolo ea VII. meaho e thehiloeng ho epoll

Source: www.habr.com

Eketsa ka tlhaloso