Microsoft heeft het NoSQL-systeem Garnet open source gemaakt. Dit systeem is ontworpen voor het creëren van caching-opslag en is compatibel met bestaande clientbibliotheken voor Redis-opslag. Garnet ondersteunt het creëren van schaalbare clusters voor datacaching, waarbij gebruik kan worden gemaakt van replicatie, sleutelmigratie en data-sharding tussen clusterknooppunten. Het project is geschreven in C# met een C++-opslagengine, is open source onder de MIT-licentie en kan worden uitgevoerd op alle door .NET ondersteunde platforms (de belangrijkste platforms zijn...). Linux и Windows).
De Tsavorite-engine (een fork van Microsoft FASTER Storage) wordt gebruikt voor gegevensopslag en ondersteunt multi-threaded queryverwerking, transacties, niet-blokkerende wijzigingsregistratie (checkpointing), herstel na fouten, het opslaan van redundante kopieën en het bijhouden van een logboek van bewerkingen. De netwerkhandler in Garnet is gebouwd met behulp van de gedeelde geheugenarchitectuur die is voorgesteld door het ShadowFax-onderzoeksproject. TLS-verwerking en opslaginteractie worden in één enkele thread uitgevoerd, waardoor er geen overhead is door het wisselen van threads en de CPU-cache efficiënter wordt gebruikt bij het verzenden van gegevens via het netwerk.
De architectuur van Garnet scheidt de logica van het parsen en verwerken van verzoeken van opslagbewerkingen. Gegevens worden opgeslagen met behulp van twee sleutel-waardeopslagplaatsen die zijn geïmplementeerd met behulp van de Tsavorite-bibliotheek. De eerste 'hoofd'-opslag is geoptimaliseerd voor snelle tekenreeksbewerkingen, terwijl de tweede 'object'-opslag is geoptimaliseerd voor het hosten van complexe objecten en geavanceerde gegevenstypen, zoals hashes en lijsten. Gegevenstypen in de tweede opslag worden geïmplementeerd met behulp van .NET-bibliotheken. De gegevens worden opgeslagen in de C#-heap, wat efficiënte updates mogelijk maakt, en in geserialiseerde vorm op schijf.

Granaat Kenmerken:
- Het is mogelijk om gelaagde opslag te implementeren over RAM, SSD's en cloudopslag, waarbij minder gebruikte gegevens naar langzamere opslag worden verplaatst om caches te creëren die groter zijn dan RAM.
- Uitbreidbare apparaatondersteuning, waarmee u lagen kunt maken die zijn geoptimaliseerd voor verschillende apparaten, zoals lagen voor SSD, HDD en Azure Storage.
- Een efficiënt mechanisme voor het hergebruiken van vrijgekomen ruimte in RAM, waardoor fragmentatie wordt voorkomen.
- Configureerbare limieten voor de hoeveelheid geheugen die wordt gebruikt voor indexen, logboeken en object-opslag.
- Voor toegang tot de opslag wordt het RESP-protocol gebruikt, waardoor Garnet met ongewijzigde Redis-clients kan worden gebruikt.
- Ondersteuning voor het opslaan van zowel tekenreekswaarden als complexe gegevensstructuren zoals lijsten, hashes, sets, gesorteerde lijsten en geolocatiegegevens. Mogelijkheid om de levensduur van de sleutel te bepalen.
- Beschikbaarheid van API voor het uitvoeren van analytische query's (HLL/Hyperloglog, Bitmap), transacties (MULTI/EXEC) en het gebruik van het publiceren/abonneren-paradigma.
- Beschikbaarheid van middelen voor flexibele toegangscontrole via ACL.
- Mogelijkheid om configuratie te definiëren in JSON- of redis.conf-formaat.
- Ondersteuning voor het aansluiten van extra netwerkhandlers. Mogelijkheid tot verkeersversleuteling met behulp van TLS (gebaseerd op SslStream).
- De mogelijkheid om extensies in de C#-taal te maken die extra bewerkingen met strings en objecten implementeren.
- Ondersteuning voor transactionele opgeslagen procedures die meerdere sleutels omvatten.
- De mogelijkheid om de status te herstellen vanuit een eerder opgeslagen positie (checkpoint-recovery). De aanwezigheid van een 'append-only file'-modus (AOF), waarin alle oude gegevens beschikbaar blijven en niet worden vervangen.
- Ondersteuning voor het maken van een opslagcluster met replicatie, sharding, dynamische sleutelmigratie tussen knooppunten en failover.
- Hoge prestaties en lage latentie bij het uitvoeren van query's. Efficiënte verwerking van kleine batchquery's met een groot aantal clientsessies, waardoor een doorvoer (aantal verwerkte query's per seconde) mogelijk is die een orde van grootte hoger ligt dan bij concurrerende oplossingen. Bij gebruik in virtuele machines In de Azure-cloud bedraagt de clientlatentie in de meeste gevallen niet meer dan 300 microseconden. Uit uitgevoerde tests blijkt dat Garnet aanzienlijk beter presteert dan Redis, Dragonfly en KeyDB op het gebied van prestaties en responsiviteit. In sommige tests presteert Garnet zelfs tien keer beter dan concurrerende systemen.




Bron: opennet.ru




