Mysql
 sql >> база данни >  >> RDS >> Mysql

AWS Lambda - MySQL кеширане

Първото нещо би било да разберете как require работи в NodeJS. Препоръчвам ви да преминете през този статия ако се интересувате да научите повече за това.

Сега, след като се нуждаете от вашата връзка, имате я завинаги и няма да се изисква отново. Това съответства на това, което търсите, тъй като не искате да претоварвате базата си данни, като създавате нова връзка всеки път.

Но има проблем...

Ламбда студен старт

Всеки път, когато извикате Lambda функция за първи път, тя ще завърти контейнер с вашата функция вътре в нея и ще я поддържа жива за приблизително 5 минути. Много вероятно е (въпреки че не е гарантирано) всеки път да удряте един и същ контейнер, стига да правите 1 заявка наведнъж. Но какво се случва, ако имате 2 заявки едновременно? След това друг контейнер ще се завърти успоредно с предишния, вече загрят контейнер. Току-що създадохте друга връзка във вашата база данни и сега имате 2 контейнера. Сега познайте какво се случва, ако имате 3 едновременни заявки? Да! Още един контейнер, което се равнява на още една DB връзка.

Докато има нови заявки към вашите Lambda функции, по подразбиране те ще се мащабират, за да отговорят на търсенето (можете да го конфигурирате в конзолата, за да ограничите изпълнението до толкова едновременни изпълнения, колкото искате - спазвайки ограниченията на вашия акаунт)

Не можете безопасно да се уверите, че имате фиксирано количество връзки към вашата база данни, като просто изисквате вашия код при извикване на функция. Хубавото е, че това не е ваша вина. Точно така се държат ламбда функциите.

...другият подход е

за да кеширате данните, които искате в реална система за кеширане, като ElasticCache , например. След това можете да накарате една функция Lambda да се задейства от Събитие в CloudWatch който протича в определена честота от време. След това тази функция ще поиска вашата DB и ще съхрани резултатите във вашия външен кеш. По този начин се уверявате, че вашата DB връзка се отваря само от една Lambda в даден момент, тъй като тя ще зачита събитието CloudWatch, което се оказва, че се изпълнява само веднъж на тригер.

РЕДАКТИРАНЕ :след като ОП изпрати връзка в секциите за коментари, реших да добавя още малко информация, за да изясня какво иска да каже споменатата статия

От статията:

И точно това правиш. И това работи! Но проблемът е, ако имате N връзки (Lambda Requests) по едно и също време. Ако не зададете никакви ограничения, по подразбиране могат да се завъртят едновременно до 1000 ламбда функции. Сега, ако след това направите още 1000 заявки едновременно през следващите 5 минути, много вероятно няма да отваряте нови връзки, защото те вече са били отворени при предишни извиквания и контейнерите са все още живи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL контрол на достъпа

  2. CakePHP Връзката с базата данни Mysql липсва или не може да бъде създадена

  3. Как да увеличите брояч и да върнете стойността в MySQL

  4. Spark JoinWithCassandraTable на ключа на дяла TimeStamp ЗАПЯНА

  5. Защо някои mysql връзки избират стари данни от базата данни на mysql след изтриване + вмъкване?