Microsoft avas allikana koodid NoSQL-süsteemile Garnet, mis on mõeldud vahemälu ladustamiseks ja on ühilduv olemasolevate Redis ladustamise klientraamatukogudega. Garnet toetab skaleeritavate klastrite loomist andmete vahemällu salvestamiseks, kus saab kasutada replikatsiooni, võtmete migreerimist ja andmete jagamist klastrite sõlmede vahel. Projekt on kirjutatud keeles C# ja selle salvestustuum on C++, see on avatud MIT litsentsi alusel ning töötab kõikidel .NET-iga toetatavates platvormidel (peamised platvormid on Linux ja Windows).
Andmete salvestamiseks kasutatakse Tsavorite mootorsüsteemi (Microsoft FASTER salvestuse fork), mis toetab mitme lõime töötlemist, tehingute tegemist, muudatuste tegemist ilma blokeerimiseta (checkpointing), rikke taastamist, üleliigsete koopiate säilitamist ja toimingute logimist. Garneti võrgu töötleja on üles ehitatud ShadowFax uurimisprojekti pakutud jagatud mälu arhitektuuri põhjal. TLS-i töötlemine ja suhtlemine salvestusega toimub ühes lõimes, mis võimaldab vältida lõimedünaamika üleminekust tingitud kulusid ja tõhusamalt kasutada CPU vahemälu andmete edastamisel võrgu kaudu.
Garneti arhitektuur eraldab päringu töötlemise loogika salvestusoperatsioonidest. Andmed salvestatakse kahe võti-väärtusena vormindatud salvestuse abil, mis on rakendatud Tsavorite raamatukogu põhjal. Esimene "peamine" salvestus on optimeeritud stringide töötlemise kiirusest ning teine "objektne" salvestus on optimeeritud keeruliste objektide ja laienenud andmetüüpide, nagu hashid ja loendid, talletamiseks. Teise salvestuse andmetüübid on rakendatud .NET raamatukogude abil. Andmed salvestatakse kuhja (C# heap) ja serialiseeritud kujul kettale, mis võimaldab neid tõhusalt uuendada.

Garneti omadused:
- Võimalik on juurutada mitmekihilisi salvestussüsteeme, mis katab RAM-i, SSD-diskid ja pilvesalvestused, kus vähem nõutud andmed lükatakse aeglasematesse salvestustesse vahemälu loomiseks, mis on suurem kui operatiivmälu.
- Laienev tugi seadmetele, mis võimaldab luua kihte, mis on optimeeritud töötama erinevate seadmetega, näiteks on olemas kihid SDD, kõvaketaste ja Azure Storage pilvesalvestuse jaoks.
- Tõhus vaba mäluruumi taaskasutamise mehhanism, mis takistab fragmenteerimist.
- Kohandatavad piirangud mälule, mida kasutatakse indeksite, logide ja objektide salvestamiseks.
- Salvestusele pääsemiseks kasutatakse RESP-protokolli, mis võimaldab Garnet'i kasutada muutmata Redis klientidega.
- Tugi nii stringiväärtuste kui ka keerukate andmestruktuuride, nagu nimekirjad, hash'id, kogud, järjestatud nimekirjad ja geopositioneerimise andmete salvestamiseks. Võimalus määrata võtme eluea kestus.
- API olemasolu analüütiliste päringute (HLL/Hyperloglog, Bitmap), tehingute (MULTI/EXEC) ja publish/subscribe paradigmaga töötamiseks.
- Paindlike ligipääsukontrolli vahendite olemasolu läbi ACL.
- Võimalus määrata konfiguratsioon JSON formaadis või redis.conf.
- Tugi täiendavate võrgutöötlejate ühendamiseks. Võimalus krüpteerida liiklust TLS abil (SslStream alusel).
- Võimalus luua laiendusi C# keeles, mis teostavad täiendavaid operatsioone stringide ja objektidega.
- Toetatakse tehingulisi salvestatud protseduure, mis hõlmavad mitmeid võtmeid.
- Võimalus taastada seisund eelnevalt salvestatud positsioonilt (checkpoint-recovery). Olemas on ainult lisamise režiim (AOF, append-only file), kus kõik vanad andmed jäävad kättesaadavaks ja ei asendata.
- Toetatakse salvestusklastrite loomist replikatsiooni, segmentatsiooni (sharding), võtmete dünaamilise migreerimise vahel sõlmedes ja tõrgete taastumisega.
- Kõrge jõudlus ja madalad latentsid päringute täitmisel. Tõhus väikepakettide päringute töötlemine suure arvu kliendiseansside korral, mis võimaldab saavutada läbilaskevõimet (käsitlemisest päringute arv sekundis) oluliselt kõrgemal tasemel kui konkurentide lahendused. Käivitatakse virtuaalmasinaid Azure'i pilves ületavad kliendi päringute viivitused enamasti 300 mikrosekundi. Teostatud testides ületab Garnet oluliselt Redis, Dragonfly ja KeyDB jõudluses ja reageerimisvõimes. Mõnes testis ületab Garnet konkurente kümme korda.




Allikas: opennet.ru




