Всем привет! Я новичок в DevOps, и мне необходимо построить систему, которая сможет собрать файлы с 60к хостов, которые будут делать это, вероятнее всего, параллельно.
Клиент (sender-service)
На каждом хосте запускается клиент на golang(minio-go), который регулярками обходит директории и достаёт из них файлы(файлы в основном небольшие). К этим файлам добавляется префикс hostname/filepath и они сразу же отправляются(стримятся) по сети в S3 в сжатом потоке(lz4.Writer). Каждый клиент запускается на хосте единоразово и работает в однопоточном режиме. За свою работу sender-service отправит всего около 100мб сжатых данных и порядка 3-5к файлов.
Кластер MinIO (предполагаемый мной):
- Количество хостов: 4
- ОС: linux
- Количество ядер: 8-16
- ОЗУ: 32/64 гб
- Количество инстансов MinIO: 4, один на хост
- Количество дисков: 3 локальных SSD (1-2 ТБ), итого 12 дисков
- Внутреннее соединение между нодами: 10 Gbps
- Используется EC 8+4
- Внешний балансировщик (думаю насчет HAProxy или Envoy) с round-robin
reader-service
Когда sender-service закончит работу, он отправит свой hostname в reader-service, в свою очередь он сходит в S3 и достанет из бакета все объекты по этому префиксу. Все эти объекты reader-service заархивирует и отправит во внешнюю систему. То есть, нагрузка на чтение из S3 тоже будет и это нужно как-то учитывать.
(!) Этот сервис обрабатывает ровно одного клиента за раз
Вопросы:
- Выдержит ли такая конфигурация MinIO 60 000 одновременных клиентов, если нагрузка идёт в стриминге?
- Есть ли ограничение на количество одновременных соединений/транзакций в MinIO, о котором стоит знать?
- Есть ли известные узкие места в такой архитектуре?
Очень важно: не потерять файлы
Чем можно пренебречь:
- Скорость: главное, чтоб всё собралось
- Долго и надежно хранить: после отправки архива reader-service'ом, данные в бакете по этому хосту больше не нужны
Подытожу:
Система работает разово, но с высокой интенсивностью. Нужно минимизировать стоимость инфраструктуры, не потеряв файлы при параллельной отправке от 60к клиентов, при этом скоростью и долговечностью можно пренебречь. Буду признателен за советы, практический опыт или ссылки на бенчмарки.