apple_factory · инфраструктура

Раскладка фермы

Сколько нужно серверов, какие они, как связаны между собой — и где схема упирается в потолок. Все цифры ниже посчитаны от реальных замеров действующего завода, а не от оценок.

Проект · не реализовано 22 июля 2026 Цель: 900 аккаунтов в сутки
7коробок в схеме
5,4 минсборка болванки
25–30 минполный прогон
7рабочих мест на цехе
907 ГБархивов в сутки

01Схема серверов

Пять ролей, семь коробок. Каждая роль отвечает ровно за одно.

Погонщик ×3

Самодостаточный цех: сам штампует холодные болванки, сам держит горячий запас, сам гоняет прогоны. Ничего ценного не хранит — умер, заменили, потерь нет.

Ядра
8 (16 потоков)
Память
64 ГБ (задано)
Диски
2 × 1 ТБ NVMe, зеркало

Склад ×1

Пассивная архивация и хранение упакованных образов. Плюс эталоны, учёт завода и резерв. В прогонах не участвует.

Ядра
16 (упаковка ест ядра)
Память
64 ГБ
Диски
2 × 2 ТБ NVMe + полка

Почтовик ×2

Приём кодов и выдача их клиентам по договору. Отдельный продукт, не часть завода. Требование — бесперебойность.

Ядра
8
Память
64 ГБ
Диски
2 × 1 ТБ NVMe, зеркало

Сейф ×2

Не сервер, а дисковая полка. Копии архивов, паспортов, учёта и кода завода у двух разных хостеров. Наружу не смотрит.

Объём
от 5 ТБ
Режим
только дописывать
Цена
≈ €13/мес каждая

Как связаны

  • Погонщик → Склад. Готовые машины уезжают на упаковку. Единственный тяжёлый поток в схеме — см. раздел «Стены».
  • Склад → Сейф. Упакованные архивы и паспорта, ночным ходом, без права стирать.
  • Погонщик → Почтовик. Запрос кода при регистрации. Байты, нагрузки нет.
  • Все → Склад. Учёт: статусы машин, журналы прогонов, карточки аккаунтов. Единицы мегабайт.
  • Эталоны лежат копией на каждом погонщике — иначе пришлось бы возить болванки по сети, а это десять терабайт в сутки.

02Погонщик изнутри

Один сервер делает всё: штамповку, разогрев и прогоны. Считаем, что во что упирается.

Что стоит на сервереШтукПамятьКомментарий
Активные прогоны432 ГБсам конвейер
Горячая включённая18 ГБстраховка на сорванное оживление
Горячие офлайн3разогреты и погашены, стоят только диска
Сборка болванок18 ГБзанимает память лишь треть времени
Сам сервер8 ГБсистема и служебное
Итого956 из 64 ГБровно 7 мест, всё занято
Что даёт «горячий офлайн»

Раньше схему «3 прогона + 3 горячих» отклонили: боялись, что разогрев новой машины поверх активных прогонов даст запаздывающие и смазанные кадры — ровно то, ради чего ферму и разносят по серверам. Горячий офлайн снимает это возражение полностью: разогрев уже произошёл заранее, запуск такой машины — это просто включение, без всплеска. Схема становится корректной.

Диски

Тринадцать машин по ~20 ГБ, местный запас холодных болванок и готовые, ждущие отправки — около 400 ГБ. Терабайтного зеркала хватает с запасом.

Зеркало проверять руками

На действующем сервере Маков зеркала фактически нет: массивы объявлены парными, а диск в каждом один. На новых коробках эту ошибку повторять нельзя — смерть диска на погонщике означает потерю всех машин в работе.

03Три стадии: колд · хот · прогон

Где проходит граница между ними и что каждая оставляет после себя.

СтадияЧто в неё входитЧем заканчиваетсяСрок годности
Колдуникальное железо, чистая система, связка ключей. Ничего про страну, ничего про сетьзаморозка, сеть в карантинебессрочно
Хотвсё, что привязывает машину к стране: туннель, проверка утечек, часовой пояс и язык, персона, почта, паспортмашина гасится — память не держит2 часа
Прогонвключение готовой, быстрая проверка что туннель жив и адрес тот же, дальше регистрация и входаккаунт или провалодин спринт, один адрес

Смысл границы: всё дорогое и медленное — подбор чистого выхода в сеть, страна, персона — делается заранее и остаётся на диске. Прогону остаётся только включить машину.

Главное ограничение: туннель живёт 2 часа

Всё остальное в стадии «хот» вечно — оно лежит на диске. А туннель нет. Значит выключенный горячий запас обязан расходоваться за два часа. При четырёх-пяти потоках запас из трёх машин оборачивается за двадцать минут — укладываемся с огромной форой. А вот запас в десять машин «на всякий случай» бессмысленен: половина протухнет.

Если горячая простояла дольше двух часов, при старте придётся заново поднимать туннель и проверять утечки — это ещё полторы минуты, и выигрыш почти исчезает. Просроченная горячая не экономит ничего.

