Object Pool для SMB‑сессий

Мы — aify.studio: делаем ИИ‑системы и надёжный backend, который решает бизнес‑задачи, а не просто «показывает демку». Пишем про архитектуру, LangGraph/LangSmith, базы данных и реальные кейсы внедрения — честно, по делу и с метриками. Если вам нужны практические решения и инженерные подходы без хайпа — вы по адресу.

object poolsmbпул

#Rokcet_post

Салют!

История такова: к нам обратились с задачей реализовать рассылку клиентам через SMTP-сервер.

Я не буду вам рассказывать о всей реализации, но суть была такая: есть удаленный сервер с SMB-shared folder, есть база юзеров. Нужно сделать рассылку файлов всем пользователям во время Ч.

В начале я не сильно задумывался над тем как это сделать, поэтому просто посмотрел либы для работы с смб и взял одну из них. После того, как некий MVP продукт был готов, я немного разочаровался временем, затрачиваемым на отправку одного письма в 3 секунды. Боттелнеком здесь явно была смб сессия(позднее я вычитал в документации либы, что из коробки мультисессия не поддерживается). И вот тут мы подходим к основной теме статьи - это паттерн Object Pool. Object Pool - это паттерн проектирования, который предназначен для управления набором повторно используемых объектов.

Основные аспекты паттерна:

  1. Экономия ресурсов: создание и уничтожение объектов (в частности, сетевые соединения) может быть дорогостоящим по времени и ресурсам.
  2. Повышение производительности: повторное использование объектов сокращает накладные расходы( обеспечиваем конкурентное выполнение).
  3. Контроль за количеством активных объектов: пул ограничивает максимальное число одновременно используемых ресурсов, что предотвращает их истощение.

Принцип:

  1. При инициализации создается фиксированное или минимальное количество объектов.
  2. Когда клиенту нужно подключение (или другой объект), пул выдает свободный объект.
  3. Клиент использует объект.
  4. После использования объект возвращается обратно в пул.
  5. Если все объекты заняты, клиент может ждать освобождения или получить ошибку.

В моем случае я создавал пул SMB сессий и использовать их, чтобы достать файлик из общей папки, вот таким нехитрым путем я убежал от страшных 3 секунд и пришел к желаемому конкурентному и досточно быстрому решению задачи.😎

Иллюстрация: стилизованный персонаж aify отправляет письма в три почтовых ящика, показывая параллельную рассылку файлов по SMB.
Схематическая иллюстрация рассылки файлов на несколько адресов через SMB.

Читайте так же