Linux network thov kev ua tau zoo. Taw qhia

Cov ntawv thov web tam sim no tau siv txhua qhov chaw, thiab ntawm tag nrho cov kev thauj mus los, HTTP tuav tus tsov ntxhuav feem. Thaum kawm txog cov nuances ntawm kev txhim kho lub vev xaib, cov neeg feem coob them me ntsis rau lub operating system uas cov ntawv thov no tau ua haujlwm. Kev sib cais ntawm kev txhim kho (Dev) thiab kev ua haujlwm (Ops) tsuas yog ua rau qhov xwm txheej tsis zoo. Tab sis nrog kev nce ntawm DevOps kab lis kev cai, cov neeg tsim khoom tau dhau los ua lub luag haujlwm rau kev khiav lawv cov ntawv thov hauv huab, yog li nws muaj txiaj ntsig zoo rau lawv kom paub meej txog qhov backend ntawm lub operating system. Qhov no muaj txiaj ntsig tshwj xeeb yog tias koj tab tom sim siv lub kaw lus rau ntau txhiab lossis kaum tawm txhiab ntawm kev sib txuas ib txhij.

Cov kev txwv hauv cov kev pabcuam hauv web zoo ib yam li cov hauv lwm cov ntawv thov. Txawm hais tias nws yog load balancers lossis database servers, tag nrho cov ntawv thov no muaj teeb meem zoo sib xws hauv qhov chaw ua haujlwm siab. Kev nkag siab txog cov kev txwv tseem ceeb no thiab yuav ua li cas kov yeej lawv feem ntau yuav pab koj ntsuas qhov ua tau zoo thiab kev ua kom muaj peev xwm ntawm koj lub vev xaib.

Kuv tabtom sau cov kab lus no hauv cov lus teb rau cov lus nug los ntawm cov tub ntxhais hluas tsim tawm uas xav los ua cov kws tsim qauv paub zoo. Nws tsis yooj yim sua kom nkag siab meej txog Linux daim ntawv thov kev ua kom zoo dua cov txheej txheem yam tsis tau dhia mus rau hauv cov hauv paus ntawm lawv ua haujlwm li cas ntawm qib kev ua haujlwm. Txawm hais tias muaj ntau hom kev siv, hauv cov koob no kuv xav tshawb nrhiav cov ntawv thov hauv web es tsis yog cov ntawv thov desktop xws li browser lossis cov ntawv nyeem. Cov ntaub ntawv no yog tsim los rau cov neeg tsim khoom thiab cov kws tsim qauv uas xav nkag siab tias Linux lossis Unix cov haujlwm ua haujlwm li cas thiab yuav ua li cas los tsim lawv kom ua tau zoo.

Linux yog server chav operating system, thiab feem ntau koj daim ntawv thov khiav ntawm no OS. Txawm hais tias kuv hais "Linux", feem ntau koj tuaj yeem muaj kev nyab xeeb xav tias kuv txhais tau tias txhua qhov haujlwm zoo li Unix feem ntau. Txawm li cas los xij, kuv tsis tau sim cov lej nrog rau lwm lub tshuab. Yog li, yog tias koj txaus siab rau FreeBSD lossis OpenBSD, koj cov txiaj ntsig yuav txawv. Thaum kuv sim ib yam dab tsi Linux tshwj xeeb, kuv taw tes rau nws.

Thaum koj tuaj yeem siv qhov kev paub no los tsim ib qho app los ntawm kos thiab nws yuav ua kom zoo kawg nkaus, nws yog qhov zoo tshaj tsis ua li ntawd. Yog tias koj sau lub vev xaib tshiab hauv C lossis C ++ rau koj lub koom haum daim ntawv thov kev lag luam, qhov no yuav yog hnub kawg ntawm koj txoj haujlwm. Txawm li cas los xij, paub txog cov qauv ntawm cov ntawv thov no yuav pab xaiv cov kev pabcuam uas twb muaj lawm. Koj tuaj yeem sib piv cov txheej txheem raws li cov txheej txheem nrog xov-raws li cov txheej txheem raws li kev tshwm sim. Koj yuav nkag siab thiab txaus siab vim li cas Nginx ua tau zoo dua Apache httpd, yog vim li cas Tornado raws li daim ntawv thov Python tuaj yeem pab cov neeg siv ntau dua piv rau Django raws li daim ntawv thov Python.

ZeroHTTPd: Cov cuab yeej kawm

