Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa

Yanzu ana amfani da aikace-aikacen yanar gizo a ko'ina, kuma a cikin duk ka'idojin sufuri, HTTP ta mamaye kaso na zaki. Lokacin nazarin abubuwan haɓaka aikace-aikacen yanar gizo, yawancin mutane suna ba da kulawa kaɗan ga tsarin aiki inda waɗannan aikace-aikacen ke gudana. Rabewar ci gaba (Dev) da ayyuka (Ops) kawai ya sa lamarin ya yi muni. Amma tare da haɓakar al'adun DevOps, masu haɓakawa suna da alhakin gudanar da aikace-aikacen su a cikin gajimare, don haka yana da matukar amfani a gare su su fahimci bayan tsarin aiki. Wannan yana da amfani musamman idan kuna ƙoƙarin tura tsarin don dubbai ko dubun dubatar haɗin kai lokaci guda.

Iyakoki a cikin ayyukan gidan yanar gizo sun yi kama da waɗanda ke cikin wasu aikace-aikacen. Ko masu daidaita ma'aunin nauyi ne ko sabar bayanai, duk waɗannan aikace-aikacen suna da irin wannan matsala a cikin yanayi mai girma. Fahimtar waɗannan ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun ƙayyadaddun nasara zai taimaka muku kimanta aiki da ƙimar aikace-aikacen yanar gizon ku.

Ina rubuta wannan jerin labaran ne domin amsa tambayoyi daga matasa masu haɓakawa waɗanda ke son zama ƙwararrun masanan tsarin gine-gine. Ba shi yiwuwa a fahimci dabarun inganta aikace-aikacen Linux a sarari ba tare da nutsewa cikin tushen yadda suke aiki a matakin tsarin aiki ba. Ko da yake akwai nau'ikan aikace-aikace da yawa, a cikin wannan silsilar ina so in bincika aikace-aikacen yanar gizo maimakon aikace-aikacen tebur kamar browser ko editan rubutu. An yi nufin wannan kayan don masu haɓakawa da masu gine-gine waɗanda ke son fahimtar yadda shirye-shiryen Linux ko Unix ke aiki da yadda ake tsara su don babban aiki.

Linux da dakin uwar garke tsarin aiki, kuma galibi aikace-aikacenku suna gudana akan wannan OS. Ko da yake na ce "Linux", mafi yawan lokaci za ku iya ɗauka lafiya cewa ina nufin duk tsarin aiki kamar Unix gabaɗaya. Duk da haka, ban gwada lambar da ke tare da wasu tsarin ba. Don haka, idan kuna sha'awar FreeBSD ko OpenBSD, sakamakonku na iya bambanta. Lokacin da na gwada wani abu na musamman Linux, na nuna shi.

Yayin da zaku iya amfani da wannan ilimin don gina ƙa'idar daga karce kuma za'a inganta shi daidai, yana da kyau kada kuyi hakan. Idan ka rubuta sabon sabar gidan yanar gizo a C ko C++ don aikace-aikacen kasuwancin ƙungiyar ku, wannan na iya zama ranar ƙarshe ta aikinku. Koyaya, sanin tsarin waɗannan aikace-aikacen zai taimaka wajen zaɓar shirye-shiryen da ake da su. Za ku iya kwatanta tsarin tushen tsari tare da tsarin tushen zare da kuma na tushen taron. Za ku fahimta kuma ku fahimci dalilin da yasa Nginx ke yin aiki mafi kyau fiye da Apache httpd, dalilin da yasa aikace-aikacen Python tushen Tornado zai iya ba da ƙarin masu amfani idan aka kwatanta da aikace-aikacen Python na tushen Django.

ZeroHTTPd: Kayan Aikin Koyo

ZeroHTTPd sabar gidan yanar gizo ce da na rubuta daga karce a cikin C azaman kayan aikin koyarwa. Ba shi da abin dogaro na waje, gami da samun dama ga Redis. Muna gudanar da namu hanyoyin Redis. Duba ƙasa don ƙarin bayani.

