Производительность Redis с экземпляром, управляемым цифровым океаном

#redis #digital-ocean #ioredis

#redis #digital-ocean #ioredis

Вопрос:

Я использую NodeJS для подключения моей цифровой капли океана (Ubuntu 20.04) к экземпляру Redis, управляемому цифровым океаном. Я использую библиотеку ioredis npm.

Рассмотрим простой тривиальный код ниже. Этот код отлично работает с именем общедоступной сети, хотя и занимает около 400 мс. Если я использую имя частной сети, весь скрипт зависает. Я также пробовал использовать частный IP 10 … *, но это тоже не работает.

Есть ли у кого-нибудь здесь какой-либо опыт или понимание того, как напрямую подключиться к VPC? Есть ли какой-то конкретный способ использовать имя частной сети?

 const Redis = require("ioredis");

(async () => {
  // Spin up a redis client
  const redis = new Redis({
    host: "db-redis-**************-0.b.db.ondigitalocean.com",
    port: *****,
    username: "******",
    password: "**********",
    tls: {
      key: "",
      cert: "",
    },
  });

  console.time("Total time to write/read a 10 character string to redis");

  // Generate a random string
  const generateRandomString = (length = 6) =>
    Math.random().toString(20).substr(2, length);

  // Save data to the redis server with a TTL of 2 miniutes
  redis.set("redisTest", generateRandomString(10), "EX", 120);

  // Now read it back
  await redis.get("redisTest", function (err, result) {
    if (err) {
      console.error(err);
    } else {
      console.log("Data retrieved: ", result);
    }
  });

  // Done
  console.log("Done.");
  console.timeEnd("Total time to write/read a 10 character string to redis");
})();
 

Комментарии:

1. Находится ли ваш Droplet в том же VPC, что и ваш сервер Redis? Скорее всего, зависание — это ошибка брандмауэра при попытке подключения, а не проблема с производительностью, поэтому я бы предположил, что они находятся в разных виртуальных машинах.

2. @RobertNubel Спасибо — это помогло, потому что я понял, что они находятся в разных регионах — переместили оба в тот же регион, что и droplet, и теперь имя меняется. Спасибо, сэр.

3. Рад это слышать! Я добавил информацию в качестве ответа ниже.

Ответ №1:

Если использование адреса частной сети зависает при открытии соединения, это, вероятно, связано с тем, что ваш Droplet не находится в том же VPC, что и ваша база данных Redis. В вашем случае оказалось, что Droplet и Redis находятся в разных регионах, поэтому перемещение их в один и тот же регион (и обеспечение того, чтобы они находились в одном и том же VPC в этом регионе) должно решить проблему.