Coileanadh aplacaid lìonra Linux. Ro-ràdh

Tha tagraidhean lìn a-nis air an cleachdadh anns a h-uile àite, agus am measg a h-uile protocol còmhdhail, tha HTTP a ’gabhail thairis cuibhreann an leòmhann. Nuair a bhios iad a’ sgrùdadh nuances ann an leasachadh tagradh lìn, chan eil a’ mhòr-chuid a’ toirt mòran aire don t-siostam obrachaidh far a bheil na tagraidhean sin a’ ruith. Cha do rinn dealachadh leasachadh (Dev) agus obrachaidhean (Ops) ach an suidheachadh nas miosa. Ach le àrdachadh cultar DevOps, tha luchd-leasachaidh a’ fàs cunntachail airson na tagraidhean aca a ruith san sgòth, agus mar sin tha e glè fheumail dhaibh eòlas fhaighinn air cùl-raon an t-siostaim obrachaidh. Tha seo gu sònraichte feumail ma tha thu a’ feuchainn ri siostam a chleachdadh airson mìltean no deichean mhìltean de cheanglaichean aig an aon àm.

Tha na crìochan ann an seirbheisean lìn glè choltach ris an fheadhainn ann an tagraidhean eile. Ge bith an e luchd-cothromachaidh luchdan no frithealaichean stòr-dàta a th’ ann, tha duilgheadasan co-chosmhail aig na tagraidhean sin uile ann an àrainneachd àrd-choileanaidh. Cuidichidh tu le bhith a’ tuigsinn nan crìochan bunaiteach sin agus mar a gheibh thu thairis orra san fharsaingeachd thu gus coileanadh agus scalability nan tagraidhean lìn agad a mheasadh.

Tha mi a’ sgrìobhadh an t-sreath artaigilean seo mar fhreagairt do cheistean bho luchd-leasachaidh òga a tha airson a bhith nan ailtirean siostaman fiosraichte. Tha e do-dhèanta dòighean optimization tagradh Linux a thuigsinn gu soilleir gun a bhith a’ dàibheadh ​​​​a-steach do bhunaitean mar a tha iad ag obair aig ìre an t-siostaim obrachaidh. Ged a tha iomadh seòrsa tagradh ann, san t-sreath seo tha mi airson sgrùdadh a dhèanamh air tagraidhean stèidhichte air an lìon seach tagraidhean deasg leithid brobhsair no deasaiche teacsa. Tha an stuth seo airson luchd-leasachaidh agus ailtirean a tha airson tuigsinn mar a tha prògraman Linux no Unix ag obair agus mar a chuireas iad structar orra airson àrd-choileanadh.

Tha Linux seòmar frithealaiche siostam-obrachaidh, agus mar as trice bidh na tagraidhean agad a’ ruith air an OS seo. Ged a tha mi ag ràdh "Linux", a 'mhòr-chuid den ùine faodaidh tu gabhail ris gu sàbhailte gu bheil mi a' ciallachadh a h-uile siostam obrachaidh coltach ri Unix san fharsaingeachd. Ach, cha do rinn mi deuchainn air a’ chòd a tha na chois air siostaman eile. Mar sin, ma tha ùidh agad ann an FreeBSD no OpenBSD, faodaidh na toraidhean agad a bhith eadar-dhealaichte. Nuair a dh'fheuchas mi rudeigin a tha sònraichte do Linux, tha mi ga chomharrachadh.

Fhad ‘s as urrainn dhut an t-eòlas seo a chleachdadh gus app a thogail bhon fhìor thoiseach agus gum bi e air a bharrrachadh gu foirfe, tha e nas fheàrr gun a bhith a’ dèanamh sin. Ma sgrìobhas tu frithealaiche lìn ùr ann an C no C ++ airson tagradh gnìomhachais na buidhne agad, is dòcha gur e seo an latha mu dheireadh agad san obair. Ach, cuidichidh eòlas air structar nan tagraidhean sin ann a bhith a’ taghadh phrògraman a th’ ann mar-thà. Bidh e comasach dhut coimeas a dhèanamh eadar siostaman stèidhichte air pròiseas agus siostaman stèidhichte air snàithlean a bharrachd air feadhainn a tha stèidhichte air tachartas. Tuigidh agus tuigidh tu carson a tha Nginx a’ coileanadh nas fheàrr na Apache httpd, carson as urrainn do thagradh Python stèidhichte air Tornado barrachd luchd-cleachdaidh a fhrithealadh an taca ri tagradh Python stèidhichte air Django.

ZeroHTTPd: Inneal Ionnsachaidh