Kodayake zamu iya tattauna ka'idar a tsayi, babu wani abu mafi kyau fiye da rubuta lambar, gudanar da shi, da kwatanta duk gine-ginen uwar garken da juna. Wannan ita ce hanya mafi bayyananna. Don haka, za mu rubuta sabar gidan yanar gizo mai sauƙi na ZeroHTTPd ta amfani da kowane samfuri: tushen tsari, tushen zaren, da tushen taron. Bari mu bincika kowane ɗayan waɗannan sabobin mu ga yadda suke aiki idan aka kwatanta da juna. Ana aiwatar da ZeroHTTPd a cikin fayil ɗin C guda ɗaya. Tushen tushen taron ya haɗa da wuta, babban aiwatar da tebur na hash wanda ya zo a cikin fayil na kai guda ɗaya. A wasu lokuta, babu abin dogaro, don kada a dagula aikin.

Akwai maganganu da yawa a cikin lambar don taimaka muku fahimta. Kasancewar sabar gidan yanar gizo mai sauƙi a cikin ƴan layukan lamba, ZeroHTTPd kuma ƙaramin tsari ne don haɓaka gidan yanar gizo. Yana da ƙayyadaddun ayyuka, amma yana da ikon yin hidima ga fayilolin tsaye da shafuka masu “tsauri” masu sauƙi. Dole ne in faɗi cewa ZeroHTTPd yana da kyau don koyon yadda ake ƙirƙirar aikace-aikacen Linux masu inganci. Gabaɗaya, yawancin ayyukan gidan yanar gizo suna jiran buƙatu, bincika su kuma sarrafa su. Wannan shine ainihin abin da ZeroHTTPd zai yi. Wannan kayan aiki ne don koyo, ba samarwa ba. Ba shi da kyau a sarrafa kuskure kuma ba shi yiwuwa a yi alfahari da mafi kyawun ayyukan tsaro (oh yeah, na yi amfani da shi strcpy) ko dabarun wayo na harshen C. Amma ina fatan ya yi aikinsa sosai.

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa
Shafin gida na ZeroHTTPd. Yana iya fitar da nau'ikan fayil daban-daban gami da hotuna

Aikace-aikacen Littafin Baƙi

Aikace-aikacen gidan yanar gizo na zamani yawanci ba su iyakance ga fayilolin tsaye ba. Suna da hadaddun mu'amala tare da ma'ajin bayanai daban-daban, caches, da sauransu. Don haka za mu ƙirƙiri aikace-aikacen yanar gizo mai sauƙi mai suna "Littafin Baƙi" inda baƙi ke barin abubuwan shiga ƙarƙashin sunayensu. Littafin baƙo yana adana abubuwan da aka bari a baya. Hakanan akwai ma'aunin baƙo a ƙasan shafin.

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa
Aikace-aikacen yanar gizo "Littafin Baƙi" ZeroHTTPd

Ana adana lissafin baƙo da shigarwar littafin baƙo a cikin Redis. Don sadarwa tare da Redis, ana aiwatar da nasu hanyoyin; ba su dogara da ɗakin karatu na waje ba. Ba ni da babban fan na mirgine fitar da homebrew code lokacin da akwai jama'a da kuma ingantattun mafita. Amma manufar ZeroHTTPd shine don nazarin aikin Linux da samun damar yin amfani da sabis na waje, yayin da hidimar buƙatun HTTP yana da tasiri mai mahimmanci. Dole ne mu sarrafa cikakken sadarwa tare da Redis a cikin kowane gine-ginen uwar garken mu. A wasu gine-gine muna amfani da toshe kira, a wasu kuma muna amfani da hanyoyin tushen aukuwa. Yin amfani da ɗakin karatu na abokin ciniki na Redis na waje ba zai samar da wannan iko ba. Bugu da ƙari, ƙaramin abokin cinikinmu na Redis yana yin ƴan ayyuka ne kawai (samun, saiti, da haɓaka maɓalli; samu da haɗawa zuwa tsararru). Bugu da kari, ka'idar Redis tana da matukar kyau da sauki. Ba kwa buƙatar koya ta musamman. Gaskiyar cewa ka'idar tana yin duk aikin a cikin kusan layukan lamba ɗari yana nuna yadda aka yi tunani sosai.

