Microsoft hat it Garnet NoSQL-systeem iepen boarne makke, ûntworpen foar it meitsjen fan caching-opslach en kompatibel mei besteande kliïntbibleteken foar de Redis-opslach. Garnet stipet it meitsjen fan skalberbere klusters foar gegevenscaching, dy't gebrûk meitsje kinne fan replikaasje, kaaimigraasje en gegevenssharding tusken klusterknooppunten. It projekt is skreaun yn C# mei in C++ opslachmotor, is iepen boarne ûnder de MIT-lisinsje en kin rinne op alle platfoarms dy't stipe wurde troch .NET (de primêre platfoarms binne Linux и Windows).
Om gegevens op te slaan, wurdt de Tsavorite-motor (in foarke fan Microsoft FASTER-opslach) brûkt, dy't stipet multi-threaded query-ferwurking, transaksjes, it begean fan wizigingen yn in net-blokkearjende modus (checkpointing), herstel fan mislearrings, bewarjen fan oerstallige kopyen en ûnderhâld fan in log fan operaasjes. De netwurkmotor yn Garnet is boud mei de dielde ûnthâld-arsjitektuer foarsteld troch it ShadowFax-ûndersyksprojekt. TLS-ferwurking en ynteraksje mei opslach wurde útfierd yn ien thread, wat it mooglik makket om de overhead fan wikseljende threads te foarkommen en de CPU-cache effisjinter te brûken by it oerdragen fan gegevens oer it netwurk.
De Garnet-arsjitektuer skiedt de logika foar it parsearjen en ferwurkjen fan oanfragen fan opslachoperaasjes. Gegevens wurde opslein mei twa kaai-wearde winkels basearre op de Tsavorite bibleteek. De earste "haad" winkel is optimalisearre foar flugge string operaasjes, en de twadde "objekt" winkel is optimalisearre om te foldwaan oan komplekse objekten en avansearre gegevens typen lykas hashes en listen. De gegevenstypen yn 'e twadde opslach wurde ymplementearre mei .NET-biblioteken. Gegevens wurde opslein op 'e heap (C # heap), wêrtroch't it kin wurde fernijd effisjint, en yn serialisearre foarm op skiif.

Funksjes fan Garnet:
- It is mooglik om multi-tiered opslach yn te setten, oerspannende RAM, SSD-skiven en wolkopslach, wêryn minder-yn-fraach gegevens yn trage opslach wurde skood om caches grutter te meitsjen dan RAM.
- Útwreide apparaat stipe, wêrtroch it oanmeitsjen fan lagen optimalisearre om te wurkjen mei ferskate apparaten, bygelyks, der binne lagen foar SDD, hurde skiven en Azure Storage wolk opslach.
- In effisjint meganisme foar it opnij brûken fan befrijde romte yn RAM, it foarkommen fan fragmintaasje.
- Konfigurable grinzen op de grutte fan ûnthâld brûkt foar yndeksen, logs en foarwerp opslach.
- It RESP-protokol wurdt brûkt om tagong te krijen ta de opslach, wêrtroch Garnet kin wurde brûkt mei net wizige Redis-kliïnten.
- Unterstützt it opslaan fan sawol stringwearden as komplekse gegevensstruktueren lykas listen, hashes, sets, sorteare listen en geolokaasjegegevens. Mooglikheid om kaai libben te bepalen.
- Beskikberens fan API's foar it útfieren fan analytyske fragen (HLL / Hyperloglog, Bitmap), transaksjes (MULTI / EXEC) en it brûken fan it publisearje / ynskriuwe paradigma.
- Beskikberens fan middels foar fleksibele tagong kontrôle fia ACL.
- Mooglikheid om konfiguraasje te definiearjen yn JSON- of redis.conf-formaat.
- Stipe foar it ferbinen fan ekstra netwurkhannelers. Mooglikheid om ferkear te fersiferjen mei TLS (basearre op SslStream).
- De mooglikheid om tafoegings te meitsjen yn C # dy't ekstra operaasjes útfiere mei stringen en objekten.
- Stipe foar transaksjonele opsleine prosedueres dy't meardere kaaien oerspant.
- Mooglikheid om steat te herstellen fan in earder bewarre posysje (checkpoint-herstel). De oanwêzigens fan in bestânmodus allinich foar taheakjen (AOF, allinich bestân), wêryn alle âlde gegevens beskikber bliuwe en net ferfongen wurde.
- Stipe foar it meitsjen fan in opslachkluster mei replikaasje, sharding, dynamyske kaaimigraasje tusken knooppunten en herstel fan mislearre knooppunten.
- Hege prestaasjes en lege latency by it útfieren fan query's. Effisjinte ferwurking fan lytse batchquery's mei in grut oantal kliïntsesjes, wêrtroch't in trochfier (oantal query's ferwurke per sekonde) in oarder fan grutte heger is as konkurrearjende oplossingen. By it útfieren yn firtuele masines Yn 'e Azure-wolk is de kliïntlatinsje yn 'e measte gefallen net mear as 300 mikrosekonden. Yn útfierde testen prestearret Garnet signifikant better as Redis, Dragonfly en KeyDB yn prestaasjes en responsiviteit. Yn guon testen prestearret Garnet tsien kear better as konkurrearjende systemen.




Boarne: opennet.ru




