arụmọrụ ngwa netwọkụ Linux. Okwu mmalite

A na-eji ngwa webụ ugbu a ebe niile, na n'ime usoro ụgbọ njem niile, HTTP nwere oke ọdụm. Mgbe ị na-amụ nuances nke mmepe ngwa weebụ, ọtụtụ ndị mmadụ anaghị elebara sistemụ arụmọrụ ebe ngwa ndị a na-agba ọsọ anya. Nkewa nke mmepe (Dev) na arụmọrụ (Ops) mere ka ọnọdụ ahụ ka njọ. Mana na ịrị elu nke omenala DevOps, ndị mmepe na-ahụ maka ịgba ọsọ ngwa ha n'igwe ojii, yabụ ọ bara ezigbo uru ka ha mara nke ọma na azụ azụ nke sistemụ arụmọrụ. Nke a bara uru karịsịa ma ọ bụrụ na ị na-agbalị itinye usoro maka puku kwuru puku ma ọ bụ iri puku kwuru iri puku njikọ n'out oge.

Mmachi dị na ọrụ weebụ yiri nke dị na ngwa ndị ọzọ. Ma ọ bụ ibu balancers ma ọ bụ sava nchekwa data, ngwa ndị a niile nwere nsogbu ndị yiri ya na gburugburu ebe dị elu. Ịghọta oke ndị a bụ isi na otu esi emeri ha n'ozuzu ga-enyere gị aka nyochaa arụmọrụ na scalability nke ngwa weebụ gị.

Ana m ede usoro isiokwu a maka nzaghachi nye ajụjụ sitere n'aka ndị mmepe na-eto eto bụ ndị chọrọ ịbụ ndị na-esepụta usoro ihe ọmụma nke ọma. Ọ gaghị ekwe omume ịghọta n'ụzọ doro anya usoro njikarịcha ngwa ngwa Linux na-abanyeghị n'ime ntọala nke otu ha si arụ ọrụ na ọkwa sistemụ arụmọrụ. Ọ bụ ezie na enwere ọtụtụ ụdị ngwa, n'usoro isiokwu a, achọrọ m inyocha ngwa dabere na webụ karịa ngwa desktọpụ dị ka ihe nchọgharị ma ọ bụ editọ ederede. Ezubere ihe a maka ndị mmepe na ndị na-ese ụkpụrụ ụlọ chọrọ ịghọta ka mmemme Linux ma ọ bụ Unix si arụ ọrụ yana otu esi ahazi ha maka ịrụ ọrụ dị elu.

Linux bụ ụlọ nkesa sistemụ arụmọrụ, na ọtụtụ mgbe ngwa gị na-agba na OS a. Ọ bụ ezie na m na-ekwu "Linux", ọtụtụ oge ị nwere ike iche n'enweghị nsogbu na m pụtara sistemụ arụmọrụ Unix niile n'ozuzu ya. Agbanyeghị, anwalebeghị m koodu na-esote na sistemụ ndị ọzọ. Yabụ, ọ bụrụ na ị nwere mmasị na FreeBSD ma ọ bụ OpenBSD, nsonaazụ gị nwere ike ịdị iche. Mgbe m nwara ihe gbasara Linux, a na m atụ aka ya.

Ọ bụ ezie na ị nwere ike iji ihe ọmụma a wuo ngwa site na ọkọ na a ga-emezi ya nke ọma, ọ ka mma ịghara ime nke ahụ. Ọ bụrụ na ị dee sava weebụ ọhụrụ na C ma ọ bụ C++ maka ngwa azụmahịa nke nzukọ gị, nke a nwere ike ịbụ ụbọchị ikpeazụ gị n'ọrụ ahụ. Otú ọ dị, ịmara nhazi nke ngwa ndị a ga-enyere aka n'ịhọrọ mmemme dị ugbu a. Ị ga-enwe ike iji usoro ndị dabere na usoro na usoro ndị dabeere na eri yana ndị dabeere na mmemme. Ị ga-aghọta ma nwee ekele maka ihe kpatara Nginx ji arụ ọrụ karịa Apache httpd, ihe kpatara ngwa Python dabeere na Tornado nwere ike ijere ọtụtụ ndị ọrụ aka ma e jiri ya tụnyere ngwa Python dabeere Django.

ZeroHTTPd: Ngwa mmụta

