TGViewer
Джун на фронте | IT Dev Log Джун на фронте | IT Dev Log @divatoz · 7.44K subscribers
Post #1526 3.66K
Как я навайбкодил балансировщик нагрузки

Оказалось, что на работе есть канал Education, о котором я узнал вспомнил только через год. Там читают лекции по разным темам: от Figma до ETL-систем, на курс по которым я записался.

🖼 Что такое ETL: это аббревиатура от Extract, Transform, Load (Извлечение, Преобразование, Загрузка). Например, когда я занимался парсингом вакансий, возник вопрос: что делать с полученными данными о вакансии после скрапинга?

1️⃣ Cохранить большой JSON в MongoDB и потом по ID и описанию выполнить Load с Transform, чтоб генерировать сопроводительные письма с откликами?

2️⃣ Или сначала выбрать нужные поля (Transform), сделать Load с описанием и ID в БД, а затем отправлять отклики ?

В первом случае я использовал ELT, а во втором — ETL. Но суть не в этом. Главное, что оба подхода уступают событийным системам.

🔃 Что такое события: это когда, вместо того чтобы ждать ответ от сервера по REST, срабатывает триггер, и UI обновляется сам (привет WebSocket).

Другой пример: когда мы кликаем мышью в DOM, это тоже событие, которое запускает все, что подписано на него. Например, выпадающее меню.

События важны не только для общения клиента с сервером или внутри DOM, но и для создания гибких и масштабируемых систем, которые могут реагировать на изменения состояния в реальном времени.

❤️ Пример с лайками: что делать, если миллионы пользователей ставят лайки одновременно? Какое состояние нужно передать клиенту, который только наблюдает?

Ответ: необходимо использовать промежуточный слой, который будет буфером для всех событий лайков.

Этот слой должен возвращать приблизительный результат, пока данные изменяются слишком быстро, а истинный при обнаружении некоторой задержки (лайки перестали ставить)

👥 Пример из ресторана: представим, что у нас есть очередь заказов, и работники (модули повора) должны их выполнять. Например, приготовить пиццу или бургер…(отправить отклик, придумать сопроводительное письмо)

Когда система запускается, она выводит свободных работников «на линию», которые начинают слушать события. Работники берут доступные задачи (заказы) из очереди.

Здесь в работу вступает еще один модуль/слой/сервис — распределитель задач. Он фильтрует заказы, чтобы, бургер не попал к пиццайоле и наоборот.

📷 Такая система называется балансировщиком нагрузки. Я столкнулся с этим, когда подключал клиента для поиска вакансий к своему бэкенду.

Одного процессора на сервере хватало только для одновременного запуска одной копии Puppeteer-а. Это заставляло ставить остальные запросы в очередь с помощью BullMQ и Redis.

В ДЗ же, нам предложили самим запилить систему очередей, где любая задача выполняется в ответ на событие. Эти события всегда прослушиваются по умолчанию.

🎁 В репозитории можно найти два модуля. Первый — это сам балансировщик с двумя работниками, второй — веб-интерфейс, который адаптирует балансировщик под бизнес-процесс доставки еды из ресторана.

Подобную схему можно использовать для выполнения любых других задач.

Например, рассылка комментариев под постами, массовая отправка откликов или любая другая задача с готовыми данными и работником для неё.

📊 #статистика День 1313 | 3283 час в IT
  • 👍 9
  • 👎 2
More from @divatoz
  1. Oct 2, 2026Карпаты рассказал, как теперь правильно общаться с LLM Совсем недавно переживали, что Андр…
  2. Sep 30, 2026Рабочий дневник: День 568 Как я mcdis.ru верстал 🚬 Сегодня расскажу про процессы, а не пр…
  3. Sep 29, 2026ну в целом, пока что удивительно блеклая презентация. клон Muse/Grok-bot, подписка за $500…
  4. Sep 26, 2026ИИ официально стоит дороже чем марихуана и фентанил, а через два года станет дороже кокаин…
  5. Sep 25, 2026Как я этот пост на год подписки обменял С поста про расшифровку созвонов ко мне пришёл мар…
  6. Sep 18, 2026Как Я/Мы platform-explorer.com релизим 😎 Версия релиза 2.4.0 была хороша, но впереди была…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →