Cilat janë bazat Unix dhe si funksionojnë ato?


Prizat Unix janë një formë komunikimi midis dy proceseve që shfaqen si skedar në disk. Ky skedar mund të përdoret nga programe të tjera për të krijuar lidhje shumë të shpejta midis dy ose më shumë proceseve pa asnjë ngarkesë rrjeti.

Çfarë janë bazat?

Prizat janë një lidhje e drejtpërdrejtë midis dy proceseve. Imagjinoni nëse dëshironi të telefononi mikun tuaj në rrugë; ju mund të bëni një telefonatë që ajo të dërgohet përmes kompanisë suaj telefonike dhe të kthehet në shtëpinë e tyre, ose mund të lidhni një tela direkt në shtëpinë e tyre dhe të shkëputni ndërmjetësin. Kjo e fundit është padyshim jopraktike në jetën reale, por në botën e Unix-it është shumë e zakonshme të krijohen këto lidhje të drejtpërdrejta midis programeve.

Emri i duhur për foletë unix është Unix Domain Sockets, sepse të gjitha ato qëndrojnë brenda një kompjuteri. Në një farë kuptimi, bazat janë një rrjet që përfshihet tërësisht brenda kernelit; në vend të përdorimit të ndërfaqeve të rrjetit për të dërguar të dhëna, të njëjtat të dhëna mund të dërgohen drejtpërdrejt ndërmjet programeve.

Pavarësisht krijimit të skedarëve në disk, bazat Unix në fakt nuk i shkruajnë të dhënat që dërgojnë në disk, pasi kjo do të ishte shumë e ngadaltë. Në vend të kësaj, të gjitha të dhënat ruhen në memorien e kernelit; pika e vetme e skedarit të folesë është të mbajë një referencë në fole dhe t'i japë atij leje të sistemit të skedarëve për të kontrolluar aksesin. Për shembull, priza e MySQL është zakonisht në:

/var/lib/mysql/mysql.sock

Ky skedar nuk përmban asgjë, dhe ju nuk duhet ta modifikoni atë drejtpërdrejt, përveç lejeve kur zbatohen. Është thjesht një emër.

Si funksionojnë bazat?

Prizat thjesht ofrojnë harduerin aktual për lëvizjen e të dhënave. Prizat e bazuara në TCP quhen priza rrjedhëse, ku të gjitha të dhënat do të arrijnë në rregull. Prizat e bazuara në UDP janë baza të datagramit, ku porosia (apo edhe shpërndarja) nuk është e garantuar. Ekzistojnë gjithashtu priza të papërpunuara, të cilat nuk kanë asnjë kufizim dhe përdoren për zbatimin e protokolleve dhe shërbimeve të ndryshme që duhet të inspektojnë trafikun e rrjetit të nivelit të ulët, si Wireshark.

Prizat zakonisht përdorin ende TCP ose UDP, pasi ato nuk janë asgjë të veçantë përveç një tubi të zbukuruar brenda kernelit. TCP dhe UDP janë protokolle transporti që përcaktojnë se si të dhënat marrin nga një vend në tjetrin, por nuk u interesojnë vërtet se cilat janë të dhënat. TCP dhe UDP ofrojnë platformën për shumicën e protokolleve të tjera si FTP, SMTP dhe RDP, të cilat funksionojnë në nivele më të larta.

Është e mundur që një aplikacion të përdorë një implementim paksa të ndryshëm të TCP; prizat e transmetimit përdorin protokollin SOCK_STREAM , që është ajo që TCP përdor gjithashtu për transport pothuajse gjatë gjithë kohës, dhe ndërsa ato në thelb janë të këmbyeshme, teknikisht janë paksa të ndryshme. Megjithëse kjo është diçka e nivelit të ulët dhe nuk është diçka për të cilën do të duhet të shqetësoheni, thjesht dijeni se shumica e trafikut të dërguar përmes prizave të domenit UNIX është i bazuar në TCP ose UDP, ose të paktën plotësisht ngjashëm me të, dhe TCP e dërguar përmes prizave të domenit UNIX është më e shpejtë se TCP përmes ndërfaqeve të rrjetit si portet.

Përdorimi i prizës në praktikë

Prizat Unix zakonisht përdoren si një alternativë ndaj lidhjeve TCP të bazuara në rrjet kur proceset po ekzekutohen në të njëjtën makinë. Të dhënat zakonisht dërgohen ende mbi të njëjtat protokolle; ai thjesht qëndron brenda së njëjtës makinë dhe e di se po funksionon në të njëjtin domen (prandaj, emri i foleve të domenit UNIX), kështu që kurrë nuk duhet të shqetësojë një ndërfaqe rrjeti loopback për t'u lidhur me veten.

Shembulli më i madh i kësaj është Redis, një dyqan jashtëzakonisht i shpejtë me vlerë kyçe që funksionon tërësisht brenda memorjes. Redis përdoret shpesh në të njëjtin server që po i qaset, kështu që zakonisht do të jeni në gjendje të përdorni bazat. Në nivele kaq të ulëta dhe me shpejtësinë e Redis, prizat ofrojnë një rritje të performancës 25% në disa standarde sintetike.

Nëse jeni duke u lidhur me një bazë të dhënash MySQL, mund të përdorni gjithashtu një prizë. Zakonisht ju do të lidheni me host:port nga një sistem i largët, por nëse jeni duke u lidhur me një bazë të dhënash në të njëjtin server (për shembull, një API REST që hyn në një bazë të dhënash), mund të përdorni bazat për një përshpejtim. Kjo nuk do të ndikojë në përdorimin normal, por është shumë e dukshme kur është nën ngarkesë, mbi 20% në një bërthamë 24 të nivelit të lartë me 128 përdorues të njëkohshëm dhe një milion pyetje në sekondë. Nëse do të shihni apo jo një përfitim nga prizat është një histori tjetër, por në atë pikë ka të ngjarë të kërkoni gjithsesi të riprodhoni dhe balanconi ngarkesën.

Nëse dëshironi të punoni manualisht me prizat, mund të përdorni mjetin socat për t'i ekspozuar ato mbi portat e rrjetit:

socat TCP-LISTEN:12345 UNIX-CONNECT:/var/lib/socket.sock

Kjo e mposht teknikisht qëllimin e prizave të domenit Unix, por mund të përdoret për korrigjimin e gabimeve në shtresën e transportit.