🌍 Привет мир! 👋🏻
🌍 Привет мир! 👋🏻
Сегодня важная тема о том, почему плохо использовать обычный Map в Node.js для кэширования данных. 🤨
💥 В чём проблема?
Рассмотрим пример:
На первый взгляд 👀, всё просто и понятно. Но проблема всплывает, когда ваше приложение развёрнуто на нескольких инстансах Node.js (например, за балансировщиком нагрузки).
🌐 Что значит несколько инстансов приложения и для чего это нужно?
Когда ваше приложение становится популярным, одного инстанса Node.js может не хватать для обработки всех запросов. Чтобы приложение не падало под нагрузкой и быстрее отвечало пользователям, запускается несколько одинаковых экземпляров (инстансов) приложения, между которыми балансировщик нагрузки равномерно распределяет входящие запросы.
Таким образом, увеличивается отказоустойчивость, масштабируемость и производительность приложения. Если один инстанс выходит из строя, запросы автоматически перенаправляются на работающие инстансы.
⁉️ Почему локальный Map плохо подходит в таком случае?
Каждый инстанс Node.js хранит свою отдельную копию Map. Данные, сохранённые в одном инстансе, недоступны в других. Таким образом тяжёлая бизнес-логика повторно выполняется на каждом новом инстансе, что приводит к ненужным затратам ресурсов.
🔥 К чему это приводит?
✏️ Повышение нагрузки на серверы и базы данных.
✏️ Значительное падение производительности приложения.
✏️ Нестабильность работы в условиях высоких нагрузок.
💡 Как делать правильно?
Использовать централизованные системы кэширования:
🔖 Redis
🔖 Memcached
🔖 Другие распределённые кэши
Это гарантирует, что данные будут одинаковыми и актуальными для всех инстансов вашего приложения.
⚙️ Пример правильного подхода (Redis):
🎙 Итог
Используйте правильные инструменты и подходы — избегайте локального кэширования в многопроцессорных средах. Ваше приложение скажет вам спасибо! 😄
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#NODEJS #BESTPRACTICES
Сегодня важная тема о том, почему плохо использовать обычный Map в Node.js для кэширования данных. 🤨
💥 В чём проблема?
Рассмотрим пример:
protected translationsCache: TranslationsCache = new Map();
if (this.translationsCache.has(key)) {
return this.translationsCache.get(key);
} else {
const data = await complexAndHeavyLogic(key);
this.translationsCache.set(key, data);
return data;
}На первый взгляд 👀, всё просто и понятно. Но проблема всплывает, когда ваше приложение развёрнуто на нескольких инстансах Node.js (например, за балансировщиком нагрузки).
🌐 Что значит несколько инстансов приложения и для чего это нужно?
Когда ваше приложение становится популярным, одного инстанса Node.js может не хватать для обработки всех запросов. Чтобы приложение не падало под нагрузкой и быстрее отвечало пользователям, запускается несколько одинаковых экземпляров (инстансов) приложения, между которыми балансировщик нагрузки равномерно распределяет входящие запросы.
Таким образом, увеличивается отказоустойчивость, масштабируемость и производительность приложения. Если один инстанс выходит из строя, запросы автоматически перенаправляются на работающие инстансы.
⁉️ Почему локальный Map плохо подходит в таком случае?
Каждый инстанс Node.js хранит свою отдельную копию Map. Данные, сохранённые в одном инстансе, недоступны в других. Таким образом тяжёлая бизнес-логика повторно выполняется на каждом новом инстансе, что приводит к ненужным затратам ресурсов.
🔥 К чему это приводит?
✏️ Повышение нагрузки на серверы и базы данных.
✏️ Значительное падение производительности приложения.
✏️ Нестабильность работы в условиях высоких нагрузок.
💡 Как делать правильно?
Использовать централизованные системы кэширования:
🔖 Redis
🔖 Memcached
🔖 Другие распределённые кэши
Это гарантирует, что данные будут одинаковыми и актуальными для всех инстансов вашего приложения.
⚙️ Пример правильного подхода (Redis):
const data = await redis.get(key);
if (data) {
return JSON.parse(data);
} else {
const result = await complexAndHeavyLogic(key);
await redis.set(key, JSON.stringify(result));
return result;
}🎙 Итог
Используйте правильные инструменты и подходы — избегайте локального кэширования в многопроцессорных средах. Ваше приложение скажет вам спасибо! 😄
💬 Делитесь своим мнением в комментариях👇! Если вам понравилась статья, не забудьте поставить лайк! 👍
#NODEJS #BESTPRACTICES

Хотите больше таких постов?
Подпишитесь на канал и читайте продолжение в Telegram.