Mapulogalamu amakono a intaneti nthawi zambiri samangokhala ndi mafayilo osasunthika. Amakhala ndi machitidwe ovuta ndi ma database osiyanasiyana, ma cache, ndi zina zambiri. Chifukwa chake tidzapanga tsamba losavuta lotchedwa "Guest Book" pomwe alendo amasiya zolemba pansi pa mayina awo. Mabuku a alendo amasunga zolemba zomwe zidasiyidwa kale. Palinso kauntala ya alendo pansi pa tsamba.
Webusaiti "Guest Book" ZeroHTTPd
Makauntala a alendo ndi zolemba zamabuku a alendo zimasungidwa ku Redis. Pakulumikizana ndi Redis, njira zanu zimakhazikitsidwa; sizidalira laibulale yakunja. Sindine wokonda kutulutsa kachidindo kanyumba kanyumba pomwe pali mayankho omwe amapezeka pagulu komanso oyesedwa bwino. Koma cholinga cha ZeroHTTPd ndikuphunzira momwe Linux imagwirira ntchito komanso kupeza ntchito zakunja, pomwe kutumikira zopempha za HTTP kuli ndi vuto lalikulu. Tiyenera kuwongolera kulumikizana ndi Redis muzomanga zathu zonse za seva. Muzomangamanga zina timagwiritsa ntchito mafoni oletsa, ena amagwiritsa ntchito zochitika. Kugwiritsa ntchito laibulale yamakasitomala akunja a Redis sikungapereke chiwongolero ichi. Kuphatikiza apo, kasitomala wathu wamng'ono wa Redis amangogwira ntchito zingapo (kupeza, kukhazikitsa, ndi kukulitsa kiyi; kupeza ndi kuwonjezera pagulu). Kuphatikiza apo, protocol ya Redis ndiyokongola kwambiri komanso yosavuta. Simufunikanso kuphunzitsa mwapadera. Mfundo yomwe protocol imagwira ntchito yonse pafupifupi mizere zana ya code ikuwonetsa momwe imaganiziridwa bwino.
Tsamba labukhu la alendo likayenera kuperekedwa, pali kuyimba kumodzi ku fayilo yamafayilo kuti muwerenge template mu kukumbukira ndi mafoni atatu a netiweki ku Redis. Fayilo ya template ili ndi zambiri za HTML patsamba lomwe lili pamwambapa. Palinso zosungirako zapadera za gawo losinthika la zomwe zili: ma post ndi kauntala ya alendo. Timawalandira kuchokera ku Redis, kuwayika patsamba ndikupatsa kasitomala zomwe zimapangidwa bwino. Kuyimba kwachitatu kwa Redis kutha kupewedwa chifukwa Redis imabweretsanso chinsinsi chatsopano ikawonjezeredwa. Komabe, kwa seva yathu, yomwe ili ndi zomangamanga zosagwirizana ndi zochitika, mafoni ambiri ochezera pa intaneti ndi mayeso abwino pazolinga zophunzirira. Chifukwa chake timataya mtengo wobwerera wa Redis wa kuchuluka kwa alendo ndikufunsa ndi foni yosiyana.
Zomangamanga za seva ZeroHTTPd
Tikupanga mitundu isanu ndi iwiri ya ZeroHTTPd yokhala ndi magwiridwe antchito omwewo koma mamangidwe osiyanasiyana:
Zobwerezabwereza
Seva ya Fork (njira ya mwana m'modzi pa pempho)
Pre-fork seva (pre-forking of process)
Seva yokhala ndi ulusi woyeserera (ulusi umodzi pa pempho)
Seva yokhala ndi ulusi wopangidwa kale
Zomangamanga zochokera poll()
Zomangamanga zochokera epoll
Timayesa magwiridwe antchito a kamangidwe kalikonse pokweza seva ndi zopempha za HTTP. Koma poyerekezera zomanga zofanana kwambiri, kuchuluka kwa mafunso kumawonjezeka. Timayesa katatu ndikuwerengera pafupifupi.
Njira yoyesera
Kukhazikitsa kwa kuyesa kwa ZeroHTTPd
Ndikofunikira kuti poyesa mayeso, zigawo zonse sizikuyenda pamakina amodzi. Pachifukwa ichi, OS imabweretsanso zina zowonjezera monga zigawo zimapikisana ndi CPU. Kuyeza kachitidwe kogwiritsa ntchito pamwamba pa chilichonse mwazomangamanga za seva ndi chimodzi mwazolinga zofunika kwambiri pa ntchitoyi. Kuonjezera zosintha zambiri kudzakhala kowononga ndondomekoyi. Choncho, zomwe zili pachithunzi pamwambapa zimagwira ntchito bwino.
Kodi seva iliyonse imachita chiyani?
load.unixism.net: Apa ndi pamene timathamangira ab, Apache Benchmark utility. Zimapanga katundu wofunikira kuyesa mamangidwe athu a seva.
nginx.unixism.net: Nthawi zina timafuna kuyendetsa maulendo angapo a pulogalamu ya seva. Kuti muchite izi, seva ya Nginx yokhala ndi zoikamo zoyenera imagwira ntchito ngati cholemetsa chochokera ab ku machitidwe athu a seva.
zerohttpd.unixism.net: Apa tikuyendetsa mapulogalamu athu a seva pazomanga zisanu ndi ziwiri, imodzi imodzi.
redis.unixism.net: Seva iyi imayendetsa daemon ya Redis, pomwe zolembera za alendo ndi zowerengera za alendo zimasungidwa.
Ma seva onse amayenda pa purosesa yomweyo. Lingaliro ndikuwunika momwe ntchito yomanga imagwirira ntchito. Popeza mapulogalamu onse a seva amayesedwa pa hardware yomweyo, ichi ndi chiyambi chofanizira. Kukhazikitsa kwanga koyeserera kumakhala ndi maseva enieni obwerekedwa ku Digital Ocean.
Kodi tikuyesa chiyani?
Mukhoza kuyeza zizindikiro zosiyanasiyana. Timayesa magwiridwe antchito a zomangamanga zilizonse pakukonza uku pokweza ma seva ndi zopempha pamagawo osiyanasiyana ofananira: katunduyo amakula kuchokera ku 20 mpaka 15 ogwiritsa ntchito nthawi imodzi.
Zotsatira zakuyesa
Tchati chotsatirachi chikuwonetsa momwe ma seva amagwirira ntchito pamapangidwe osiyanasiyana pamagawo osiyanasiyana ofananira. Y-axis ndi kuchuluka kwa zopempha pamphindikati, x-axis ndi kulumikizana kofanana.
Kuchokera pa graph ndi tebulo zitha kuwoneka kuti pamwamba pa 8000 zopempha nthawi imodzi tili ndi osewera awiri okha omwe atsala: pre-fork ndi epoll. Pamene katundu akuchulukirachulukira, seva yokhazikitsidwa ndi voti imachita zoyipa kuposa kukhamukira. Kapangidwe ka ulusi-pre-creation ndi mpikisano woyenera ku epoll, umboni wa momwe Linux kernel imakonzekera bwino ulusi wambiri.
ZeroHTTPd Source Code
ZeroHTTPd Source Code apa. Pali chikwatu chosiyana cha kamangidwe kalikonse.
Kuphatikiza pa maupangiri asanu ndi awiri azomangamanga onse, palinso ena awiri pamndandanda wapamwamba kwambiri: anthu onse ndi ma templates. Yoyamba ili ndi fayilo ya index.html ndi chithunzi kuchokera pachithunzi choyamba. Mutha kuyika mafayilo ndi zikwatu pamenepo, ndipo ZeroHTTPd iyenera kutumiza mafayilo osasunthika popanda vuto lililonse. Ngati njira yomwe ili mumsakatuli ikugwirizana ndi chikwatu cha anthu onse, ZeroHTTPd imayang'ana fayilo ya index.html mu bukhuli. Zomwe zili m'buku la alendo zimapangidwa mwamphamvu. Ili ndi tsamba loyambira lokha, ndipo zomwe zili mkati mwake zimatengera fayilo ya 'templates/guestbook/index.html'. ZeroHTTPd imawonjezera mosavuta masamba osinthika owonjezera. Lingaliro ndilakuti ogwiritsa ntchito amatha kuwonjezera ma tempuleti ku bukhuli ndikukulitsa ZeroHTTPd pakufunika.
Kuti mupange ma seva asanu ndi awiri onse, thamangani make all kuchokera pamndandanda wapamwamba - ndipo zonse zomanga zidzawonekera mu bukhuli. Mafayilo omwe amatha kukwaniritsidwa amayang'ana zolemba zapagulu ndi ma templates mu bukhu lomwe amayambirako.
Linux API
Simufunikanso kudziwa bwino Linux API kuti mumvetsetse zomwe zili patsamba lino. Komabe, ndikupangira kuti muwerenge zambiri pamutuwu; pali zambiri zothandizira pa intaneti. Ngakhale tikhudza magulu angapo a Linux APIs, cholinga chathu chizikhala panjira, ulusi, zochitika, ndi ma network. Kuphatikiza pa mabuku ndi zolemba za Linux API, ndimalimbikitsanso kuwerenga mana pama foni am'dongosolo ndi ntchito zama library zomwe zimagwiritsidwa ntchito.
Kuchita ndi Scalability
Cholemba chimodzi chokhudza magwiridwe antchito ndi scalability. Mwachidziwitso, palibe kugwirizana pakati pawo. Mutha kukhala ndi ntchito yapaintaneti yomwe imagwira ntchito bwino kwambiri, yokhala ndi nthawi yoyankha ya ma milliseconds ochepa, koma siyikula konse. Momwemonso, pakhoza kukhala pulogalamu yapaintaneti yomwe siyikuyenda bwino yomwe imatenga masekondi angapo kuti iyankhe, koma imakula ndi makumi kuti igwire masauzande a ogwiritsa ntchito nthawi imodzi. Komabe, kuphatikiza kwa magwiridwe antchito apamwamba ndi scalability ndi kuphatikiza kwamphamvu kwambiri. Ntchito zogwira ntchito kwambiri nthawi zambiri zimagwiritsa ntchito zinthu moyenera ndipo motero zimathandiza ogwiritsa ntchito nthawi imodzi pa seva, kuchepetsa ndalama.
Ntchito za CPU ndi I/O
Pomaliza, pamakompyuta pamakhala mitundu iwiri ya ntchito: ya I/O ndi CPU. Kulandira zopempha pa intaneti (network I/O), kutumiza mafayilo (network ndi disk I/O), komanso kulumikizana ndi database (network ndi disk I/O) zonse ndizochitika za I/O. Mafunso ena a database amatha kukhala ozama kwambiri a CPU (kusanja, kuchulukitsa zotsatira miliyoni, ndi zina). Mapulogalamu ambiri apaintaneti amakhala ochepa ndi kuchuluka komwe kungatheke kwa I/O, ndipo purosesa sagwiritsidwa ntchito kawirikawiri. Mukawona kuti ntchito ina ya I/O ikugwiritsa ntchito ma CPU ambiri, ndiye kuti ichi ndi chizindikiro cha zomangamanga zosavomerezeka. Izi zitha kutanthauza kuti zida za CPU zimawonongeka pakuwongolera njira ndikusintha kwazinthu - ndipo izi sizothandiza kwenikweni. Ngati mukuchita zina monga kukonza zithunzi, kutembenuza mafayilo amawu, kapena kuphunzira pamakina, ndiye kuti kugwiritsa ntchito kumafunikira zida zamphamvu za CPU. Koma kwa ntchito zambiri izi sizili choncho.