ZeroHTTPd bụ sava weebụ nke m dere site na ọkọ na C dị ka ngwa nkuzi. Ọ nweghị ndabere mpụga, gụnyere ịnweta Redis. Anyị na-eme usoro Redis nke anyị. Lee n'okpuru maka nkọwa ndị ọzọ.

Ọ bụ ezie na anyị nwere ike ikwurịta okwu n'ogologo, ọ dịghị ihe dị mma karịa ide koodu, na-agba ọsọ ya, na iji tụnyere ụlọ ọrụ ihe nkesa niile na ibe ya. Nke a bụ usoro kacha pụta ìhè. Ya mere, anyị ga-ede ihe nkesa weebụ ZeroHTTPd dị mfe site na iji ụdị ọ bụla: usoro dabere, eri dabere na ihe omume. Ka anyị lelee nke ọ bụla n'ime sava ndị a wee hụ ka ha si arụ ọrụ ma e jiri ya tụnyere ibe ha. A na-emejuputa ZeroHTTPd n'otu faịlụ C nke ihe nkesa dabere na mmemme gụnyere uthash, nnukwu mmejuputa tebụl hash nke na-abịa na otu faịlụ nkụnye eji isi mee. N'ọnọdụ ndị ọzọ, ọ dịghị ihe ndabere, ka ọ ghara ime ka ọrụ ahụ sie ike.

Enwere otutu okwu na koodu iji nyere gị aka ịghọta. N'ịbụ onye nkesa weebụ dị mfe n'ahịrị koodu ole na ole, ZeroHTTPd bụkwa obere usoro maka mmepe weebụ. Ọ nwere obere ọrụ, mana ọ nwere ike ịnye faịlụ static yana ibe "dị ike" dị mfe. Ekwesịrị m ịsị na ZeroHTTPd dị mma maka ịmụta ka esi emepụta ngwa Linux dị elu. N'ozuzu, ọtụtụ ọrụ weebụ na-echere arịrịọ, lelee ha ma hazie ya. Nke a bụ kpọmkwem ihe ZeroHTTPd ga-eme. Nke a bụ ngwá ọrụ maka mmụta, ọ bụghị mmepụta. Ọ bụghị nnukwu na njikwa njehie yana o yighị ka ọ ga-anya isi na usoro nchekwa kachasị mma (oh ee, ejiri m strcpy) ma ọ bụ aghụghọ aghụghọ nke asụsụ C mana enwere m olileanya na ọ na-arụ ọrụ ya nke ọma.

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite
Ebe obibi ZeroHTTPd. Ọ nwere ike wepụta ụdị faịlụ dị iche iche gụnyere onyonyo

Ngwa akwụkwọ ọbịa

Ngwa weebụ ọgbara ọhụrụ anaghị ejedebe na faịlụ static. Ha nwere mmekọrịta dị mgbagwoju anya na ọdụ data dị iche iche, cache, wdg. Ya mere, anyị ga-emepụta ngwa weebụ dị mfe a na-akpọ "Akwụkwọ ndị ọbịa" ebe ndị ọbịa na-ahapụ ndenye n'okpuru aha ha. Akwụkwọ ndị ọbịa na-echekwa ndenye ndị fọdụrụ na mbụ. Enwekwara counter ọbịa na ala ibe.

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite
Ngwa webụ "Akwụkwọ ndị ọbịa" ZeroHTTPd