Hoto na gaba yana nuna abin da aikace-aikacen ke yi lokacin da abokin ciniki (browser) ya buƙaci /guestbookURL.

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa
Yadda aikace-aikacen littafin baƙo ke aiki

Lokacin da ake buƙatar fitar da shafin littafin baƙo, akwai kira ɗaya zuwa tsarin fayil don karanta samfurin cikin ƙwaƙwalwar ajiya da kiran cibiyar sadarwa guda uku zuwa Redis. Fayil ɗin samfuri ya ƙunshi mafi yawan abubuwan HTML don shafin a hoton da ke sama. Hakanan akwai masu riƙe wuri na musamman don ɓangaren abubuwan da ke da ƙarfi: posts da ma'aunin baƙo. Muna karɓar su daga Redis, saka su a cikin shafin kuma samar da abokin ciniki cikakken abun ciki. Za a iya guje wa kira na uku zuwa Redis saboda Redis yana dawo da sabuwar ƙimar maɓalli lokacin da aka ƙara. Koyaya, don uwar garken mu, wanda ke da tsarin gine-gine na tushen taron asynchronous, yawancin kiran cibiyar sadarwa gwaji ne mai kyau don dalilai na koyo. Don haka muna watsar da ƙimar dawowar Redis na adadin baƙi kuma muna tambayar ta tare da kiran daban.

Gine-ginen uwar garken ZeroHTTPd

Muna gina nau'ikan ZeroHTTPd guda bakwai tare da ayyuka iri ɗaya amma gine-gine daban-daban:

  • Maimaituwa
  • uwar garken cokali mai yatsa (tsari ɗaya na yaro akan buƙata)
  • Pre-fork uwar garken (pre-forking na matakai)
  • Uwar garken tare da zaren aiwatarwa (zare ɗaya akan buƙata)
  • Uwar garken tare da ƙirƙirar zaren riga-kafi
  • tushen gine-gine poll()
  • tushen gine-gine epoll

Muna auna aikin kowane gine-gine ta hanyar loda uwar garken tare da buƙatun HTTP. Amma idan aka kwatanta tsarin gine-gine masu kama da juna, adadin tambayoyin yana ƙaruwa. Muna gwada sau uku kuma muna lissafin matsakaici.

Hanyar gwaji

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa
Saitin gwaji na ZeroHTTPd

Yana da mahimmanci cewa lokacin gudanar da gwaje-gwaje, duk abubuwan da aka gyara ba sa aiki akan injin guda ɗaya. A wannan yanayin, OS ɗin yana haifar da ƙarin jadawali na sama kamar yadda abubuwan haɗin ke gasa don CPU. Auna tsarin aiki sama da kowane ɗayan zaɓaɓɓun gine-ginen uwar garken yana ɗaya daga cikin mahimman manufofin wannan darasi. Ƙara ƙarin masu canji zai zama illa ga tsarin. Saboda haka, saitin da ke cikin hoton da ke sama yana aiki mafi kyau.

Menene kowane ɗayan waɗannan sabobin ke yi?

  • load.unixism.net: Wannan shine inda muke gudu ab, Apache Benchmark mai amfani. Yana haifar da nauyin da ake buƙata don gwada gine-ginen uwar garken mu.
  • nginx.unixism.net: Wani lokaci muna so mu gudanar da fiye da ɗaya misali na shirin uwar garke. Don yin wannan, uwar garken Nginx tare da saitunan da suka dace suna aiki azaman ma'auni mai nauyi da ke fitowa daga ab zuwa matakan uwar garken mu.
  • zerohttpd.unixism.net: Anan muna gudanar da shirye-shiryen uwar garken mu akan gine-gine daban-daban guda bakwai, daya bayan daya.
  • redis.unixism.net: Wannan uwar garken tana gudanar da Redis daemon, inda ake adana littattafan baƙo da ƙididdiga masu ziyara.