ZeroHTTPd yog lub web server uas kuv tau sau los ntawm kos hauv C ua cov cuab yeej qhia. Nws tsis muaj kev cuam tshuam sab nraud, suav nrog kev nkag mus rau Redis. Peb khiav peb tus kheej cov txheej txheem Redis. Saib hauv qab no kom paub meej ntxiv.

Txawm hais tias peb tuaj yeem sib tham txog qhov kev xav ntawm qhov ntev, tsis muaj dab tsi zoo dua li kev sau cov lej, khiav nws, thiab sib piv txhua tus server architectures nrog ib leeg. Qhov no yog txoj kev pom tseeb tshaj plaws. Yog li ntawd, peb yuav sau ib qho yooj yim ZeroHTTPd web server siv txhua tus qauv: txheej txheem-raws li, xov-raws li, thiab kev tshwm sim-raws li. Cia peb tshawb xyuas txhua tus ntawm cov servers no thiab saib seb lawv ua li cas piv rau ib leeg. ZeroHTTPd yog siv nyob rau hauv ib daim ntawv C uthash, zoo heev hash rooj siv uas los nyob rau hauv ib tug header ntaub ntawv. Hauv lwm qhov xwm txheej, tsis muaj kev cuam tshuam, thiaj li tsis ua rau qhov project nyuaj.