A na-echekwa ọnụ ahịa ndị ọbịa na ndenye akwụkwọ ndị ọbịa na Redis. Maka nzikọrịta ozi na Redis, a na-emejuputa atumatu nke ya na ọbá akwụkwọ dị n'èzí. Abụghị m nnukwu onye na-akwado ibugharị koodu homebrew mgbe enwere azịza n'ihu ọha yana anwalela nke ọma. Mana ebumnuche ZeroHTTPd bụ ịmụ ọrụ Linux yana ịnweta ọrụ mpụga, ebe ị na-arịọ arịrịọ HTTP nwere mmetụta dị oke egwu. Anyị ga-ejikwa Redis zuru oke na nkwukọrịta n'ime ụlọ ihe nkesa anyị ọ bụla. N'ime ụlọ ụfọdụ anyị na-eji igbochi oku, na ndị ọzọ anyị na-eji usoro dabere na mmemme. Iji ọbá akwụkwọ ahịa Redis dị na mpụga agaghị enye njikwa a. Na mgbakwunye, obere onye ahịa Redis na-arụ naanị ọrụ ole na ole (inweta, ịtọlite ​​​​na ịbawanye igodo; ịnweta na itinye n'usoro). Na mgbakwunye, protocol Redis mara mma nke ukwuu ma dịkwa mfe. Ọ dịghị mkpa ka ị na-akụzi ya pụrụ iche. Eziokwu ahụ bụ na protocol na-arụ ọrụ niile n'ihe dị ka otu narị ahịrị koodu na-egosi etu esi echepụta ya nke ọma.

Ọnụ ọgụgụ na-esonụ na-egosi ihe ngwa a na-eme mgbe onye ahịa (nchọgharị) rịọrọ /guestbookURL.

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite
Kedu ka ngwa akwụkwọ ọbịa si arụ ọrụ

Mgbe ekwesịrị ịnye akwụkwọ akwụkwọ ọbịa, enwere otu oku na-aga na sistemụ faịlụ iji gụọ ndebiri n'ime ebe nchekwa yana oku netwọkụ atọ na Redis. Faịlụ template nwere ọtụtụ ọdịnaya HTML maka ibe dị na nseta ihuenyo dị n'elu. Enwekwara ebe nchekwa pụrụ iche maka akụkụ dị ike nke ọdịnaya: posts na counter ọbịa. Anyị na-enweta ha site na Redis, tinye ha n'ime ibe ma nye onye ahịa ọdịnaya zuru oke. Enwere ike ịzere oku nke atọ na Redis n'ihi na Redis na-eweghachi uru igodo ọhụrụ mgbe agbakwunyere. Agbanyeghị, maka ihe nkesa anyị, nke nwere ihe owuwu dabere na mmemme asynchronous, ọtụtụ oku netwọkụ bụ ezigbo ule maka ebumnuche mmụta. Yabụ na anyị tụfuru uru nloghachi Redis gbasara ọnụọgụ ndị ọbịa wee jiri oku dị iche jụọ ya.

Sava architectures ZeroHTTPd

Anyị na-ewu ụdị asaa nke ZeroHTTPd nwere otu ọrụ mana ụlọ ọrụ dị iche iche:

  • Ntughari
  • Ihe nkesa ndụdụ (usoro otu nwatakịrị maka arịrịọ)
  • Ihe nkesa tupu ndụdụ (tupu ụzọ nke usoro)
  • Ihe nkesa nwere eriri ogbugbu (otu eri kwa arịrịọ)
  • Ihe nkesa nwere ihe okike tupu eri
  • dabere na ihe owuwu poll()
  • dabere na ihe owuwu epoll

Anyị na-atụle arụmọrụ nke ụlọ ọ bụla site na itinye arịrịọ HTTP. Ma mgbe a na-atụnyere nnukwu ụlọ ọrụ ụlọ, ọnụ ọgụgụ nke ajụjụ na-abawanye. Anyị na-anwale ugboro atọ ma gbakọọ nkezi.

Usoro ule

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite
Nhazi nnwale ibu ZeroHTTPd

Ọ dị mkpa na mgbe ị na-agba ọsọ ule, ihe niile mejupụtara anaghị arụ ọrụ n'otu igwe. N'okwu a, OS na-ebute usoro nhazi ọzọ n'elu ka akụrụngwa na-asọ mpi maka CPU. Ịtụ sistemụ arụmọrụ n'elu nke ọ bụla n'ime ụlọ ihe nkesa ahọpụtara bụ otu n'ime ebumnuche kachasị mkpa nke mmemme a. Ịgbakwunye mgbanwe ndị ọzọ ga-emebi usoro ahụ. Ya mere, nhazi na foto dị n'elu na-arụ ọrụ kacha mma.

Kedu ihe nke ọ bụla n'ime sava ndị a na-eme?

  • load.unixism.net: Nke a bụ ebe anyị na-agba ọsọ ab, Apache Benchmark akụrụngwa. Ọ na-ewepụta ibu dị mkpa iji nwalee ụlọ ọrụ ihe nkesa anyị.
  • nginx.unixism.net: Mgbe ụfọdụ anyị chọrọ ịgba ọsọ karịa otu ihe atụ nke mmemme ihe nkesa. Iji mee nke a, ihe nkesa Nginx nwere ntọala kwesịrị ekwesị na-arụ ọrụ dị ka ihe nkwụnye ibu na-abịa ab ka usoro ihe nkesa anyị.
  • zerohttpd.unixism.net: N'ebe a, anyị na-eme mmemme nkesa anyị na ụlọ ọrụ asaa dị iche iche, otu n'otu oge.
  • redis.unixism.net: Ihe nkesa a na-eme Redis daemon, ebe a na-echekwa ndenye akwụkwọ ọbịa na ọnụ ọgụgụ ndị ọbịa.

Sava niile na-agba n'otu isi ihe nrụpụta. Echiche bụ iji nyochaa arụmọrụ kachasị nke ụlọ ọ bụla. Ebe ọ bụ na a na-anwale mmemme ihe nkesa niile n'otu ngwaike, nke a bụ ntọala maka ntụnyere. Nhazi ule m nwere ihe nkesa mebere agbaziri agbaziri site na Digital Ocean.

Kedu ihe anyị na-atụ?

Ị nwere ike tụọ ihe ngosi dị iche iche. Anyị na-enyocha arụmọrụ nke ụlọ ọ bụla na nhazi enyere site na itinye ihe nkesa na arịrịọ na ọkwa dị iche iche nke myirịta: ibu ahụ na-eto site na 20 ruo 15 ndị ọrụ oge.

Nsonaazụ ule

Chaatị na-esonụ na-egosi arụmọrụ nke sava na ụlọ ọrụ dị iche iche na ọkwa dị iche iche nke myirịta. y-axis bụ ọnụ ọgụgụ nke arịrịọ kwa nkeji, x-axis bụ njikọ yiri ya.

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite

arụmọrụ ngwa netwọkụ Linux. Okwu mmalite

N'okpuru ebe a bụ tebụl nwere nsonaazụ ya.

arịrịọ kwa sekọnd

myirịta
ntughari
ndụdụ
tupu ndụdụ
gụgharia
tupu gụgharia
nyocha
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
nnukwu mgbasa
2138

5000
-
nnukwu mgbasa
1600
1100
2519
-
2235

8000
-
-
1200
nnukwu mgbasa
2451
-
2100

10
-
-
nnukwu mgbasa
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Site na eserese na tebụl, enwere ike ịhụ na n'elu arịrịọ 8000 n'otu oge anyị nwere naanị ndị egwuregwu abụọ fọdụrụ: pre-fork na epoll. Ka ibu ahụ na-abawanye, ihe nkesa dabere na ntuli aka na-arụ ọrụ dị njọ karịa nke nkwanye. Ihe owuwu ihe eji eme eri tupu e kee ya bụ onye asọmpi tozuru oke, ihe na-egosi ka kernel Linux na-ahazi ọtụtụ eriri.

Koodu isi mmalite ZeroHTTPd

Koodu isi mmalite ZeroHTTPd ebe a. Enwere ndekọ dị iche iche maka ụlọ ọ bụla.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking│ 04 Ọgụgụ _nke │ ├── main.c ├── 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └─├ Make.c ├── html │ └─ tux png └── ndebiri └── akwụkwọ ọbịa └─ index.html

Na mgbakwunye na akwụkwọ ndekọ aha asaa maka ụlọ ihe owuwu niile, enwere abụọ ọzọ na ndekọ ọkwa ọkwa dị elu: ọha na ndebiri. Nke mbụ nwere faịlụ index.html yana onyonyo sitere na nseta ihuenyo mbụ. Ị nwere ike itinye faịlụ na nchekwa ndị ọzọ n'ebe ahụ, na ZeroHTTPd kwesịrị inyefe faịlụ ndị ahụ na-enweghị nsogbu ọ bụla. Ọ bụrụ na ụzọ dị na ihe nchọgharị ahụ dabara na ụzọ dị na folda ọha, mgbe ahụ ZeroHTTPd na-achọ faịlụ index.html na ndekọ a. A na-emepụta ọdịnaya maka akwụkwọ ọbịa nke ọma. Ọ nwere naanị ibe ụlọ, ọdịnaya ya dabere na faịlụ 'templates/bookbook/index.html'. ZeroHTTPd na-agbakwunye ibe dị ike maka ndọtị. Echiche bụ na ndị ọrụ nwere ike itinye ndebiri na ndekọ a wee gbasaa ZeroHTTPd ka ọ dị mkpa.

Iji wuo sava asaa niile, gbaa ọsọ make all site na ndekọ ndekọ dị elu - na ihe niile na-ewuli ga-apụta na ndekọ a. Faịlụ enwere ike ime na-achọ akwụkwọ ndekọ aha ọha yana ndebiri n'ime ndekọ ebe ewepụtara ha.

Linux API

Ọ dịghị mkpa ka ị mara nke ọma na Linux API iji ghọta ozi dị n'usoro isiokwu a. Agbanyeghị, ana m akwado ịgụkwu gbasara isiokwu a, enwere ọtụtụ akwụkwọ ntụaka na ịntanetị. Agbanyeghị na anyị ga-emetụ aka n'ụdị Linux API dị iche iche, anyị ga-elekwasị anya na usoro, eri, mmemme na nchịkọta netwọkụ. Na mgbakwunye na akwụkwọ na akụkọ gbasara Linux API, ana m akwado ịgụ mana maka oku sistemụ na ọrụ ọba akwụkwọ ejiri.

Arụmọrụ na Scalability

Otu ndetu banyere arụmọrụ na scalability. N'echiche, ọ nweghị njikọ dị n'etiti ha. Ị nwere ike ịnweta ọrụ webụ na-arụ ọrụ nke ọma, yana oge nzaghachi nke milliseconds ole na ole, mana ọ naghị abawanye ma ọlị. N'otu aka ahụ, enwere ike ịnwe ngwa weebụ na-adịghị arụ ọrụ nke na-ewe sekọnd ole na ole iji zaghachi, mana ọ na-ejiri ihe ruru iri iri iji jikwaa ọtụtụ iri puku ndị ọrụ na-emekọ ihe. Otú ọ dị, nchikota nke arụmọrụ dị elu na scalability bụ ngwakọta dị ike nke ukwuu. Ngwa ndị na-arụ ọrụ dị elu na-ejikarị akụrụngwa eme ihe nke ọma ma si otú a na-ejere ndị ọrụ na-emekọ ihe ọnụ na sava ahụ nke ọma, na-ebelata ọnụ ahịa.

Ọrụ CPU na I/O

N'ikpeazụ, na ịgbakọ, enwere ụdị ọrụ abụọ nwere ike ime mgbe niile: maka I/O na CPU. Ịnata arịrịọ site na Ịntanetị (netwọk I/O), na-enye faịlụ (netwọk na diski I/O), ịkparịta ụka na nchekwa data (netwọk na disk I/O) bụ ihe omume I/O. Ụfọdụ ajụjụ nchekwa data nwere ike ịbụ ntakịrị CPU kpụ ọkụ n'ọnụ (ịhazi, nkezi otu nde nsonaazụ, wdg). Ọtụtụ ngwa weebụ na-ejedebe site na I/O kachasị nwere ike ime, na a naghị ejikarị ihe nhazi eme ihe n'ikike zuru oke. Mgbe ị na-ahụ na ụfọdụ ọrụ I/O na-eji ọtụtụ CPU, ọ ga-abụ na ọ bụ akara ngosi nke ngwa ngwa adịghị mma. Nke a nwere ike ịpụta na akụrụngwa CPU na-ala n'iyi na njikwa usoro yana ngbanwe ọnọdụ - na nke a abaghị uru kpamkpam. Ọ bụrụ na ị na-eme ihe dị ka nhazi ihe onyonyo, ntụgharị faịlụ ọdịyo, ma ọ bụ mmụta igwe, ngwa ahụ chọrọ akụrụngwa CPU dị ike. Mana maka ọtụtụ ngwa nke a abụghị ikpe.

Mụtakwuo maka ụlọ ihe nkesa

  1. Nkebi nke Mbụ: Nrụpụta ntughari
  2. Akụkụ II. Sava ndụdụ
  3. Akụkụ III. Sava tupu ndụdụ
  4. Akụkụ IV. Sava nwere eri nke ogbugbu
  5. Nkebi V. Sava emechara nke ọma
  6. Akụkụ VI. Ihe owuwu dabere na Pol
  7. Akụkụ VII. Epoll dabeere ije

isi: www.habr.com

Tinye a comment