sql >> Databáze >  >> RDS >> Mysql

AWS Lambda – ukládání do mezipaměti MySQL

První věcí by bylo pochopit, jak require pracuje v NodeJS. Doporučuji, abyste si prošli tento článek pokud máte zájem dozvědět se o tom více.

Nyní, jakmile si vyžádáte připojení, máte ho navždy a už ho nebudete potřebovat. To odpovídá tomu, co hledáte, protože nechcete zahltit svou databázi vytvářením nového připojení pokaždé.

Ale je tu problém...

Lambda studené starty

Kdykoli poprvé vyvoláte funkci Lambda, roztočí nádobu s vaší funkcí uvnitř a udrží ji při životě přibližně 5 minut. Je velmi pravděpodobné (ačkoli to není zaručeno), že pokaždé zasáhnete stejný kontejner, pokud zadáváte vždy 1 požadavek. Ale co se stane, když máte 2 žádosti současně? Poté se paralelně s předchozí, již zahřátou nádobou roztočí další nádoba. Právě jste vytvořili další připojení ve vaší databázi a nyní máte 2 kontejnery. Nyní hádejte, co se stane, když máte 3 souběžné požadavky? Ano! Jeden kontejner navíc, což se rovná jednomu dalšímu DB připojení.

Dokud existují nové požadavky na vaše funkce Lambda, ve výchozím nastavení se budou škálovat tak, aby vyhovovaly poptávce (můžete to nakonfigurovat v konzole tak, abyste omezili provádění na tolik souběžných spuštění, kolik chcete – při respektování limitů vašeho účtu)

Nemůžete se bezpečně ujistit, že máte pevný počet připojení k databázi pouhým vyžadováním váš kód při vyvolání funkce. Dobrá věc je, že to není vaše chyba. Přesně takto se chovají funkce Lambda.

...další přístup je

ukládat data, která chcete, do mezipaměti ve skutečném systému mezipaměti, jako je ElasticCache , například. Pak byste mohli mít jednu funkci Lambda spuštěnou Událostí CloudWatch který běží v určité frekvenci. Tato funkce by pak dotazovala vaši DB a ukládala výsledky do vaší externí mezipaměti. Tímto způsobem zajistíte, že vaše připojení k databázi bude otevřeno pouze jednou lambdou najednou, protože bude respektovat událost CloudWatch, která se pro každý spouštěč spouští pouze jednou.

UPRAVIT :poté, co OP poslal odkaz do komentářů, rozhodl jsem se přidat pár dalších informací, abych objasnil, co chce zmíněný článek říci

Z článku:

A to je přesně to, co děláte. A tohle funguje! Problém ale je, pokud máte N spojení (Lambda Requests) současně. Pokud nenastavíte žádné limity, ve výchozím nastavení lze souběžně roztočit až 1000 funkcí Lambda. Nyní, pokud během následujících 5 minut provedete současně dalších 1000 požadavků, je velmi pravděpodobné, že nebudete otevírat žádná nová připojení, protože již byla otevřena při předchozích vyvolání a kontejnery jsou stále živé.



  1. SQL Jak aktualizovat SUM sloupce přes skupinu ve stejné tabulce

  2. Cizí klíč s více sloupci:Nastavte jeden sloupec na hodnotu Null ON DELETE namísto všech

  3. Vytvořte a nakonfigurujte Oracle Linked Server v SQL Server

  4. Připojení odmítnuto (PGError) (postgresql a rails)