A Microsoft megnyitotta a Garnet NoSQL-rendszer forráskódját, amelyet a gyorsítótár tárolók létrehozására terveztek, és amely kompatibilis a Redis tárolóhoz készült meglévő klienskönyvtárakkal. A Garnet támogatja a skálázható klaszterek létrehozását az adatok gyorsítótárazására, ahol replikáció, kulcsmigráció és adatok szegmentálása végezhető a klaszter csomópontjai között. A projekt C# nyelven íródott, C++ tárolási kernellal, MIT licenc alatt, és minden olyan platformon működhet, amelyet a .NET támogat (a fő platformok között Linux és Windows szerepel).
Az adatok tárolásához a Tsavorite motort (a Microsoft FASTER tároló forkját) használják, amely támogatja a több szálon történő lekérdezéskezelést, tranzakciókat, a változások blokkolás nélküli rögzítését (checkpointing), a hibahelyreállítást, a redundáns másolatok tárolását és a műveletek naplózását. A Garnet hálózati kezelője a ShadowFax kutatási projekt által javasolt megosztott memória architektúrára épül. A TLS kezelés és a tárolóval való interakció egy szálban történik, ami lehetővé teszi a szálváltási költségek elkerülését és hatékonyabb CPU gyorsítótár használatot biztosít az adatok hálózaton történő átvitele során.
A Garnet architektúrája elválasztja a lekérdezések elemzésének és kezelésének logikáját a tárolási műveletektől. Az adatokat kulcs-érték formátumú két tárolóval rögzítik, amelyek a Tsavorite könyvtárra épülnek. Az első, "fő" tároló a sztringműveletek gyors végrehajtására van optimalizálva, míg a második, "objektum" tároló a komplex objektumok és kiterjesztett adattípusok, például hash-ek és listák elhelyezésére van optimalizálva. A második tároló adatainak típusa .NET könyvtárak bevonásával valósul meg. Az adatok a kupacban (C# heap) tárolódnak, ami lehetővé teszi a hatékony frissítést, valamint sorosított formában a lemezen.

A Garnet jellemzői:
- Lehetőség van többrétegű tárolók telepítésére, amelyek a RAM-ot, SSD-meghajtókat és felhőtárolókat ölelik fel, ahol a kevésbé keresett adatok lassabb tárolókba kerülnek, lehetővé téve a gyorsítótárak létrehozását, amelyek mérete meghaladja a RAM-ot.
- Kiterjeszthető eszköztámogatás, amely lehetővé teszi különböző eszközökhöz optimalizált rétegek létrehozását, például SSD, merevlemezek és Azure Storage felhőalapú tárolórétegek.
- Hatékony mechanizmus a felszabadult memória területének újrahasználására, amely megakadályozza a töredezést.
- Testreszabható határok a memóriában használt méret elérésére, beleértve az indexeket, a naplókat és az objektumtárolást.
- A tárolóra a RESP protokoll révén lehet hivatkozni, így a Garnet használata során nem módosított Redis kliensekkel is interakcióba lehet lépni.
- Támogatott a karakterlánc értékek és összetett adatszerkezetek, például listák, hash-ek, halmazok, rendezett listák és geolokációs adatok tárolása. Lehetőség a kulcsok élettartamának meghatározására.
- API elérhetőség az analitikai lekérdezések (HLL/Hyperloglog, Bitmap), tranzakciók (MULTI/EXEC) végrehajtására és a közzétételi/előfizetési paradigma használatára.
- Eszközök a rugalmassághoz való hozzáférés kezelésére ACL-en keresztül.
- Lehetőség a konfiguráció JSON vagy redis.conf formátumban történő megadására.
- Támogatható a további hálózati kezelők csatlakoztatása, a TLS forgalom titkosításának lehetőségével (SslStream alapú).
- Lehetőség C# nyelven kiterjesztések létrehozására, amelyek további műveleteket valósítanak meg karakterláncokkal és objektumokkal.
- Támogatott tranzakciós tárolt eljárások létrehozása, amelyek több kulcsot is lefednek.
- Lehetőség az állapot helyreállítására egy korábban mentett pozícióból (checkpoint-recovery). Csak hozzáadás mód (AOF, append-only file) aktiválása, amely megőrzi az összes régi adatot és nem felülírja azokat.
- Támogatott a tárolási klaszter létrehozása replikációval, shardinggal, dinamikus kulcsmigrációval csomópontok között, valamint a meghibásodott csomópontok helyreállításával.
- Magas teljesítmény és alacsony késleltetés a lekérdezések végrehajtásakor. Hatékonyan kezeli a kis csomagú lekérdezéseket nagy számú ügyfél munkamenet mellett, lehetővé téve a feldolgozási sebesség (másodpercenként feldolgozott lekérdezések száma) jelentős növelését versenytársakhoz képest. virtuális gépekben Az Azure felhőjében a legtöbb esetben az ügyfél hívásának késése nem haladja meg a 300 mikroszekundumot. A Garnet a tesztek során jelentősen megelőzi a Redis, Dragonfly és KeyDB teljesítményét és reakcióidejét. Bizonyos tesztekben a Garnet a versenytárs rendszereket tízszeres sebességgel teljesíti.




Forrás: opennet.ru