ZeroHTTPd na fhrithealaiche lìn a sgrìobh mi bhon toiseach ann an C mar inneal teagaisg. Chan eil eisimeileachd taobh a-muigh aige, a’ toirt a-steach ruigsinneachd gu Redis. Bidh sinn a’ ruith ar modhan Redis fhèin. Faic gu h-ìosal airson tuilleadh fiosrachaidh.

Ged a b’ urrainn dhuinn beachdachadh fada air teòiridh, chan eil dad nas fheàrr na bhith a’ sgrìobhadh còd, ga ruith, agus a’ dèanamh coimeas eadar ailtireachd an fhrithealaiche agus a chèile. Is e seo an dòigh as follaisiche. Mar sin, sgrìobhaidh sinn frithealaiche lìn ZeroHTTPd sìmplidh a’ cleachdadh gach modail: stèidhichte air pròiseas, stèidhichte air snàithlean, agus stèidhichte air tachartas. Nach toir sinn sùil air gach aon de na frithealaichean sin agus faic mar a bhios iad a’ coileanadh an coimeas ri chèile. Tha ZeroHTTPd air a chuir an gnìomh ann am faidhle singilte C. Tha am frithealaiche stèidhichte air tachartas a’ toirt a-steach uthash, buileachadh clàr hash sgoinneil a thig a-steach ann am faidhle cinn singilte. Ann an cùisean eile, chan eil eisimeileachd ann, gus nach bi am pròiseact duilich.

Tha tòrr bheachdan anns a’ chòd gus do chuideachadh le bhith tuigsinn. Le bhith nad fhrithealaiche lìn sìmplidh ann am beagan loidhnichean de chòd, tha ZeroHTTPd cuideachd na fhrèam beag airson leasachadh lìn. Tha comas-gnìomh cuibhrichte aige, ach tha e comasach dha faidhlichean statach agus duilleagan “fiùghantach” a tha gu math sìmplidh a fhrithealadh. Feumaidh mi a ràdh gu bheil ZeroHTTPd math airson ionnsachadh mar a chruthaicheas tu tagraidhean Linux àrd-choileanaidh. San fharsaingeachd, bidh a’ mhòr-chuid de sheirbheisean lìn a’ feitheamh ri iarrtasan, gan sgrùdadh agus gan giullachd. Is e seo dìreach a nì ZeroHTTPd. Is e inneal ionnsachaidh a tha seo, chan e cinneasachadh. Chan eil e math air làimhseachadh mhearachdan agus chan eil e coltach gum bi na cleachdaidhean tèarainteachd as fheàrr ann (oh seadh, chleachd mi strcpy) no cleasan glic na cànain C. Ach tha mi an dòchas gun dèan e an obair aige gu math.

Coileanadh aplacaid lìonra Linux. Ro-ràdh
ZeroHTTPd duilleag dachaigh. Faodaidh e diofar sheòrsaichean faidhle a thoirt a-mach a’ toirt a-steach ìomhaighean

Iarrtas Leabhar aoigheachd

Mar as trice chan eil tagraidhean lìn ùr-nodha cuingealaichte ri faidhlichean statach. Tha eadar-obrachadh iom-fhillte aca le diofar stòran-dàta, caches, msaa. Mar sin cruthaichidh sinn tagradh lìn sìmplidh ris an canar "Guest Book" far am fàg luchd-tadhail inntrigidhean fo an ainmean. Bidh an leabhar aoighean a’ stòradh inntrigidhean a chaidh fhàgail na bu thràithe. Tha cuntair luchd-tadhail aig bonn na duilleige cuideachd.

Coileanadh aplacaid lìonra Linux. Ro-ràdh
Iarrtas lìn “Guest Book” ZeroHTTPd

Tha clàr an neach-tadhail agus leabhraichean aoighean air an stòradh ann an Redis. Airson conaltradh le Redis, tha na modhan-obrach fhèin air an cur an gnìomh; chan eil iad an urra ris an leabharlann a-muigh. Chan eil mi dèidheil air a bhith a’ sgaoileadh còd homebrew nuair a bhios fuasglaidhean rim faighinn gu poblach agus air an deagh dhearbhadh. Ach is e adhbhar ZeroHTTPd sgrùdadh a dhèanamh air coileanadh Linux agus ruigsinneachd air seirbheisean taobh a-muigh, fhad ‘s a tha frithealadh iarrtasan HTTP a’ toirt buaidh mhòr air coileanadh. Feumaidh sinn làn smachd a chumail air conaltradh le Redis anns gach ailtireachd frithealaiche againn. Ann an cuid de dh’ ailtireachd bidh sinn a’ cleachdadh gairmean bacaidh, ann an cuid eile bidh sinn a’ cleachdadh modhan-obrach stèidhichte air tachartas. Cha toir cleachdadh leabharlann teachdaiche Redis taobh a-muigh an smachd seo. A bharrachd air an sin, chan eil an neach-dèiligidh beag Redis againn a’ coileanadh ach beagan dhleastanasan (faighinn, suidheachadh, agus àrdachadh iuchair; faighinn agus cuir ri raon). A bharrachd air an sin, tha protocol Redis air leth eireachdail agus sìmplidh. Chan fheum thu eadhon a theagasg gu sònraichte. Tha an dearbh fhìrinn gu bheil am protocol a’ dèanamh a h-uile obair ann an timcheall air ceud loidhne de chòd a’ sealltainn cho math sa tha e air a smaoineachadh.

