1. Резолвинг без представлений цепляет один upstream.2. HTTP-зеркало против HTTPS-канона ломает SwiftPM и Docker.3. Глобальный lock на compile убивает параллель Mac. Ещё: rsync и блокировки, Mosh и SSH, multi-AZ, блог.
Матрица: что резать первым в контрольной плоскости
Используйте таблицу при расширении межрегиональной сетки сборки на выделенном Apple silicon: она связывает политику имён, выкладку реестра артефактов, узость build lock и выбор канала синхронизации.
| Срез | Главный рычаг | Хороший исход | Типичный отказ |
|---|---|---|---|
| Split DNS | Представления по регионам или geo-steering для registry.git.internal |
Билдеры попадают в ближайший живой origin без правки YAML по городам. | Долгий TTL ведёт трафик APAC через US-East во время учений. |
| Реестр во внутренней сети | Региональный reverse proxy и общие ключи подписи | Задержка pull остаётся внутри конверта приёмки. | Разные CA и смешанный HTTP/HTTPS рвут credential helper. |
| Build lock | Узкий flock только на promote, индекс реестра или манифест | Параллельные Mac mini не сериализуются зря. | Один глобальный lock на compile+test обнуляет кластер. |
| Синхронизация | rsync против объектного хранилища с byte-range | Предсказуемая полоса и семантика checksum. | Полное дерево на каждое задание насыщает межрегиональные uplink. |
DNS-представления и стратегия резолвинга
Split DNS: резолверы в каждой географии отдают одни логические имена реестра и кэша, но указывают на локальные VIP после health-check. Слои: авторитет, форвардер VPN/Zero Trust, /etc/hosts только break-glass.
Перед узлами в Сингапуре или западе США снизьте TTL парных записей до 60–120 с. Негативный тест: отказ резолвера на одном Mac уводит на вторичное имя, а не в таймаут чужого региона.
Внутренняя выкладка и TLS
Origin реестра артефактов: одно HTTPS-имя на окружение, прокси с HTTP/2 к бэкендам. Доверие — общий частный CA или синхронный playbook trust store; headless macOS не любит всплывающий Keychain.
Не смешивайте HTTP-кэш и HTTPS promote без прокси-переписывания; иначе канон для сканеров и нотаризации разъедется. HSTS на публичном имени из конфигов.
# Проверка TLS реестра с класса хоста региона curl --max-time 8 --connect-timeout 3 -fsS \ --resolve registry.git.internal:443:10.20.30.40 \ https://registry.git.internal/v2/ >/dev/null
Гранулярность build lock
Build lock защищает инварианты, а не оптимизм: эксклюзив нужен только там, где два задания могут испортить одно дерево POSIX, индекс реестра или файл манифеста. Компиляция, статический анализ и большинство тестов остаются без глобальной блокировки; конкуренция сосредоточена на границе promote.
LOCK_FILE="/var/tmp/ci-registry-promote.lock"
flock -n "$LOCK_FILE" bash -c '
./scripts/publish-manifest.sh
rsync -az --delete ./staging/ "/Volumes/Artifacts/promote/"
' || { echo "promote lock busy"; exit 17; }
Lock-файлы — на локальный SSD, не на SSHFS. Вне стойки добавляйте консенсус отдельно, но на Mac сохраняйте семантику flock в runbook.
Пороги синхронизации rsync и объектного хранилища
Оставайтесь на rsync, когда важны инкрементальные POSIX-деревья, жёсткие лимиты полосы и ручной контроль checksum. Переносите крупные неизменяемые блобы в объектное хранилище, когда десятки параллельных воркеров читают одинаковые многогигабайтные ключи и можно амортизировать egress краевым кэшем.
| Сигнал | Склоняться к rsync | Склоняться к объектному хранилищу |
|---|---|---|
| Медианный размер артефакта | До порядка пяти гигабайт на задание синхронизации | Сотни гигабайт или частый широкий fan-out |
| Паттерн параллелизма | Немного потоков «золотой образ → воркер» с --bwlimit |
Много читателей тянет одинаковые ключи за минуты |
| Операционный бюджет | Команда уже стандартизировала SSH и POSIX-пути | Есть S3-совместимый стек и ротация IAM |
Оба канала — с /usr/bin/timeout, меткой 124 и периодическим checksum dry-run.
Приёмка по задержке
- Pull реестра: p95 ниже трёх секунд для тяжёлого метаданными разрешения пакетов против регионального origin.
- SSH контрольной сети: медиана RTT ниже семидесяти миллисекунд до каждого класса параллельных Mac mini.
- Promote: полный цикл с lock — до двух минут на крупнейший еженедельный бандл.
Если метры рвутся, добавляйте площадку, а не шире lock: Гонконг или восток США режут RTT.
Чек-лист приёмки merge блокировок и инфраструктуры
Прогоните список перед merge изменений, затрагивающих DNS, origins реестра или область lock, особенно при подключении нового региона к уже параллельной сетке.
- Паритет DNS: внутренний dig показывает, что каждый регион резолвит реестр и кэши в здоровые локальные VIP.
- Паритет TLS: все билдеры доверяют одной цепочке; ротация без GUI-запросов.
- Обзор lock: нет эксклюзива на compile+test; promote-only задокументирован в runbook.
- Репетиция синхронизации: dry-run rsync или репликации объектов укладывается в бюджет при ожидаемой параллели.
- Зонды и откат: pull из каждой географии в бюджете; старые DNS и endpoints реестра живут минимум одно окно обслуживания; справка, тарифы.
FAQ: split DNS, реестр и многоузловой clustervps
Разные hostname реестра по регионам? Не обязательно: одно логическое имя при корректных представлениях DNS; отдельные имена — проще отладка, сложнее сертификаты.
Отложить split DNS? Плохая идея: задержка «нормальна» до инцидента; split даёт failover без массовой смены секретов.
Многоузловой clustervps: если приёмка ок в одном регионе и плоха в другом — добавьте узлы и географию, не расширяйте lock. Тарифы, локальный реестр артефактов и fan-out.
Масштабируйте параллельные Mac mini M4 по географии
Сочетайте split DNS и региональные origins с дополнительными выделенными узлами: компиляция остаётся параллельной, promote — под узким build lock. Оформите покупку, затем снова прогоните чек-лист merge после любого изменения топологии между регионами.