← Hyperdrive (Postgres & MySQL) / hyperdrive / concepts
Jak Hyperdrive funguje
Připojování k tradičním centralizovaným databázím z globální sítě Cloudflare, která zahrnuje více než 300 lokalit datových center ↗ přináší několik výzev, protože dotazy mohou přicházet z kterékoli z těchto lokalit.
Pokud je vaše databáze umístěna centrálně, může trvat dlouho, než se dotaz dostane k databázi a zase zpět. Ještě déle to může trvat v situacích, kdy je nutné navazovat nová připojení z bezstavových prostředí, jako jsou Workers, což vyžaduje více cest tam a zpět při každém vyvolání Workeru.
Tradiční databáze obvykle zvládají jen omezený maximální počet připojení. Při jakémkoli přiměřeně velkém objemu distribuovaného provozu se tato připojení snadno vyčerpají.
Hyperdrive tyto problémy řeší tím, že spravuje počet globálních připojení k vaší zdrojové databázi, selektivně analyzuje odpovědi na dotazy a rozhoduje, které z nich uložit do mezipaměti, čímž snižuje zátěž databáze a zrychluje vaše databázové dotazy.
Jak Hyperdrive zajišťuje rychlý přístup k databázím po celém světě
Hyperdrive zrychluje databázové dotazy těmito způsoby:
- Navazování nových databázových připojení v blízkosti vašich Workers
- Sdružování stávajících připojení v blízkosti vaší databáze
- Ukládání výsledků dotazů do mezipaměti
Díky tomu máte optimální výkon při připojování k databázi z Workers, ať jsou vaše dotazy uložené v mezipaměti, nebo ne.
1. Nastavení edge připojení
Když se databázový ovladač připojuje k databázi z Cloudflare Worker přímo, nejprve proběhne navázání připojení. To může vyžadovat několik zpátečních cest k databázi kvůli ověření a navázání zabezpečeného připojení, což může kvůli vzdálenosti mezi vaším Cloudflare Workerem a databází způsobit další síťovou latenci.
S Hyperdrive, k navázání připojení dochází mezi vaším Cloudflare Workerem a Hyperdrive na okraji sítě, co nejblíže vašemu Workeru (viz diagram, označení 1. Nastavení připojení). To znamená výrazně nižší latenci, protože navázání připojení proběhne v rámci stejné lokality.
Další informace o tom, jak fungují připojení mezi Workers a Hyperdrive, najdete v Životní cyklus připojení.
2. Sdružování připojení
Hyperdrive vytváří fond připojení k vaší databázi, která lze opakovaně využívat při vykonávání dotazů vaší aplikace vůči databázi.
Fond databázových připojení je umístěn v jednom nebo více regionech nejblíže vaší zdrojové databázi. Díky tomu se minimalizuje latence způsobená zpáteční cestou mezi vašimi Cloudflare Workers a databází při navazování nových připojení. Zároveň to zajišťuje, že u dotazů, které nejsou uložené v mezipaměti, vzniká co nejmenší síťová latence.
Pokud pool připojení obsahuje již existující připojení, pokusí se toto připojení znovu použít (viz diagram, popisek 2. Existující zahřáté připojení). Pokud fond připojení nemá žádná existující připojení, naváže nové připojení k vaší databázi a použije ho ke směrování dotazu. Cílem je opakovaně používat a vytvářet jen tolik připojení, kolik je pro provoz vaší aplikace skutečně potřeba.
Další informace o chování a konfiguraci sdružování připojení najdete v Sdružování připojení.
3. Ukládání dotazů do mezipaměti
Hyperdrive podporuje ukládání do mezipaměti pro nemutující (čtecí) dotazy do vaší databáze.
Když jsou dotazy odesílány přes Hyperdrive, Hyperdrive dotaz analyzuje a určí, zda se jedná o dotaz měnící data (zápis), nebo o dotaz, který data nemění (čtení).
U dotazů, které nemění data, ukládá Hyperdrive odpověď do mezipaměti po nastavenou max_age. Když váš Worker později odešle dotaz, který odpovídá tomu původnímu, Hyperdrive vrátí odpověď z mezipaměti místo toho, aby dotaz posílal zpět do zdrojové databáze.
Ukládání do mezipaměti snižuje zátěž vaší zdrojové databáze a zrychluje odezvu vašich dotazů.
Hyperdrive neinvaliduje výsledky čtecích dotazů uložené v mezipaměti, když vaše aplikace zapisuje do databáze. Pokud vaše aplikace potřebuje konzistenci read-after-write, přečtěte si Ukládání dotazů do mezipaměti s návodem, jak použít samostatnou konfiguraci Hyperdrive s vypnutou mezipamětí pro čtení, jež musí vracet aktuální data.
Další informace o chování a konfiguraci ukládání dotazů do mezipaměti najdete v Ukládání dotazů do mezipaměti.
Režim sdružování
Connection pooler Hyperdrive pracuje v transakčním režimu, kdy klient, který dotaz provádí, komunikuje po celou dobu transakce přes jedno připojení. Po dokončení transakce se připojení vrátí do fondu.
Hyperdrive podporuje SET příkazy ↗ po dobu trvání transakce nebo dotazu. Pokud například ručně vytvoříte transakci pomocí BEGIN/COMMIT, SET příkazy v rámci transakce se projeví. Dotaz, který navíc obsahuje SET příkaz (SET X; SELECT foo FROM bar;) také použije SET příkaz. Jakmile se připojení vrátí do fondu, je RESET tak, aby SET příkazy se u následujících dotazů už neuplatní.
To znamená, že jedno vyvolání Workeru může pro provedení databázových operací získat více připojení a může být nutné SET žádné konfigurace pro každý dotaz nebo transakci. Nedoporučuje se obalovat více databázových operací jedinou transakcí, aby se zachovala SET stavu. Ovlivní to výkon a škálování Hyperdrive, protože připojení nelze po dobu trvání transakce znovu použít jinými izoláty Workeru.
Hyperdrive podporuje pojmenované prepared statements, jak jsou implementovány v postgres.js a node-postgres ovladače. Pojmenované připravené příkazy (prepared statements) u jiných ovladačů mohou mít horší výkon nebo nemusí být podporovány.