Duk sabobin suna aiki akan ainihin processor iri ɗaya. Manufar ita ce a kimanta iyakar aikin kowane gine-gine. Tunda duk shirye-shiryen uwar garken ana gwada su akan kayan aiki iri ɗaya, wannan shine tushe don kwatanta. Saitin gwaji na ya ƙunshi sabar sabar da aka yi hayar daga Tekun Dijital.

Me muke aunawa?

Kuna iya auna ma'auni daban-daban. Muna kimanta aikin kowane gine-gine a cikin ƙayyadaddun da aka ba ta ta hanyar loda sabobin tare da buƙatun a matakai daban-daban na daidaici: nauyin yana girma daga 20 zuwa 15 masu amfani na lokaci guda.

Sakamakon gwaji

Jadawalin da ke gaba yana nuna aikin sabobin akan gine-gine daban-daban a matakai daban-daban na daidaici. y-axis shine adadin buƙatun daƙiƙa guda, x-axis yana da haɗin kai.

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa

Ayyukan aikace-aikacen cibiyar sadarwar Linux. Gabatarwa

A ƙasa akwai tebur tare da sakamakon.

buƙatun daƙiƙa guda

daidaituwa
maimaitawa
cokali mai yatsa
kafin cokali mai yatsa
yawo
pre-streaming
zabe
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
babban bazawa
2138

5000
-
babban bazawa
1600
1100
2519
-
2235

8000
-
-
1200
babban bazawa
2451
-
2100

10
-
-
babban bazawa
-
2200
-
2200

11
-
-
-
-
2200
-
2122

12
-
-
-
-
970
-
1958

13
-
-
-
-
730
-
1897

14
-
-
-
-
590
-
1466

15
-
-
-
-
532
-
1281

Daga jadawali da tebur a bayyane yake cewa sama da buƙatun lokaci guda 8000 muna da 'yan wasa biyu kawai da suka rage: pre-fork da epoll. Yayin da nauyin ya ƙaru, uwar garken da ke tushen zabe yana yin muni fiye da na gudana. Tsarin gine-ginen da aka riga aka yi zaren ya cancanci fafatawa a gasa, shaida ga yadda kernel Linux ke tsara adadi mai yawa na zaren.

Lambar Tushen ZeroHTTPd

Lambar Tushen ZeroHTTPd a nan. Akwai keɓaɓɓen jagora ga kowane gine-gine.

ZeroHTTPd │ ├── 01_iterative │ ├── main.c ├── 02_forking │ ├── main.c ├── 03_preforking—─ 04_ zaren │ ├── main.c ├── 05_prethreading │ ├── main.c ├── 06_poll │ ├── main.c ├── index .html │ └── tux png └── samfuri └── littafin baki └── index.html

Baya ga kundayen adireshi bakwai na duk gine-gine, akwai ƙarin biyu a cikin babban kundin adireshi: jama'a da samfuri. Na farko ya ƙunshi fayil ɗin index.html da hoton daga hoton farko. Kuna iya sanya wasu fayiloli da manyan fayiloli a wurin, kuma ZeroHTTPd yakamata yayi hidimar waɗancan fayilolin tsaye ba tare da wata matsala ba. Idan hanyar da ke cikin burauzar ta yi daidai da hanyar da ke cikin babban fayil ɗin jama'a, to, ZeroHTTPd yana neman fayil ɗin index.html a cikin wannan kundin adireshi. Abubuwan da ke cikin littafin baƙo an ƙirƙira su da ƙarfi. Yana da shafin gida kawai, kuma abun cikin sa yana dogara ne akan fayil ɗin 'samfurin/bookbook/index.html'. ZeroHTTPd a sauƙaƙe yana ƙara shafuka masu ƙarfi don haɓakawa. Manufar ita ce masu amfani za su iya ƙara samfuri zuwa wannan jagorar kuma su tsawaita ZeroHTTPd kamar yadda ake buƙata.

