Pourquoi les clusters parallèles calent sans garde-fous
Ce guide s’adresse aux responsables plateforme qui font tourner deux à huit Mac dédiés pour la CI. Il regroupe une matrice de décision, un tableau de paramètres rsync, des verrous de build basés sur flock, des seuils de remplissage pour les offres 1 To / 2 To, et une liste d’acceptation latence prête à coller dans vos runbooks. Pour dimensionner le parc avant la charge, croisez ces critères avec les forfaits et options de stockage publiés sur clustervps.
- Artefacts « split brain » : deux jobs publient le même dossier → frameworks incomplets ou symboles à moitié écrits.
- Tempêtes de synchro : des copies complètes entre régions saturent les uplinks et affament les développeurs en session interactive.
- Falaises disque : DerivedData + archives remplissent silencieusement l’APFS jusqu’à la casse des caches distants en pleine compilation.
Matrice de décision : topologie vs contraintes
| Modèle | Idéal quand… | Risque |
|---|---|---|
| Writer unique + promotion | Traçabilité stricte et bundles signés. | Le writer devient un point chaud. |
| Fan-out rsync depuis nœud « golden » | Ouvriers plutôt lecture et binaires incrémentaux. | Prévisible avec les plafonds ci-dessous. |
| Front object store | Artefacts massifs et accords multi-cloud egress. | Coût d’intégration plus élevé sur macOS. |
Beaucoup de clients clustervps commencent par un fan-out rsync : même réflexes qu’en local, chemins POSIX que vos scripts connaissent déjà. Couplez-le à une seule étape de promotion pour que la QA ne tire toujours qu’un répertoire validé. Pour ajouter un nœud worker ou un second golden sans friction administrative, enchaînez directement sur le tunnel achat après avoir figé les profils ci-dessous.
rsync paramétré, prêt à l’emploi
Exposez un petit profil par région pour que personne n’improvise les flags sous pression. L’exemple propage un BUILD_ROOT « golden » vers les workers avec sommes de contrôle, reprise partielle et plafond de bande passante.
#!/usr/bin/env bash
set -euo pipefail
PROFILE="${1:-apac}"
case "$PROFILE" in
apac) BW="60000"; TIMEOUT="25m";;
amer) BW="45000"; TIMEOUT="35m";;
*) BW="30000"; TIMEOUT="40m";;
esac
/usr/bin/timeout "$TIMEOUT" rsync -azh --delete-delay --partial \
--checksum --bwlimit="$BW" --omit-dir-times \
"$GOLDEN_HOST:$GOLDEN_PATH/" "$LOCAL_ARTIFACT_ROOT/"
| Option | Rôle | Remarque |
|---|---|---|
| --delete-delay | Retarde les suppressions jusqu’à la fin d’une synchro réussie. | Moins d’arbres partiels exposés pendant les longs transferts. |
| --partial | Conserve les fichiers incomplets pour reprise. | À combiner avec timeout pour éviter les daemons bloqués. |
| --bwlimit | Plafond KiB/s par flux. | À caler sur le palier choisi pour garder l’UI interactive. |
| /usr/bin/timeout | Garde-fou temps réel (horloge murale). | Émettez des métriques si le code de sortie vaut 124. |
Verrous de build pour arbres partagés
Entourez les étapes de publication d’un flock exclusif : un seul job modifie le chemin canonique des artefacts. Posez le fichier de verrou sur un volume local rapide ou une tranche NFS légère — évitez de verrouiller au-dessus d’un SSHFS à forte latence.
LOCK_FILE="/var/tmp/ci-artifact-promote.lock"
flock -n "$LOCK_FILE" bash -c '
./scripts/compile.sh
rsync -az --delete ./out/ "/Volumes/Artifacts/promote/"
' || { echo "lock busy"; exit 17; }
Seuils 1 To vs 2 To (watermarks)
Le 2 To offre une trajectoire pour plusieurs caches simulateur et couches conteneurs, mais l’automatisation reste indispensable. Traitez 90 % comme un arrêt dur : instantanés APFS et volumes locaux type Time Machine mangent de la marge « invisible ». Comparez les paliers sur la page tarifs avant de saturer l’I/O la semaine de release.
Liste d’acceptation : latence inter-régions
- Contrôle SSH : RTT médian < 70 ms depuis le VPN bureau vers chaque classe de nœud.
- rsync en régime : au moins un dry-run avec sommes de contrôle réussi par semaine.
- Git fetch : clone ou fetch < 5 min pour la plus grosse tranche de mono-repo supportée.
- VNC interactif : cadence d’images stable lorsque deux opérateurs partagent un nœud en incident.
Si l’équipe est en Asie du Sud-Est mais compile sur la côte ouest des États-Unis, ajoutez un relais fan-out à Singapour ou Hong Kong pour raccourcir les segments rsync, même lorsque la conformité impose des clés de signature aux USA.
Runbook de déploiement en cinq étapes
- Choisissez un nœud golden par géographie et documentez son alias SSH.
- Créez des scripts rsync par profil avec
timeoutet--bwlimitfigés. - Ajoutez flock uniquement autour de la promotion et de la rotation d’artefacts.
- Branchez les sondes disque sur l’astreinte à partir de 80 % d’utilisation.
- Relancez la checklist latence après chaque changement réseau ou bascule VPN.
Les sondes HTTP gagnent la même discipline d’horloge murale que rsync. Exemple :
curl --max-time 8 --connect-timeout 3 -fsS \ https://status.example.internal/artifact-ready >/dev/null
FAQ : exploitation et contexte d’achat
Git doit-il remplacer rsync ici ? Git reste la couche « source de vérité ». rsync convient aux gros binaires, runtimes simulateur et arbres type DerivedData : I/O incrémental sans réécrire l’historique.
Et si flock échoue tout le temps ? Votre section critique est trop large. Réduisez le verrou à la promotion seule et laissez les phases de compilation parallèles par branche.
Comment justifier une 2ᵉ région ? Lorsque la latence médiane dépasse deux fois la checklist dans un même sprint, scindez les writers et rejouez les sondes après chaque changement VPN/FAI pour garder des tableaux de bord honnêtes.
Provisionnez des Mac mini M4 homogènes pour votre cluster
Ajoutez des nœuds bare metal pour le fan-out de builds, gardez des artefacts cohérents avec des profils rsync, et montez en stockage avant que les alertes jaunes ne bloquent votre profondeur de file.