Сколько занимает взять машину

Откуда берёмДо готовностиЧем платим
Горячая включённаясекундыслот памяти всё время ожидания
Горячая выключенная (в пределах 2 часов)40–90 сектолько одна загрузка
Горячая просроченная~2,5 минзагрузка + туннель заново
Холодная, полное оживление~3 минзагрузка + 100 сек ожидания сети
Проверки при старте уже есть

«Дополнительные проверки» на входе в прогон изобретать не нужно — они в коде: адрес выхода прощупывается через туннель с тремя попытками, при молчании перестилается приёмник и проба повторяется.

04Замеры: из чего состоит сборка

Медиана по пятнадцати последним сборкам действующего завода. Не оценка — журнал.

ШагСекундДоляЧем грузит
Копирование с эталона + правка железа15348%диск · машина выключена
Настройка внутри системы6219%лёгкое · машина работает
Правка меток диска3310%диск · машина выключена
Загрузка278%всплеск процессора
Заморозка237%диск
Вход и связка ключей186%лёгкое
Правка учётной записи62%ничто
Вся сборка3225,4 мин
Главное отсюда

Больше половины сборки машина вообще не запущена. Копирование, правка меток и заморозка — 209 секунд из 322, и всё это время память не занята. Работает машина только последние две минуты. Поэтому штамповка на том же сервере, что и прогоны, обходится куда дешевле, чем кажется.

Остальные этапы, для сравнения

ЭтапДлительностьПамять занята
Сборка холодной болванки5,4 мин~40% времени
Оживление (разогрев горячей)3–4 минвсё время
Вход в устройство7–35 мин, обычно 12–15всё время
Полный прогон до готового аккаунта25–30 минвсё время

05Три нагрузки — кто чем платит

Самый практичный вывод всего расчёта.

Диск ← копирование

16 ГБ за 153 секунды — это ~200 МБ/с. Диск NVMe тянет две-три тысячи. Сборка съедает около десяти процентов дисковых возможностей. Даже три параллельных — треть, и прогонам это не мешает: они диск почти не трогают.

Процессор ← загрузки

Дорого не копирование, а загрузка: 27 секунд по два-четыре ядра. На цех выходит 432 загрузки в сутки — одна каждые 3,5 минуты, то есть примерно 15% времени что-то грузится. Шестнадцать потоков это переваривают, если одновременных загрузок не больше двух-трёх.

Память ← время

Память покупается длительностью. Прогон держит слот полчаса, горячий в ожидании — часами, а сборка всего две минуты. Поэтому главные едоки — прогоны и горячий запас, а штамповка на их фоне мелочь.

Итоговый порядок: память съедают прогоны и горячий запас, процессор — загрузки, диск — копирование. И только диск относится к штамповке, а по нему запас десятикратный.

06Единственное узкое место — память

Железо задано: 64 ГБ. Считаем, что из этого выходит.

При 64 ГБ схема «3 прогона + 3 горячих + штамповка» сходится ровно в ноль:

При 64 ГБПамять
3 прогона + 3 горячих онлайн48 ГБ
Сам сервер8 ГБ
Одна сборка в работе8 ГБ
Итого64 из 64 ГБ — запас нулевой

Вторая параллельная сборка уже не влезает. А нужна как раз примерно одна непрерывная: 216 болванок в сутки × 5,4 минуты = девятнадцать машино-часов, сборщик почти не простаивает.

Рекомендация

Начинать с четырёх потоков, а не пяти. Каждый старт прогона съедает болванку — включая неудачный. Пять потоков дают 232 старта в сутки, то есть сборщику 21 час работы из 24 — загрузка 87%, запаса нет. Четыре потока дают 186 стартов и 70% загрузки — конструкция начинает дышать. Пятый поток добавляет 20% выхода, но забирает весь запас прочности. Включать его стоит, когда всё остальное отлажено.

СхемаПотоковАккаунтов в суткиЗапас памяти
3 цеха × 4 потока12~560сборщик на 70%
3 цеха × 5 потоков15~700сборщик на 87%, впритык
5 цехов × 4 потока20~930цель достигнута

07Склад: упаковка и хранение

Пассивная архивация. В прогонах не участвует, но именно здесь самая большая цифра.

Работа

Упаковка одного аккаунта — 10–20 минут сжатия. При 648 в сутки это 162 машино-часа в день, то есть нужно семь упаковщиков круглосуточно. Восьми ядер не хватит — 16 ядер минимум. Памяти много не нужно, а вот диск нужен быстрый и просторный как перевалочная площадка.

Хранение

Архив аккаунта весит 1,4 ГБ — это уже с учётом того, что одинаковые куски системы не дублируются.

ПериодОбъёмПорядок цены
Сутки907 ГБ
Неделя6,4 ТБполка на 5 ТБ забивается за 5,5 дней
Месяц27 ТБ≈ €60–80 в месяц
Год331 ТБ≈ €700 в месяц и растёт
Нужна политика хранения