Tha am figear a leanas a’ sealltainn na bhios an tagradh a’ dèanamh nuair a dh’ iarras an neach-dèiligidh (brabhsair). /guestbookURL.

Coileanadh aplacaid lìonra Linux. Ro-ràdh
Mar a tha an tagradh leabhar aoighean ag obair

Nuair a dh’ fheumar duilleag leabhar aoighean a chuir a-mach, tha aon ghairm chun t-siostam faidhle gus an teamplaid a leughadh gu cuimhne agus trì fiosan lìonra gu Redis. Anns an fhaidhle teamplaid tha a’ mhòr-chuid de shusbaint HTML airson na duilleige san dealbh gu h-àrd. Tha luchd-àite sònraichte ann cuideachd airson pàirt fiùghantach an t-susbaint: puist agus cuntair luchd-tadhail. Bidh sinn gan faighinn bho Redis, gan cuir a-steach don duilleag agus a’ toirt susbaint làn-chruth don neach-dèiligidh. Faodar an treas gairm gu Redis a sheachnadh leis gu bheil Redis a’ tilleadh a’ phrìomh luach ùr nuair a thèid a mheudachadh. Ach, airson an t-seirbheisiche againn, aig a bheil ailtireachd asyncronach stèidhichte air tachartas, tha tòrr fiosan lìonra nan deagh dheuchainn airson adhbharan ionnsachaidh. Mar sin bidh sinn a’ tilgeadh air falbh luach tilleadh Redis den àireamh luchd-tadhail agus ga cheasnachadh le gairm air leth.

Ailtireachd an fhrithealaiche ZeroHTTPd

Tha sinn a’ togail seachd dreachan de ZeroHTTPd leis an aon ghnìomhachd ach ailtireachd eadar-dhealaichte:

  • Aithriseach
  • Frithealaiche forc (aon phròiseas leanabh gach iarrtas)
  • Frith-fhrithealaiche ro-forc (ro-làimh phròiseasan)
  • Frithealaiche le snàithleanan cur gu bàs (aon snàithlean gach iarrtas)
  • Frithealaiche le cruthachadh ro-snàithlean
  • Stèidhichte air ailtireachd poll()
  • Stèidhichte air ailtireachd epoll

Bidh sinn a’ tomhas coileanadh gach ailtireachd le bhith a’ luchdachadh an fhrithealaiche le iarrtasan HTTP. Ach nuair a thathar a’ dèanamh coimeas eadar ailtireachd fìor cho-shìnte, tha an àireamh de cheistean a’ dol am meud. Bidh sinn a’ dèanamh deuchainn trì tursan agus a’ tomhas a’ chuibheasachd.

Dòigh-obrach deuchainn

Coileanadh aplacaid lìonra Linux. Ro-ràdh
Suidheachadh deuchainn luchd ZeroHTTPd

Tha e cudromach nuair a bhios tu a’ ruith dheuchainnean, nach bi a h-uile pàirt a’ ruith air an aon inneal. Anns a 'chùis seo, bidh an OS a' toirt a-steach clàr-ama a bharrachd mar a bhios co-phàirtean a 'farpais airson CPU. Is e a bhith a’ tomhas an t-siostam obrachaidh os cionn gach aon de na h-ailtirean frithealaiche taghte aon de na h-amasan as cudromaiche san eacarsaich seo. Le bhith a’ cur barrachd chaochladairean a-steach nì sin cron air a’ phròiseas. Mar sin, tha an suidheachadh san dealbh gu h-àrd ag obair as fheàrr.

