AWS Lambda: Redis ElastiCache connection timeout chyba

0

Otázka

Mám lambda funkciu pomocou Uzla 12.

Musím pridať nové pripojenie do Redis databáze hostil v AWS ElastiCache.

Obaja sú v jednej súkromnej VPC a skupiny zabezpečenia/podsietí sú správne nakonfigurované.

Riešenie:

globals.js:

const redis = require('redis');
const redisClient = redis.createClient(
  `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}/${process.env.REDIS_DB}`,
);
redisClient.on('error', (err) => {
  console.log('REDIS CLIENT ERROR:' + err);
});
module.exports.globals = {
  REDIS: require('../helpers/redis')(redisClient),
};

index.js (mimo handler):

const { globals } = require('./config/globals');
global.app = globals;

const lambda_handler = (event, context, callback) => { ... }
exports.handler = lambda_handler;

helpers/redis/index.js:

const get = require('./get');
module.exports = (redisClient) => {
  return {
    get:  get(redisClient)
  };
};

helpers/redis/get.js:

module.exports = (redisClient) => {
  return (key, cb) => {
    redisClient.get(key, (err, reply) => {
      if (err) {
        cb(err);
      } else {
        cb(null, reply);
      }
    });
  };
};

Volanie funkcie:

app.REDIS.get(redisKey, (err, reply) => {
  console.log(`REDIS GET: ${err} ${reply}`);
});

Problém: Pri zvyšovaní lambda časový limit na hodnotu väčšiu ako Redis časového limitu, som si tejto chyby:

REDIS KLIENTA CHYBA:Chyba: Redis pripojenie na ... nepodarilo sa - pripojenie ETIMEDOUT ...

Doplnenie:

Snažil som sa quiting/ukončenia spojenia po každej transakcie:

module.exports = (redisClient) => {

  return (cb) => {

    redisClient.quit((err, reply) => {
      if (err) {
        cb(err);
      } else {
        cb(null, reply);
      }
    });
  };
};
app.REDIS.get(redisKey, (err, reply) => {
  console.log(`REDIS GET: ${err} ${reply}`);
  if (err) {
    cb(err);
  } else {
    if (reply) {
      app.REDIS.quit(() => {
        cb()
      });
    }
  }
})

Chyba:

REDIS ZÍSKAŤ: AbortError: DOSTAŤ nemôže byť spracované. Pripojenie je už uzavretá.

Ďalšie Poznámky:

  • Musím použiť volania, to je dôvod, prečo som sa prejsť tie v uvedených príkladoch
  • Ja používam "redis": "^3.0.2"
  • To nie je konfigurácia problém ako pamäť sa dostali sto krát v malej lehote, ale potom začal dávať časový limit chyby.
  • Všetko funguje normálne, lokálne
1

Najlepšiu odpoveď

2

To nie je konfigurácia problém ako pamäť sa dostali sto krát v malej lehote, ale potom začal dávať časový limit chyby.

myslím, že to je pôvod problému, pravdepodobne redis veľkosť databázy hit limit veľkosti, a to nemôže spracovať nové údaje?

Môžete vymazávať staré dáta v ňom?

Tiež je možné, Tvarová Pamäť má obmedzenia na nového TCP klientov pripojenia, a v prípade, ak jeho vybitá, nové prípojky sú odmietol s podobnými chybové správy, ktorú ste spomenuli.

Ak redis klienta v aws lambda funkcia nemôže nadviazať spojenie, aws lambda funkcia zlyhá - a new one je začal. Nové lambda funkcia robí jeden viac pripojenie na redis, redis nemôže spracovať ju, a ešte jedna lambda funkcia je začalo...

Tak, v jednej chvíli sme narazili limit na aktívne redis spojenia, a systém je v mŕtvom bode.

Myslím si, že možno dočasné zastavenie všetkých lambda funkcie, a scale up Elastická Pamäť redis databázy.

2021-11-23 20:45:33

Jednotlivé ElastiCache pre Redis uzly podpora až 65,000 súbežné pripojenia klienta. Akýkoľvek nápad na niektoré užitočné configuration/metriky môžem vyhľadať iné možné príčiny?
Majed Badawi

V iných jazykoch

Táto stránka je v iných jazykoch

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................