Кому полезно: командам с удалёнными Mac-раннерами в APAC и США, у которых днём очереди простаивают, а ночью растут лавинообразно, а посуточная аренда и месячный счёт расходятся с утилизацией. Результат: закодировать UTC-окна, теги пулов, потолки параллельности и амортизацию аренды в одной аудируемой таблице со ссылками на гайды по нодам, раннерам и артефактам. Структура: шесть корневых причин, матрица шести регионов, YAML-набросок, предупреждение, шестишаговый runbook, три KPI, заключение, FAQ.
Если вы держите self-hosted раннеры в Сингапуре, Токио, Сеуле, Гонконге, Вирджинии или Bay Area, но тяжёлые задачи запускаете одним cron в часовом поясе штаб-квартиры, типичный исход — простаивающая ёмкость в местные рабочие часы и штормы merge после конца дня в другом регионе. Редко не хватает Mac; чаще сбит такт триггеров относительно коллаборации, усугублённый низкой утилизацией аренды при календарном биллинге. Ниже шесть повторяющихся ошибок платформы.
В эксплуатации накладывайте глубину очереди и загрузку CPU в UTC и еженедельно выделяйте структурные простои, прежде чем покупать ядра.
max-parallel и параллельности на репозиторий Git fetch и заливки в registry накладываются на ретраи из runbook Git/registry, давая ложный кризис ёмкости.Чтобы удалённые Apple Silicon стали аудируемым 24-часовым листом ёмкости, привяжите часовые окна, пулы раннеров и уровни аренды к одному change-тикету — это дополняет выбор CPU M4 vs M4 Pro, а не заменяет его.
Окна показаны относительно UTC; замените на ваши реальные часовые пояса спринта. Если основной репозиторий в US East, держите компиляцию/юнит-тесты близко к этому региону, а тяжёлый Simulator — там, где кластер разработчиков, чтобы сократить транстихоокеанский churn артефактов.
| Регион | Смещение UTC (примеры) | Типичная роль релея | Лучше всего подходят | Главный риск |
|---|---|---|---|---|
| Сингапур | +8 | Утренние сборки APAC; буфер для передач EU/AF | Компиляция, юнит-тесты, lint, прогрев кэша | Ограничивать параллель при пересечении US-пиков; следить за конкуренцией Git egress |
| Япония | +9 | Ночной batch под JP-продукт | Полные регрессии, проверки перед промоушеном | Изолировать signing-пулы при столкновении JP/US пиков |
| Южная Корея | +9 | Отдельный тег-пул от JP при разных правилах резидентности | Параллельные юниты, прогрев кэша, KR-compliance сборки | Не смешивать политики резидентности данных в общем теге |
| Гонконг | +8 | Мост для Greater Bay | Среднепараллельные сборки, mainland-оптимизированный egress | Если не совпадает с основным Git-регионом, задать SLA артефакта |
| US East (Вирджиния) | −5/−4 (DST) | Часто совпадает с крупными Git-хостами | Частые PR, merge-очереди, загрузки | Задать ключи кэша для передач APAC ночь → US день |
| US West (Bay Area) | −8/−7 (DST) | Интерактивный дебаг перед концом дня US West | Simulator, захват экрана, парный дизайн | Стоимость полосы VNC; отделить от чисто SSH batch-пулов |
Используйте шаблон во внутренней IaC или регистрации раннеров, чтобы явно зафиксировать гео/время — без дефолтного пула, который молча забирает всё. Параллельность и изоляцию секретов смотрите вместе с чеклистом self-hosted раннеров.
jobs:
compile_apac_night:
runs-on: [self-hosted, region-sg, pool-batch, window-utc18-utc06]
steps:
- run: echo "Тяжёлая компиляция вечером APAC / утренний handoff в US"
ui_us_west_day:
runs-on: [self-hosted, region-usw, pool-interactive, window-utc16-utc01]
steps:
- run: echo "Много Simulator/VNC; не отбирать batch-параллельность"
# Правило: window-* и region-* выкатываются в том же тикете, что и обновления cron
Замечание: релей не даёт права гонять подписывающие личности по ночным пулам без аудита. Метки signing/notary — только на хостах из allow-list.
Базовое железо вы уже смотрите в мультирегиональном гайде по аренде. Если теги раннеров ещё не разделены, сначала вернитесь к чеклисту.
batch (только SSH, выше параллельность), interactive (Simulator/VNC с низкими потолками), signing (allow-list, низкая параллельность) с явными запретами.Эти метрики превращают успех релея в управляемые сигналы рядом с сетевыми ретраями и глубиной очереди.
Заметка по опыту эксплуатации (не лабораторный бенчмарк): команды, которые совместно в одном ревью фиксируют часовые окна, теги пулов и потолки параллельности, обычно сокращают явные простои и превращают хаотичные пики в пики, которые можно хеджировать короткой арендой — согласуется с CapEx→OpEx, где время — часть модели ёмкости.
Если первичный регион репозитория и плотность разработчиков долго расходятся, планы релея нужно пересматривать вместе с локальностью артефактов и резидентностью; иначе сэкономленные CPU-минуты съедает трансокеаническая синхронизация.
Без явных тегов window-*, контрактов параллельности и шагов декомиссии команды откатываются к тому, кто не спит: всплески и простои остаются, а поверхность подписи растёт. Промышленный Apple Silicon CI требует выделенного bare metal, мультирегионального выбора и задокументированной аренды база+пик рядом с политикой часовых поясов.
Устный релей редко удовлетворяет аудируемым границам ключей и предсказуемому egress. Командам, которым нужно держать раннеры у первичного Git-региона и гибко перекидывать ёмкость между APAC и Северной Америкой, профессиональное Mac-облако с прозрачными мультирегиональными нодами и опциями аренды обычно спокойнее вращения загадочных хостов. MACCOME предлагает Mac mini M4 / M4 Pro в Сингапуре, Японии, Корее, Гонконге, US East и US West — сначала публичные страницы тарифов, затем приведите теги раннеров в соответствие с таблицей релея.
Пилот: краткосрочно арендовать два хоста — один у основного репозитория, второй у плотности разработчиков — дважды пройти этот шестишаговый ретро, затем решить месячные/квартальные уровни и нужен ли 2 ТБ.
FAQ
Как это связано с гайдом по стоимости аренды нод в нескольких регионах?
Гайд по нодам отвечает, куда ставить железо и какой уровень аренды выбрать; эта статья отвечает, как планировать тот же парк раннеров на сутки, чтобы очереди оставались занятыми, а пики закрывались посуточной арендой. Свяжите оба из одного обзора ёмкости. Публичные тарифы: Цены аренды Mac mini.
Работает ли релей только на GitHub-hosted runners?
Подход heatmap можно перенести, но амортизация аренды в основном для self-hosted и выделенного bare metal. На общих hosted runners сфокусируйтесь на политике merge и ключах кэша вместо релея машин.
Нужно ли класть задачи Simulator в ночной batch-пул?
Нет: Simulator и VNC держите на интерактивных пулах с низкой параллельностью; иначе вы экспортируете конкуренцию за полосу и GPU на весь флот.