Spoločnosť PayPal otvorila zdrojové kódy odolnej databázy JunoDB, ktorá manipuluje s údajmi v formáte kľúč-hodnota. Systém bol pôvodne navrhnutý s ohľadom na vysokú bezpečnosť, horizontálnu škálovateľnosť, odolnosť voči poruchám a schopnosť spracovať stovky tisíc súčasných pripojení s predvídateľnými oneskoreniami. V PayPal je prakticky všetky služby, od prihlásenia používateľov po spracovanie finančných transakcií, založené na JunoDB. Kód projektu je napísaný v jazyku Go (klientská knižnica v Jave) a je distribuovaný pod licenciou Apache 2.0. Pri ďalšom vývoji budú akceptované opravy, vylepšenia a zmeny od komunity.
Architektúra JunoDB je založená na použití vyvažovača záťaže, ktorý prijíma požiadavky od klientskych aplikácií a rozdeľuje ich medzi proxy servery, ktoré súčasne komunikujú s skupinou serverov úložísk pri plnení požiadavky. Každý proxy server vytvára pripojenia okamžite so všetkými servermi úložišťami a smeruje požiadavky na skupinu serverov úložíšť na základe indexu rozdelenia, ktorý je uložený v distribuovanom systéme konfigurácie etcd.

Údaje sú rozdelené a priradené k uzlom úložíšť pomocou hashovania, čo minimalizuje presúvanie údajov pri zvyšovaní alebo znižovaní uzlov v clustere. Na zabezpečenie odolnosti voči poruchám je každá dávka údajov replikovaná na viacerých uzloch úložíšť, čo umožňuje uchovať informácie aj pri zlyhaní jednotlivých serverov. Podporuje sa vytváranie teritoriálne rozdelených úložísk, v ktorých sú skupiny uzlov umiestnené v rôznych dátových centrách.

Na uzloch úložíšť sú údaje umiestnené v operačnej pamäti alebo v lokálnom úložisku na báze knižnice RocksDB. Pri trvalom uložení sú údaje uložené v šifrovanej forme (kľúč šifrovania môže určiť buď klient, alebo byť stanovený na úrovni proxy).

Na prístup k databáze z aplikácií sa dodáva klientská knižnica, ktorá poskytuje API pre aplikácie v jazykoch Java, Go a C++. Klientska časť je maximálne zjednodušená, pričom zložitá logika a nastavenia sú čo najviac prenesené na stranu DBMS. Interakcia medzi klientom a vyrovnávačom zaťaženia alebo proxy sa uskutočňuje prostredníctvom šifrovaného komunikačného kanála. Na správu a odosielanie požiadaviek je možné použiť príkazový riadok, ktorý reprodukuje všetky možnosti klientského API.
Systém je navrhnutý na spracovanie požiadaviek s predvídateľne nízkymi oneskoreniami, napríklad klaster z troch uzlov úložiska a jednej proxy, vytvorený z prostredí n1-highmem-32 (32 CPU Intel Xeon 2.30GHz, 214G RAM a 450G úložisko na báze SSD), dokázal poskytnúť fixné oneskorenia, ktoré neprekročili 2.5 ms v 95% prípadov a 16 ms v 99% pri spracovaní 200 tisíc súčasných TLS pripojení a toku 15 tisíc požiadaviek za sekundu (pri 3000 súčasných pripojeniach a toku 80 tisíc požiadaviek za sekundu oneskorenia neprekročili 6 ms v 95% prípadoch a 15 ms v 99%). V PayPal služby na báze JunoDB obsluhujú približne 350 miliárd požiadaviek denne.

Zdroj: opennet.ru