Muaj ntau ntau cov lus hauv cov cai los pab koj nkag siab. Ua ib lub vev xaib yooj yim hauv ob peb kab ntawm cov cai, ZeroHTTPd kuj yog lub hauv paus me me rau kev txhim kho lub vev xaib. Nws muaj kev ua haujlwm tsawg, tab sis muaj peev xwm ua haujlwm zoo li qub thiab cov nplooj ntawv "dynamic" yooj yim heev. Kuv yuav tsum hais tias ZeroHTTPd yog qhov zoo rau kev kawm yuav ua li cas los tsim cov ntawv thov Linux ua haujlwm siab. Los ntawm thiab loj, feem ntau cov kev pabcuam hauv web tos rau kev thov, xyuas lawv thiab ua lawv. Qhov no yog qhov ZeroHTTPd yuav ua. Qhov no yog ib qho cuab yeej rau kev kawm, tsis yog kev tsim khoom. Nws tsis zoo ntawm kev ua yuam kev thiab tsis zoo li khav theeb qhov kev coj ua zoo tshaj plaws (oh yog, kuv siv strcpyTab sis kuv vam tias nws ua nws txoj hauj lwm zoo.

Linux network thov kev ua tau zoo. Taw qhia
ZeroHTTPd home page. Nws tuaj yeem tso tawm ntau hom ntaub ntawv nrog rau cov duab

Daim Ntawv Thov Phau Ntawv Qhua

Cov ntawv thov web niaj hnub no feem ntau tsis txwv rau cov ntaub ntawv zoo li qub. Lawv muaj kev sib cuam tshuam nrog ntau yam databases, caches, thiab lwm yam. Yog li peb yuav tsim ib daim ntawv thov web yooj yim hu ua "Guest Book" uas cov neeg tuaj xyuas tawm hauv lawv cov npe. Cov phau ntawv qhua khaws cov ntawv sau tseg ua ntej. Kuj tseem muaj tus qhua tuaj saib hauv qab ntawm nplooj ntawv.

Linux network thov kev ua tau zoo. Taw qhia
Web application "Guest Book" ZeroHTTPd

Cov qhua tuaj noj mov thiab cov phau ntawv qhua nkag tau khaws cia hauv Redis. Rau kev sib txuas lus nrog Redis, tus kheej cov txheej txheem raug siv; lawv tsis nyob ntawm lub tsev qiv ntawv sab nraud. Kuv tsis yog tus kiv cua loj ntawm dov tawm homebrew code thaum muaj kev tshaj tawm thiab cov kev daws teeb meem zoo. Tab sis lub hom phiaj ntawm ZeroHTTPd yog los kawm Linux kev ua tau zoo thiab nkag mus rau cov kev pabcuam sab nraud, thaum ua haujlwm rau HTTP thov muaj kev cuam tshuam loj heev. Peb yuav tsum tswj hwm kev sib txuas lus nrog Redis hauv txhua qhov ntawm peb cov server architectures. Hauv qee qhov chaw peb siv thaiv kev hu, hauv lwm tus peb siv cov txheej txheem raws li kev tshwm sim. Siv lub tsev qiv ntawv Redis tus neeg siv sab nraud yuav tsis muab kev tswj hwm no. Tsis tas li ntawd, peb tus neeg siv Redis me me tsuas yog ua ob peb lub luag haujlwm (tau txais, teeb tsa, thiab nce tus yuam sij; tau txais thiab txuas ntxiv mus rau ib qho array). Tsis tas li ntawd, Redis raws tu qauv yog heev elegant thiab yooj yim. Koj tsis tas yuav qhia tshwj xeeb rau nws. Qhov tseeb hais tias raws tu qauv ua tag nrho cov hauj lwm nyob rau hauv hais txog ib puas kab ntawm code qhia tau hais tias zoo npaum li cas ntawm nws yog.

Daim duab hauv qab no qhia tias daim ntawv thov ua li cas thaum tus neeg siv khoom (browser) thov /guestbookURL.

Linux network thov kev ua tau zoo. Taw qhia
Daim ntawv thov phau ntawv qhua ua haujlwm li cas

Thaum nplooj ntawv qhua yuav tsum tau muab tawm, muaj ib qho kev hu mus rau cov ntaub ntawv kaw lus nyeem cov qauv rau hauv lub cim xeeb thiab peb lub network hu rau Redis. Cov ntaub ntawv template muaj feem ntau ntawm cov ntsiab lus HTML rau nplooj ntawv hauv lub screenshot saum toj no. Kuj tseem muaj cov chaw tshwj xeeb rau qhov dynamic ib feem ntawm cov ntsiab lus: posts thiab cov qhua tuaj xyuas. Peb tau txais lawv los ntawm Redis, ntxig rau hauv nplooj ntawv thiab muab cov neeg siv khoom nrog cov ntsiab lus tsim tiav. Qhov thib peb hu rau Redis tuaj yeem zam tau vim Redis rov qab tus nqi tseem ceeb tshiab thaum nce ntxiv. Txawm li cas los xij, rau peb cov neeg rau zaub mov, uas muaj qhov kev tshwm sim asynchronous-based architecture, ntau lub network hu yog qhov kev xeem zoo rau kev kawm. Yog li peb muab pov tseg Redis rov qab tus nqi ntawm tus naj npawb ntawm cov neeg tuaj xyuas thiab nug nws nrog kev hu xov tooj cais.

Server architectures ZeroHTTPd

Peb tab tom tsim xya versions ntawm ZeroHTTPd nrog tib lub luag haujlwm tab sis txawv architectures:

  • Rov ua dua
  • Fork server (ib txheej txheem me nyuam ib qho kev thov)
  • Pre-fork server (pre-forking ntawm cov txheej txheem)
  • Tus neeg rau zaub mov nrog kev ua tiav threads (ib txoj xov ib qhov kev thov)
  • Server nrog pre-thread creation
  • Architecture raws poll()
  • Architecture raws epoll

Peb ntsuas qhov kev ua tau zoo ntawm txhua tus qauv los ntawm kev thauj cov server nrog HTTP thov. Tab sis thaum sib piv cov qauv zoo sib xws, cov lus nug nce ntxiv. Peb sim peb zaug thiab xam qhov nruab nrab.

Kev xeem txheej txheem

Linux network thov kev ua tau zoo. Taw qhia
ZeroHTTPd load kuaj teeb

Nws yog ib qho tseem ceeb uas thaum kev xeem khiav, tag nrho cov khoom tsis khiav ntawm tib lub tshuab. Nyob rau hauv rooj plaub no, OS incurs ntxiv teem caij nyoog overhead raws li cov khoom sib tw rau CPU. Kev ntsuas qhov kev khiav hauj lwm qhov nyiaj siv ua haujlwm ntawm txhua qhov kev xaiv server architectures yog ib lub hom phiaj tseem ceeb ntawm qhov kev tawm dag zog no. Ntxiv ntau qhov sib txawv yuav ua rau muaj kev puas tsuaj rau cov txheej txheem. Yog li ntawd, qhov chaw hauv daim duab saum toj no ua haujlwm zoo tshaj plaws.

Txhua tus servers no ua dab tsi?

  • load.unixism.net: Nov yog qhov peb khiav ab, Apache Benchmark utility. Nws tsim cov load xav tau los sim peb cov server architectures.
  • nginx.unixism.net: Qee lub sij hawm peb xav khiav ntau dua ib qho piv txwv ntawm kev pabcuam server. Txhawm rau ua qhov no, Nginx server nrog cov chaw tsim nyog ua haujlwm raws li lub luag haujlwm thauj khoom los ntawm ab rau peb cov txheej txheem server.
  • zerohttpd.unixism.net: Ntawm no peb khiav peb cov kev pabcuam server ntawm xya lub tsev sib txawv, ib zaug.
  • redis.unixism.net: Cov neeg rau zaub mov no khiav Redis daemon, qhov twg cov ntaub ntawv nkag nkag thiab cov neeg tuaj xyuas cov chaw khaws cia.

Tag nrho cov servers khiav ntawm tib lub processor core. Lub tswv yim yog los ntsuas qhov kev ua tau zoo tshaj plaws ntawm txhua qhov architecture. Txij li tag nrho cov kev pabcuam server raug kuaj ntawm tib lub kho vajtse, qhov no yog lub hauv paus rau kev sib piv. Kuv qhov kev sim teeb tsa muaj virtual servers xauj los ntawm Digital Ocean.

Peb ntsuas dab tsi?

Koj tuaj yeem ntsuas qhov ntsuas sib txawv. Peb ntsuas qhov kev ua tau zoo ntawm txhua tus qauv hauv ib qho kev teeb tsa los ntawm kev thauj cov servers nrog kev thov ntawm ntau theem ntawm kev sib luag: cov khoom loj hlob los ntawm 20 mus rau 15 tus neeg siv sib xyaw.

Ntsuas cov txiaj ntsig

Daim ntawv qhia hauv qab no qhia txog kev ua haujlwm ntawm cov servers ntawm cov qauv sib txawv ntawm ntau theem ntawm parallelism. Lub y-axis yog tus naj npawb ntawm kev thov ib ob, x-axis yog kev sib txuas sib txuas.

Linux network thov kev ua tau zoo. Taw qhia

Linux network thov kev ua tau zoo. Taw qhia

Linux network thov kev ua tau zoo. Taw qhia

Hauv qab no yog ib lub rooj nrog cov txiaj ntsig.

thov ib ob

parallelism
rov ua dua
diav rawg
ua ntej diav rawg
streaming
ua ntej streaming
pov npav
epol

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
loj kis
2138

5000
-
loj kis
1600
1100
2519
-
2235

8000
-
-
1200
loj kis
2451
-
2100

10
-
-
loj kis
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Los ntawm daim duab thiab cov lus nws tuaj yeem pom tias saum toj 8000 ib txhij thov peb tsuas muaj ob tus neeg ua si sab laug: ua ntej rab rawg thiab epoll. Raws li kev thauj khoom nce ntxiv, lub chaw pov npav raws li cov neeg siv khoom ua haujlwm phem dua li streaming ib qho. Cov xov-pre-creation architecture yog qhov tsim nyog tus neeg sib tw rau epoll, ua pov thawj rau qhov zoo li cas Linux ntsiav teem sijhawm ntau cov xov.

ZeroHTTPd Source Code

ZeroHTTPd Source Code no. Muaj ib daim ntawv teev npe sib cais rau txhua qhov architecture.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking │ ├── main.c ├── ├── 04_ xov 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └── main.c ├── Makefile ├── public │ ─ ├── . png └── templates └── guestbook └── index.html

Ntxiv rau xya phau ntawv teev npe rau tag nrho cov architectures, muaj ob qho ntxiv hauv cov npe saum toj kawg nkaus: pej xeem thiab cov qauv. Thawj muaj cov ntaub ntawv index.html thiab cov duab los ntawm thawj lub screenshot. Koj tuaj yeem tso lwm cov ntaub ntawv thiab folders rau ntawd, thiab ZeroHTTPd yuav tsum ua haujlwm rau cov ntaub ntawv zoo li qub yam tsis muaj teeb meem. Yog tias txoj hauv kev hauv qhov browser cuam tshuam rau txoj hauv kev hauv cov ntaub ntawv pej xeem, ces ZeroHTTPd nrhiav cov ntaub ntawv index.html hauv phau ntawv qhia no. Cov ntsiab lus rau phau ntawv qhua yog generated dynamically. Nws tsuas muaj ib lub tsev, thiab nws cov ntsiab lus yog raws li cov ntaub ntawv 'templates/guestbook/index.html'. ZeroHTTPd yooj yim ntxiv cov nplooj ntawv dynamic rau txuas ntxiv. Lub tswv yim yog tias cov neeg siv tuaj yeem ntxiv cov qauv rau cov npe no thiab txuas ntxiv ZeroHTTPd raws li xav tau.

Txhawm rau tsim tag nrho xya servers, khiav make all los ntawm cov ntawv teev npe saum toj kawg nkaus - thiab txhua qhov tsim yuav tshwm sim hauv phau ntawv qhia no. Cov ntaub ntawv ua tau zoo saib rau pej xeem thiab cov ntawv teev npe hauv cov npe uas lawv tau pib.

Linux API

Koj tsis tas yuav tsum tau paub zoo hauv Linux API kom nkag siab cov ntaub ntawv hauv kab lus no. Txawm li cas los xij, kuv xav kom nyeem ntxiv txog cov ncauj lus no; muaj ntau yam kev siv hauv Internet. Txawm hais tias peb yuav kov ntau pawg ntawm Linux APIs, peb lub hom phiaj yuav yog feem ntau ntawm cov txheej txheem, xov, txheej xwm, thiab pawg network. Ntxiv rau cov phau ntawv thiab cov ntawv hais txog Linux API, Kuv kuj pom zoo kom nyeem mana rau kev hu xov tooj thiab lub tsev qiv ntawv siv.

Kev ua tau zoo thiab Scalability

Ib daim ntawv qhia txog kev ua tau zoo thiab scalability. Raws li txoj cai, tsis muaj kev sib txuas ntawm lawv. Koj tuaj yeem muaj lub vev xaib kev pabcuam uas ua haujlwm tau zoo, nrog lub sijhawm teb ntawm ob peb milliseconds, tab sis nws tsis ntsuas txhua. Ib yam li ntawd, tej zaum yuav muaj kev ua haujlwm tsis zoo hauv lub vev xaib uas siv sijhawm ob peb feeb los teb, tab sis nws ntsuas los ntawm kaum tawm los lis ntau txhiab tus neeg siv tib lub sijhawm. Txawm li cas los xij, kev sib xyaw ua ke ntawm kev ua haujlwm siab thiab scalability yog kev sib xyaw ua ke muaj zog heev. Cov ntawv thov kev ua haujlwm siab feem ntau siv cov peev txheej me me thiab yog li ua haujlwm tau zoo dua cov neeg siv sib txuam ntawm lub server, txo cov nqi.

CPU thiab I / O cov haujlwm

Thaum kawg, hauv kev suav yeej ib txwm muaj ob txoj haujlwm ua tau: rau I / O thiab CPU. Tau txais kev thov hauv Is Taws Nem (network I / O), pab cov ntaub ntawv (network thiab disk I / O), sib txuas lus nrog cov ntaub ntawv (network thiab disk I / O) yog tag nrho cov haujlwm I / O. Qee cov lus nug hauv cov ntaub ntawv tuaj yeem yog CPU hnyav me ntsis (kev txheeb xyuas, qhov nruab nrab ntawm ib lab cov txiaj ntsig, thiab lwm yam). Feem ntau cov ntawv thov web raug txwv los ntawm qhov siab tshaj plaws tau I / O, thiab cov processor tsis tshua siv ntawm qhov muaj peev xwm. Thaum koj pom tias qee qhov haujlwm I / O tab tom siv CPU ntau, nws feem ntau yuav yog lub cim ntawm daim ntawv thov tsis zoo. Qhov no tuaj yeem txhais tau tias cov peev txheej CPU raug pov tseg ntawm cov txheej txheem kev tswj hwm thiab cov ntsiab lus hloov pauv - thiab qhov no tsis muaj txiaj ntsig zoo. Yog tias koj tab tom ua qee yam xws li kev ua cov duab, hloov ntaub ntawv audio, lossis kev kawm tshuab, ces daim ntawv thov yuav tsum muaj peev txheej CPU muaj zog. Tab sis rau feem ntau daim ntawv thov qhov no tsis yog li ntawd.

Kawm ntxiv txog server architectures

  1. Ntu I: Nws yog qhov tsim nyog rau kev tsim vaj tsev
  2. Ntu II. Fork servers
  3. Ntu III. Pre-fork servers
  4. Tshooj IV. Servers nrog threads ntawm kev ua
  5. Ntu V. Pre-threaded servers
  6. Ntu VI. Pol-based architecture
  7. Part VII. epoll-based architecture

Tau qhov twg los: www.hab.com

Ntxiv ib saib