Microsoft har öppnat kÀllkoden för NoSQL-systemet Garnet, som Àr designat för att skapa cache-lagringssystem och Àr kompatibelt med befintliga klientbibliotek för Redis-lagring. Garnet stöder skapandet av skalbara kluster för datacaching, dÀr replikering, nyckelmigrering och datasegmentering mellan kluster noder kan anvÀndas. Projektet Àr skrivet i C# med en lagringskÀrna i C++, Àr öppet under MIT-licensen och kan köras pÄ alla plattformar som stöds i .NET (primÀra plattformar som nÀmns Àr Linux och Windows).
För datalagring anvÀnds motorn Tsavorite (en fork av Microsoft FASTER-lagringen), som stödjer flertrÄdad begÀrsbehandling, transaktioner, icke-blockerande förÀndringscheckpointing, felÄterstÀllning, lagring av redundanta kopior och loggning av operationer. NÀtverksprocessorn i Garnet Àr byggd med en arkitektur för delat minne som föreslagits av forskningsprojektet ShadowFax. Behandling av TLS och interaktion med lagringen utförs i en trÄd, vilket gör att man kan undvika overhead för trÄdbyte och mer effektivt utnyttja CPU-cachen vid datatransferering över nÀtet.
Arkitekturen i Garnet separerar logiken för parsning och begÀrsbehandling frÄn lagringsoperationer. Data lagras med hjÀlp av tvÄ nyckel-vÀrde-lager som Àr byggda pÄ biblioteket Tsavorite. Det första "grundlÀggande" lagret Àr optimerat för snabba strÀngoperationer, medan det andra "objekt"-lagret Àr optimerat för lagring av komplexa objekt och avancerade datatyper, som hashar och listor. Datatyper i det andra lagret implementeras med stöd av .NET-biblioteken. Data lagras pÄ heapen (C# heap), vilket gör att de kan uppdateras effektivt, samt i serialiserad form pÄ disk.

Egenskaper hos Garnet:
- Det Àr möjligt att distribuera flerskiktade lagringssystem som omfattar RAM, SSD-lagring och molnlager, dÀr mindre efterfrÄgade data flyttas till lÄngsammare lagringssystem för att skapa cacher som överstiger RAM-storleken.
- Utökningsbar enhetssupport som möjliggör skapande av lager optimerade för olika enheter, exempelvis lager för SSD, hÄrddiskar och Azure Storage.
- Effektiv mekanism för ÄteranvÀndning av frigjort minnesutrymme som förhindrar fragmentering.
- Konfigurerbara grÀnser för det minnesutrymme som anvÀnds för index, loggar och objektlagring.
- För att fÄ Ätkomst till lagret anvÀnds RESP-protokollet, vilket gör det möjligt att anvÀnda Garnet med oförÀndrade Redis-klienter.
- Stöd för lagring av bÄde strÀngvÀrden och komplexa datatyper sÄsom listor, hashar, mÀngder, sorterade listor och geodata. Möjlighet att definiera livslÀngd för nycklar.
- TillgÄng till API för att utföra analytiska frÄgor (HLL/Hyperloglog, Bitmap), transaktioner (MULTI/EXEC) och anvÀnda publicerings-/prenumerationsparadigmet.
- TillgÄng till verktyg för flexibel Ätkomsthantering via ACL.
- Möjlighet att definiera konfigurationen i JSON-format eller redis.conf.
- Stöd för anslutning av ytterligare nÀtverksbehandlare. Möjlighet till kryptering av trafiken med TLS (baserat pÄ SslStream).
- Möjlighet att skapa tillÀgg pÄ sprÄket C# som implementerar extra operationer med strÀngar och objekt.
- Stöd för transaktionella lagrade procedurer som omfattar flera nycklar.
- Möjlighet att ÄterstÀlla tillstÄndet frÄn en tidigare sparad position (checkpoint-recovery). TillgÄng till endast-tillÀggslÀge (AOF, append-only file), dÀr alla gamla data förblir tillgÀngliga och inte överskrivs.
- Stöd för skapande av lagringskluster med replikering, segmentering (Sharding), dynamisk migrering av nycklar mellan noder och ÄterstÀllning av felaktiga noder.
- Hög prestanda och lÄga fördröjningar vid genomförande av förfrÄgningar. Effektiv behandling av smÄ batch-förfrÄgningar vid ett stort antal klientsessioner, vilket möjliggör en genomströmning (antal behandlade förfrÄgningar per sekund) som Àr ordentligt högre Àn hos konkurrerande lösningar. virtuella maskiner I molnet Azure överstiger inte i de flesta fall fördröjningar i kundens anrop 300 mikrosekunder. I utförda tester övertrÀffar Garnet avsevÀrt Redis, Dragonfly och KeyDB nÀr det gÀller prestanda och respons. I vissa tester övertrÀffar Garnet konkurrenternas system med tio gÄnger.




KĂ€lla: opennet.ru




