Déploiement Progressif (Canary), Ciblage Pays et Stratégies
La page /rollout (src/app/rollout/page.tsx), ainsi que les modales CountrySelectorModal et UpdateStrategyModal accessibles depuis les vues de release, permettent de contrôler avec précision qui reçoit un patch OTA, où et selon quelles contraintes réseau/expérience utilisateur.
1. Déploiement progressif Canary (rolloutPercentage)
Plutôt que d'exposer immédiatement 100 % de la flotte mobile à un nouveau patch, l'opérateur (ROLE_ADMIN ou ROLE_SRE_ADMIN, permission EDIT_ROLLOUT) peut ajuster le pourcentage d'exposition à chaud via PATCH /api/admin/v1/patches/{id}/rollout :
- Paliers rapides dans l'interface :
0%(Pause / Gel) : Aucun nouvel appareil ne télécharge le patch (sans déclencher de rollback sur les appareils l'ayant déjà installé).10%(Canary initial) : Exposition limitée pour observer la télémétrie et le Circuit-Breaker.25%(Quart de flotte) : Élargissement progressif.50%(Demi-flotte) : Validation à grande échelle.100%(Déploiement général) : Toute la flotte éligible reçoit le patch.
Algorithme de hachage déterministe (algorithme déterministe)
Dans Serveur TkushPatch(clientId, patchNumber, rolloutPercentage), l'éligibilité d'un téléphone est calculée de manière 100 % déterministe et sans état :
String seed = (clientId != null ? clientId : "anonymous") + ":" + patchNumber;
algorithme déterministe algorithme déterministe = new algorithme déterministe;
algorithme déterministe.update(seed.getBytes(StandardCharsets.UTF_8));
long bucket = algorithme déterministe.getValue() % 100; // Bucket entre 0 et 99
return bucket < rolloutPercentage;
Garantie clé : Un appareil situé dans le bucket 7 (inclus dès le palier 10%) restera toujours inclus lorsque l'opérateur augmentera le curseur à 25%, 50% puis 100%. Parallèlement, inclure patchNumber dans la graine (seed) garantit que ce ne sont pas toujours les mêmes 10 % d'utilisateurs qui testent tous les patchs successifs.
2. Ciblage Géographique (CountrySelectorModal)
Lorsqu'une même application mobile dessert plusieurs filiales nationales (avec le même app_id), le composant CountrySelectorModal (src/components/deployments/CountrySelectorModal.tsx) permet de restreindre un patch à une liste précise de pays (allowedCountries) via PATCH /api/admin/v1/patches/{id}/countries :
- Deux modes de diffusion :
- Diffusion Mondiale (
ALL) :allowedCountriesest vide ([]), tous les pays sont éligibles. - Ciblage par Pays (
CUSTOM) : Seuls les téléphones présentant uncountry_codeISO-3166-1 alpha-2 inclus dansallowedCountriesreçoivent l'offre de patch lors duPOST /api/v1/patches/check.
- Diffusion Mondiale (
- Catalogue de 34 pays intégrés (regroupés par région) :
- Afrique (21 pays) : Cameroun (
CM), Côte d'Ivoire (CI), Sénégal (SN), Gabon (GA), Congo-Brazzaville (CG), RD Congo (CD), Tchad (TD), République Centrafricaine (CF), Guinée Équatoriale (GQ), Bénin (BJ), Burkina Faso (BF), Mali (ML), Niger (NE), Togo (TG), Guinée (GN), Nigeria (NG), Ghana (GH), Kenya (KE), Afrique du Sud (ZA), Maroc (MA), Tunisie (TN). - Europe (6 pays) : France (
FR), Belgique (BE), Suisse (CH), Royaume-Uni (GB), Allemagne (DE), Espagne (ES). - Amériques (3 pays) : États-Unis (
US), Canada (CA), Brésil (BR). - Moyen-Orient & Asie (4 pays) : Émirats Arabes Unis (
AE), Chine (CN), Inde (IN), Singapour (SG).
- Afrique (21 pays) : Cameroun (
- Sélection par lot : Un bouton Tout sélectionner / Tout désélectionner est disponible par zone géographique ainsi qu'une barre de recherche par nom de pays ou code ISO à 2 lettres.
3. Stratégies de Mise à Jour (UpdateStrategyModal)
Le composant UpdateStrategyModal (src/components/deployments/UpdateStrategyModal.tsx) configure le comportement du SDK mobile lors de la réception du patch via PATCH /api/admin/v1/patches/{id}/strategy (permission CONFIGURE_STRATEGY) :
| Mode de mise à jour | Paramètres envoyés | Comportement sur le téléphone |
|---|---|---|
1. Standard (STANDARD) | forceCriticalUpdate: false, requireWifi: false | Téléchargement silencieux en tâche de fond (Wi-Fi ou données mobiles 3G/4G/5G). Le patch est appliqué de façon transparente au prochain redémarrage de l'application. |
2. Économie Data (WIFI_ONLY) | forceCriticalUpdate: false, requireWifi: true | Recommandé pour les patchs volumineux (> 2 Mo) : le téléchargement en arrière-plan est différé tant que l'appareil n'est pas connecté à un réseau Wi-Fi, préservant le forfait data mobile du client. |
3. Critique / Forcé (FORCED_CRITICAL) | forceCriticalUpdate: true, requireWifi: false (ou true) | Urgence de sécurité ou correctif bloquant : le descripteur de patch renvoie force_critical_update: true, permettant à l'application hôte d'afficher une modale bloquante exigeant l'application immédiate du correctif avant toute opération. |