Без неё расходы растут бесконечно. Рабочий вариант: держать полный образ 30 дней (27 ТБ, ≈€60–80 в месяц), а дальше оставлять от аккаунта только паспорт с ключами и доступами — мегабайты вместо гигабайтов. Тогда расходы встают на месте вместо бесконечного роста.

08Почтовик

Отдельный продукт: аренда ящиков по договору. Здесь — только место в раскладке.

Масштаб: 27 тысяч новых адресов в сутки, 50–150 тысяч приходящих кодов, 50–100 тысяч адресов живут одновременно. Из этого следует, что адрес живёт два-три дня и выгорает — это проток, а не склад, и размер не растёт бесконечно.

Приём почты

150 тысяч в сутки = 2 письма в секунду, десяток в пик. Обычный почтовый сервер держит сотни в секунду. Запас стократный, узким местом не будет никогда.

База состояния

До миллиона записей в сутки — лёгкая нагрузка. Накопление ≈50 ГБ в год. Терабайт покрывает годы. Важна не ёмкость, а скорость диска и память под указатели.

Выдача клиентам

Весь риск здесь, и он конструктивный, не железный. Если клиенты опрашивают — 16 тысяч запросов в секунду. Если уведомляем сами — два. Разница в восемь тысяч раз.

Заложить сразу

Уведомлять, а не давать опрашивать · приём и выдача разными процессами через очередь · база отдельной сущностью с первого дня · ничего не держать в памяти процесса · почтовые записи сразу на два приёмника · учёт по клиентам с первого дня · срок хранения писем с первого дня · копия базы на вторую машину в реальном времени.

Встроенная страховка

У почты есть штатный запасной приёмник: если основной лежит, отправитель сам повторяет и отдаёт запасному. Письма не теряются в принципе — приходят с задержкой, и стоит это ноль. Ломается не приём, а выдача — её и дублируем парой узлов у разных хостеров.

09Сейф — почему отдельно от почтовика

Требования противоположны, поэтому одной коробкой их не закрыть.

Почтовик

Живой сервис. Обязан торчать наружу и быть доступен круглосуточно. Данных почти нет — письма транзитные. Требование: бесперебойность.

Сейф

Холодный склад. Может быть выключен полсуток. Наружу смотреть не должен вообще. Требование: сохранность и объём.

Сложить их вместе — значит поставить самое ценное за самой атакуемой дверью. Плюс разные судьбы: почтовик растёт как продукт, архив вечен и его не трогают.

Сейф стоит держать в режиме «только дописывать» — тогда ни взлом завода, ни ошибочная команда не сотрут архивы, можно лишь добавить новые. Две полки у разных хостеров: две полки в одном дата-центре — это один пожар, а не резерв.

10Стены схемы

Три места, где конструкция упирается при 648 аккаунтах в сутки. Все три — про одно и то же.

ГдеСколькоЧто это значит
Подвоз болванок по сети10,4 ТБ/сутгигабитный канал на 100% круглосуточно
Отдача готовых машин11,7 ТБ/сутта же стена, зеркально
Рост архивов907 ГБ/сут331 ТБ в год
Общий корень и общее лекарство

Все три стены — про то, что мы возим и храним целые машины. При трёх аккаунтах в сутки это нормально, при шестистах разваливается. Лекарство одно: возить рецепты и паспорта, а не диски.

  • Штамповку — на сами цеха. 216 болванок в сутки × 5,4 минуты = девятнадцать машино-часов, то есть примерно один непрерывно работающий сборщик. Это ровный фоновый ручеёк, а не пик, ради избавления от которого затевался разнос. Эталоны кладём копией на каждый цех: 186 ГБ разово вместо десяти терабайт в сутки.
  • Архив — паспорт, а не образ. Машина нужна, чтобы аккаунт создать и получить доверие. Дальше аккаунт работается без неё. Значит хранить надо ключи, доступы, отпечаток железа и рабочую сессию — мегабайты вместо пятнадцати гигабайт.
Не забыть при переносе эталонов

Заморозка не переезжает вместе с машиной. На приёмнике обязательна повторная заморозка, иначе оживление не найдёт точку отката.

11Что решить до покупки железа

  • Аккаунты после создания живут дальше как рабочие активы? Если аккаунт выпускает адреса каждый день, он не товар на полке, а работающий станок — тогда образ вообще не надо архивировать: из машины извлекается рабочая сессия, машина сносится, станок крутится дальше. От ответа зависит, нужен сейф на 5 терабайт или на 500, а это разница между €13 и €700 в месяц.
  • Пятьдесят-сто тысяч адресов «в моменте» — это запас на полке или одновременные аренды? Разница в десять раз по нагрузке на выдачу.
  • Только адреса Apple или свои домены тоже? Свои безлимитны и стоят копейки, но не несут доверия Apple. Скорее всего продукт двухуровневый — и от этого зависит вся учётная часть.
  • Срок хранения полных образов. Тридцать дней — рабочая отправная точка, но это решение про деньги, а не про технику.