Don gina duk sabar bakwai, gudu make all daga babban kundin adireshi - kuma duk abubuwan da aka gina za su bayyana a cikin wannan kundin adireshi. Fayilolin da za a iya aiwatarwa suna neman jama'a da kundayen adireshi a cikin kundin adireshi wanda daga ciki aka ƙaddamar da su.

Linux API

Ba kwa buƙatar ku ƙware sosai a cikin Linux API don fahimtar bayanan da ke cikin wannan jerin labarin. Duk da haka, ina ba da shawarar karanta ƙarin akan wannan batu; akwai albarkatun tunani da yawa akan Intanet. Kodayake za mu taɓa nau'ikan APIs na Linux da yawa, za mu fi mayar da hankali kan matakai, zaren, abubuwan da suka faru, da tari na cibiyar sadarwa. Baya ga littattafai da labarai game da Linux API, Ina kuma ba da shawarar karanta mana don kiran tsarin da ayyukan ɗakin karatu da aka yi amfani da su.

Performance da scalability

Ɗaya daga cikin bayanin kula game da aiki da scalability. A ka’ida, babu wata alaka a tsakaninsu. Kuna iya samun sabis ɗin gidan yanar gizo wanda ke aiki sosai, tare da lokacin amsawa na ƴan millise seconds, amma baya girma kwata-kwata. Hakanan, ana iya samun aikace-aikacen gidan yanar gizo mara kyau wanda ke ɗaukar ƴan daƙiƙa kaɗan don amsawa, amma yana yin ma'auni da dubun don sarrafa dubun dubatar masu amfani a lokaci guda. Duk da haka, haɗuwa da babban aiki da haɓakawa shine haɗuwa mai ƙarfi sosai. Aikace-aikace masu girma gabaɗaya suna amfani da albarkatu kaɗan kuma don haka da kyau suna ba da ƙarin masu amfani a lokaci guda akan sabar, rage farashi.

Ayyukan CPU da I/O

A ƙarshe, a cikin ƙididdiga koyaushe akwai nau'ikan ayyuka guda biyu masu yiwuwa: na I/O da CPU. Karɓar buƙatun akan Intanet (cibiyar sadarwa I/O), hidimar fayiloli (cibiyar sadarwa da faifai I/O), sadarwa tare da bayanai (cibiyar sadarwa da faifai I/O) duk ayyukan I/O ne. Wasu tambayoyin bayanai na iya zama ɗan ƙarfin CPU (rarewa, matsakaicin sakamako miliyan, da sauransu). Yawancin aikace-aikacen yanar gizo ana iyakance su da matsakaicin yuwuwar I/O, kuma ba a cika yin amfani da na'ura mai sarrafawa ba a cikakken iya aiki. Lokacin da kuka ga cewa wasu ayyuka na I/O suna amfani da CPU da yawa, wataƙila alama ce ta tsarin gine-ginen aikace-aikace mara kyau. Wannan na iya nufin cewa albarkatun CPU suna ɓarna akan sarrafa tsari da sauya mahallin - kuma wannan ba shi da amfani gaba ɗaya. Idan kuna yin wani abu kamar sarrafa hoto, sauya fayilolin mai jiwuwa, ko koyon injin, to aikace-aikacen yana buƙatar albarkatun CPU masu ƙarfi. Amma ga yawancin aikace-aikacen wannan ba haka lamarin yake ba.

Ƙara koyo game da gine-ginen uwar garken

  1. Sashe na I: Tsarin Gine-gine na Iterative
  2. Kashi na II. Sabbin cokali mai yatsa
  3. Kashi na III. Pre-fork sabobin
  4. Kashi na IV. Sabar da zaren aiwatarwa
  5. Sashe na V. Sabar da aka riga aka yi
  6. Kashi na VI. Gine-gine na tushen Pol
  7. Kashi na VII. epoll-tushen gine-gine

source: www.habr.com

Add a comment