Kompania Microsoft hapi kodet burimore të sistemit NoSQL Garnet, i cili është i destinuar për krijimin e ruajtjeve të caches dhe është i pajtueshëm me bibliotekat ekzistuese të klientit për ruajtjen Redis. Garnet mbështet krijimin e klastereve të shkallëzueshme për ruajtjen e të dhënave, ku është e mundur të përdoret replikimi, migrimi i çelësave dhe segmentimi i të dhënave midis nyjeve të klasterit. Projekti është shkruar në gjuhën C# me një bërthamë ruajtjeje në C++, është i hapur nën licencën MIT dhe mund të funksionojë në të gjitha platformat që mbështeten në .NET (platformat kryesore janë shpallur Linux dhe Windows).
Për ruajtjen e të dhënave përdoret motori Tsavorite (fork i ruajtjes Microsoft FASTER), i cili mbështet përpunimin shumëthirrës të kërkesave, transaksionet, regjistrimin e ndryshimeve në mënyrë jo bllokuese (checkpointing), rikuperimin pas dështimesh, ruajtjen e kopjeve të tepërta dhe mbajtjen e logs të operacioneve. Procesori rrjetor në Garnet është ndërtuar duke përdorur arkitekturën e memories së ndarë, të propozuar nga projekti hulumtues ShadowFax. Trajtimi i TLS dhe ndërveprimi me ruajtjen kryhet në një humbje, duke e lejuar këtë të shmangë kostot e kalimit të humbjeve dhe të shfrytëzojë më efektivisht cache-n e CPU-së gjatë transferimit të të dhënave në rrjet.
Arkitektura Garnet ndan logjikën e analizës dhe përpunimit të kërkesave nga operacionet me ruajtjen. Të dhënat ruhen duke përdorur dy depo në formatin çelës-vlerë, të realizuara mbi bibliotekën Tsavorite. Depoja e parë "themeli" është optimizuar për ekzekutimin e shpejtë të operacioneve me stringje, ndërsa depoja e dytë "objektore" është optimizuar për ruajtjen e objekteve komplekse dhe tipeve të avancuara të të dhënave, siç janë heshat dhe listat. Tipet e të dhënave në depoën e dytë janë realizuar me ndihmën e bibliotikave .NET. Të dhënat ruhen në grumbull (C# heap), gjë që lejon përditësimin e tyre të efektshëm, dhe në formë të serilizuar në disk.

Veçoritë e Garnet:
- ĂshtĂ« e mundur tĂ« krijohen ruajtje me shumĂ« nivele, qĂ« pĂ«rfshijnĂ« memorien e pĂ«rkohshme, SSD-tĂ« dhe ruajtjet nĂ« re, ku tĂ« dhĂ«nat mĂ« pak tĂ« kĂ«rkuara shpĂ«rngulĂ«n nĂ« ruajtur mĂ« tĂ« ngadalshĂ«m pĂ«r krijimin e caches, madhĂ«sia e tĂ« cilave Ă«shtĂ« mĂ« e madhe se memorja e pĂ«rkohshme.
- Mbështetje e zgjerueshme e pajisjeve që lejon krijimin e shtresave të optimizuara për pajisje të ndryshme, siç janë shtresat për SSD, disqet e forta dhe ruajtja në re Azure Storage.
- Mekanizëm efikas për ripërdorimin e hapësirës së lirë në kujtesën operative, duke parandaluar fragmentimin.
- Limite të personalizueshme mbi madhësinë e memories së përdorur për indekset, regjistrin dhe ruajtjen e objekteve.
- Për qasje në ruajtje, përdoret protokolli RESP, duke lejuar përdorimin e Garnet me klientë Redis të pamodifikuar.
- Mbështetje për ruajtjen e vlerave string dhe strukturave të dhënash komplekse si lista, hesh, grupe, lista të renditura dhe të dhëna gjeo-lokacioni. Mundësia për të përcaktuar kohën e jetës së çelësit.
- Disponueshmëria e API për ekzekutimin e kërkesave analitike (HLL/Hyperloglog, Bitmap), transaksioneve (MULTI/EXEC) dhe përdorimin e paradigmes publikim/abonim.
- Disponueshmëria e mjeteve për menaxhimin fleksibël të aksesit nëpërmjet ACL.
- Mundësia për të përcaktuar konfigurimin në formatin JSON ose redis.conf.
- Mbështetje për lidhjen e përpunuesve shtesë të rrjetit. Mundësia e enkriptimit të trafikut duke përdorur TLS (bazuar në SslStream).
- Mundësia për të krijuar zgjerime në gjuhën C#, të cilat realizojnë operacione shtesë me stringje dhe objekte.
- Mbështetje për procedurat e ruajtura transaksionale që mbulojnë disa çelësa.
- Mundësia për të rikthyer gjendjen nga një pozite të ruajtur më parë (checkpoint-recovery). Disponueshmëria e një mënyre vetëm për shtim (AOF, append-only file), ku të dhënat e vjetra mbeten të aksesueshme dhe nuk zëvendësohen.
- Mbështetje për krijimin e një klasteri ruajtjeje me replikim, segmentim (Sharding), migracion dinamik të çelësave midis nyjeve dhe rikthimin e nyjeve të dështuara.
- Performancë e lartë dhe vonesa të ulëta gjatë ekzekutimit të kërkesave. Përpunimi efektiv i kërkesave të vogla me shumë sesione klientësh, duke arritur një shkallë kalimi (numri i kërkesave të përpunuara për sekondë) shumë më të lartë se zgjidhjet konkurrente. Në nisje në makina virtuale Në Azure, në shumicën e rasteve, vonesat e qasjes së klientit nuk e tejkalojnë 300 mikrosend. Në testet e kryera, Garnet tejkalon ndjeshëm Redis, Dragonfly dhe KeyDB në performancë dhe përgjigje. Në disa teste, Garnet ekalon sistemet konkuruese deri në dhjetë herë.




Burimi: opennet.ru




