Оказалось, что на работе есть канал Education, о котором я
🖼 Что такое 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