Dè bhios gach aon de na frithealaichean sin a’ dèanamh?

  • load.unixism.net: Seo far a bheil sinn a’ ruith ab, goireas comharrachaidh Apache. Bidh e a’ gineadh an luchd a dh’ fheumar gus ailtireachd ar frithealaichean a dhearbhadh.
  • nginx.unixism.net: Aig amannan bidh sinn airson barrachd air aon eisimpleir de phrògram frithealaiche a ruith. Gus seo a dhèanamh, bidh am frithealaiche Nginx leis na roghainnean iomchaidh ag obair mar chothromachadh luchdan a’ tighinn bho ab gu pròiseasan an fhrithealaiche againn.
  • zerohttpd.unixism.net: An seo bidh sinn a’ ruith ar prògraman frithealaiche air seachd diofar ailtireachd, aon aig aon àm.
  • redis.unixism.net: Tha am frithealaiche seo a’ ruith an daemon Redis, far a bheil inntrigidhean leabhraichean aoighean agus cunntairean luchd-tadhail air an stòradh.

Bidh na frithealaichean uile a’ ruith air an aon chridhe pròiseasar. Is e am beachd measadh a dhèanamh air coileanadh as àirde gach ailtireachd. Leis gu bheil a h-uile prògram frithealaiche air a dhearbhadh air an aon bhathar-cruaidh, is e bun-loidhne a tha seo airson coimeas. Anns an t-suidheachadh deuchainn agam tha frithealaichean brìgheil air màl bho Digital Ocean.

Dè tha sinn a’ tomhas?

Faodaidh tu diofar chomharran a thomhas. Bidh sinn a’ measadh coileanadh gach ailtireachd ann an rèiteachadh sònraichte le bhith a’ luchdachadh na frithealaichean le iarrtasan aig diofar ìrean co-shìnte: bidh an luchd a’ fàs bho 20 gu 15 neach-cleachdaidh co-aontach.

Toraidhean deuchainn

Tha an clàr a leanas a’ sealltainn coileanadh luchd-frithealaidh air diofar ailtirean aig diofar ìrean co-shìnte. Is e an y-axis an àireamh de dh'iarrtasan gach diog, is e ceanglaichean co-shìnte an x-axis.

Coileanadh aplacaid lìonra Linux. Ro-ràdh

Coileanadh aplacaid lìonra Linux. Ro-ràdh

Coileanadh aplacaid lìonra Linux. Ro-ràdh

Gu h-ìosal tha clàr leis na toraidhean.

iarrtasan gach diog

co-shìnteachd
ath-aithriseach
forc
ro-fhoc
sruthadh
ro-shruth
bhòtadh
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
sgaoileadh mòr
2138

5000
-
sgaoileadh mòr
1600
1100
2519
-
2235

8000
-
-
1200
sgaoileadh mòr
2451
-
2100

10
-
-
sgaoileadh mòr
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Bhon ghraf agus bhon chlàr chì sinn gu bheil còrr air 8000 iarrtas aig an aon àm nach eil againn ach dà chluicheadair air fhàgail: pre-fork agus epoll. Mar a bhios an luchd a’ dol am meud, bidh frithealaiche stèidhichte air cunntas-bheachd a’ coileanadh nas miosa na frithealaiche sruthadh. Tha an ailtireachd ro-chruthachadh snàithlean na cho-fharpaiseach airidh air a dhol an sàs, na theisteanas air cho math sa tha an kernel Linux a’ clàradh àireamhan mòra de snàithleanan.

ZeroHTTPd Source Code

ZeroHTTPd Source Code an seo. Tha eòlaire air leth ann airson gach ailtireachd.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking │ ─ ─ ─ 04_ snàthadh │ ├── main.c ├── 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── 07_epoll │ └ ─ ─ main.c ├ ─ ├ ├ faidhle ├ ─ ─ ─ ─ ─ main.c ├ ─ ├ faidhle ── clàr-amais .html │ └── tux .png └── teamplaidean └── leabhar aoighean └── index.html

A bharrachd air seachd clàran airson gach ailtireachd, tha dhà eile anns an eòlaire àrd-ìre: poblach agus teamplaidean. Anns a’ chiad fhear tha am faidhle index.html agus an dealbh bhon chiad dealbh-sgrìn. Faodaidh tu faidhlichean agus pasganan eile a chuir ann, agus bu chòir do ZeroHTTPd na faidhlichean statach sin a fhrithealadh gun duilgheadas sam bith. Ma tha an t-slighe sa bhrobhsair a’ freagairt ris an t-slighe sa phasgan phoblach, bidh ZeroHTTPd a’ coimhead airson am faidhle index.html san eòlaire seo. Tha susbaint an leabhair aoighean air a chruthachadh gu dinamach. Chan eil aige ach duilleag-dachaigh, agus tha a shusbaint stèidhichte air an fhaidhle 'templates/guestbook/index.html'. Bidh ZeroHTTPd gu furasta a’ cur duilleagan fiùghantach airson leudachadh. Is e am beachd gum faod luchd-cleachdaidh teamplaidean a chuir ris an eòlaire seo agus ZeroHTTPd a leudachadh mar a dh’ fheumar.

Gus na seachd frithealaichean a thogail, ruith make all bhon eòlaire àrd-ìre - agus nochdaidh a h-uile togail san eòlaire seo. Bidh faidhlichean so-ghnìomhaichte a’ coimhead airson clàran poblach is teamplaidean anns an eòlaire às an tèid iad a chuir air bhog.

Linux API

Chan fheum thu a bhith eòlach air Linux API gus am fiosrachadh san t-sreath artaigil seo a thuigsinn. Ach, tha mi a’ moladh barrachd a leughadh air a’ chuspair seo; tha mòran ghoireasan fiosrachaidh air an eadar-lìn. Ged a bheir sinn suathadh air grunn roinnean de Linux APIs, bidh ar fòcas gu sònraichte air pròiseasan, snàithleanan, tachartasan, agus stac an lìonraidh. A bharrachd air leabhraichean agus artaigilean mun Linux API, tha mi cuideachd a’ moladh mana a leughadh airson fiosan siostam agus gnìomhan leabharlainn a thathar a’ cleachdadh.

Coileanadh agus Scalability

Aon nota mu choileanadh agus scalability. Gu teòiridheach, chan eil ceangal eadar iad. Faodaidh seirbheis lìn a bhith agad a dh’ obraicheas gu fìor mhath, le ùine freagairt beagan mhilleanan-tomhais, ach chan eil e a’ sgèile idir. Mar an ceudna, is dòcha gu bheil tagradh lìn nach eil a’ coileanadh gu dona a bheir beagan dhiog airson freagairt, ach bidh e a’ sgèile le deichean gus na deichean de mhìltean de luchd-cleachdaidh co-aontach a làimhseachadh. Ach, tha an cothlamadh de àrd-choileanadh agus scalability na mheasgachadh fìor chumhachdach. Mar as trice bidh tagraidhean àrd-choileanaidh a’ cleachdadh ghoireasan gu gann agus mar sin a’ toirt seirbheis èifeachdach do luchd-cleachdaidh co-aontach air an fhrithealaiche, a’ lughdachadh chosgaisean.

gnìomhan CPU agus I/O

Mu dheireadh, ann an coimpiutaireachd tha an-còmhnaidh dà sheòrsa gnìomh comasach: airson I / O agus CPU. Tha a bhith a’ faighinn iarrtasan thairis air an eadar-lìn (lìonra I/O), a’ frithealadh fhaidhlichean (lìonra agus diosc I/O), a’ conaltradh ris an stòr-dàta (lìonra agus diosc I/O) uile nan gnìomhan I/O. Faodaidh cuid de cheistean stòr-dàta a bhith beagan CPU dian (rèiteach, cuibheasachd millean toradh, msaa). Tha a’ mhòr-chuid de thagraidhean lìn air an cuingealachadh leis an I / O as àirde a tha comasach, agus is ann ainneamh a bhios am pròiseasar air a chleachdadh aig làn chomas. Nuair a chì thu gu bheil cuid de dh ’obair I / O a’ cleachdadh tòrr CPU, tha e glè choltach gu bheil e na chomharradh air droch ailtireachd tagraidh. Faodaidh seo a bhith a’ ciallachadh gu bheil goireasan CPU air an caitheamh air riaghladh pròiseas agus atharrachadh co-theacsa - agus chan eil seo gu tur feumail. Ma tha thu a’ dèanamh rudeigin mar giullachd ìomhaighean, tionndadh faidhle claisneachd, no ionnsachadh inneal, feumaidh an tagradh goireasan CPU cumhachdach. Ach airson a 'mhòr-chuid de thagraidhean chan eil seo fìor.

Ionnsaich tuilleadh mu ailtireachd frithealaiche

  1. Pàirt I: Ailtireachd ath-aithriseach
  2. Pàirt II. Fork frithealaichean
  3. Pàirt III. Frithealaichean ro-forc
  4. Pàirt IV. Frithealaichean le snàithleanan cur gu bàs
  5. Pàirt V. Frithealaichean ro-snàthaichte
  6. Pàirt VI. Ailtireachd stèidhichte air Pol
  7. Pàirt VII. ailtireachd stèidhichte air epoll

Source: www.habr.com

Cuir beachd ann