> For the complete documentation index, see [llms.txt](https://docs.edgegap.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/persistance.md).

# Persistance

Apprenez à gérer des mondes persistants avec des déploiements toujours en ligne 24/7 sur [Flottes privées](/docs.edgegap.com-fr/learn/orchestration/flottes-privees.md).

De nombreux genres (MMO, sandboxes, jeux sociaux) s’appuient sur des mondes persistants pour permettre aux joueurs de :

* rencontrer et socialiser avec de nouveaux amis ; nourrir des communautés de joueurs organiques,
* explorer un monde ouvert vivant rempli de contenu généré par les utilisateurs et placé par les joueurs,
* participer à des combats de raid épiques durant des heures avec de grands groupes ou des guildes entières.

Découvrez des stratégies pour **offrir la meilleure expérience possible aux joueurs, maîtriser les coûts et supprimer la frustration des joueurs due aux pannes ou aux retours en arrière**. Améliorez le modèle de serveur traditionnel en apportant les avantages du edge computing, emballés pour une utilisation facile par les développeurs de jeux.

## ✔️ Préparation

Pour permettre des déploiements persistants, ininterrompus et toujours en ligne 24/7 :

* [créez une nouvelle version d’application (ou mettez à jour une version existante) avec notre API](/docs.edgegap.com-fr/docs/api/gestion-des-versions.md#post-v1-app-app_name-version),
  * spécifiez `"max_duration": -1`  pour éviter la terminaison automatique après 24 h,
* Utilisez [API de déploiement de flotte privée](/docs.edgegap.com-fr/docs/api/serveurs-dedies.md#post-private-fleets-deploy) pour démarrer [des serveurs en veille](/docs.edgegap.com-fr/learn/orchestration/deployments.md#regional-standby) avec [Persistance](/docs.edgegap.com-fr/learn/orchestration/persistance.md).
  * Choisissez entre des machines virtuelles (Performance) ou des spécifications Bare Metal (Overdrive).

{% hint style="warning" %}
**Testez la montée en charge de votre serveur et** [**le processus de terminaison**](https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped) **pour vérifier la fiabilité de vos contrôles de coût. L’état du serveur stocké en mémoire sera perdu une fois le déploiement arrêté, voir** [#configuration-and-state](#configuration-and-state "mention").
{% endhint %}

## 🔑 Propriété du serveur

Explorez les avantages et les inconvénients des modèles de propriété modernes et traditionnels avec une touche de edge computing.

### Hébergement de studio

L’hébergement des serveurs est traditionnellement géré par le studio, qui couvre le coût de l’hébergement à partir des revenus du jeu.

👍 **Avantages**

* tarification transparente du produit - le coût de l’hébergement est couvert par la licence/l’abonnement du joueur,
* forte compatibilité client/serveur avec un couplage lâche des clients, des services et de la montée en charge,
* plus résistant à la triche et à la rétro-ingénierie en raison de la nature fermée du code source des serveurs.

👎 **Inconvénients**

* la prise en charge du modding communautaire est limitée afin de garantir l’intégrité et la stabilité du serveur.

### Serveurs communautaires

Laissez vos joueurs héberger et financer leurs propres serveurs et supprimez le besoin de services de location tiers. Faites transiter les revenus par votre studio au lieu d’un tiers qui n’a pas de visibilité sur la qualité de l’expérience utilisateur finale.

👍 **Avantages**

* prise en charge améliorée du modding grâce à une liste sélectionnée de versions modifiées [Applications et versions](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md),
* boucle de retour des joueurs améliorée grâce à une collaboration plus étroite avec la communauté,
* risque financier réduit puisque les joueurs prennent en charge le coût de l’hébergement.

👎 **Inconvénients**

* plus de travail opérationnel pour le studio - modération des demandes des joueurs et collecte des paiements,
* compatibilité client/serveur plus faible en raison du plus grand nombre de versions modifiées,
* sujets aux tricheurs en raison de la base de code distribuée et de la possibilité de rétro-ingénierie.

## 🥛 Capacité et mise à l’échelle

Découvrez des techniques avancées pour optimiser la disponibilité des serveurs, le coût d’hébergement et la qualité de service.

### Capacité

**Les déploiements ne suivent ni ne gèrent les connexions actives des joueurs** après que vous [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-1.-start-a-deployment](https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-1.-start-a-deployment "mention") pour vous donner un contrôle absolu et la liberté de mettre en œuvre n’importe quelle conception.

Mettez en œuvre la gestion de capacité pour garantir que vos serveurs :

* maximisent les économies de coûts - [évaluer](/docs.edgegap.com-fr/learn/orchestration/deployments.md#container-metrics) et utilisent efficacement les ressources du serveur,
* offrent un gameplay fluide - empêchent la surcharge des serveurs par trop de joueurs simultanés,
* préviennent les mauvaises critiques dues aux crashs - détectent et gèrent les exceptions inattendues.

Pour garantir une gestion efficace de la capacité des serveurs :

* libérez des emplacements de joueur si [les joueurs jumelés au serveur de jeu](/docs.edgegap.com-fr/learn/matchmaking/matchmaker-in-depth.md#player-tickets) ne se connectent pas dans les quelques secondes,
* envoyez fréquemment un message de heartbeat minimal du client vers le serveur pour suivre l’activité,
* déconnectez les clients et libérez les emplacements de joueur si aucune activité n’est détectée pendant plusieurs secondes,
* empêchez les joueurs d’être ajoutés à des serveurs dont la capacité est pleine et sans emplacements de joueur disponibles.

{% hint style="success" %}
Voir [Server Browser](/docs.edgegap.com-fr/learn/server-browser.md) pour une gestion automatisée de la capacité avec notre service géré.
{% endhint %}

### Monter en charge

**Mettre à l’échelle des serveurs persistants ne nécessite pas de "faire des estimations"** du trafic régional ou du coût serveur. Réservez [Flottes privées](/docs.edgegap.com-fr/learn/orchestration/flottes-privees.md) de la capacité pour [la basse mer](#user-content-fn-1)[^1] et débordez automatiquement vers le cloud lors de pics inattendus.

Mettez en œuvre des stratégies de mise à l’échelle des serveurs pour :

* permettre un hébergement à grande échelle tout en se protégeant soigneusement contre les abus,
* minimiser le coût serveur gaspillé à cause de serveurs en veille vides,
* éviter de longs temps de file d’attente en répondant rapidement à l’augmentation de la demande des joueurs.

<figure><img src="/files/06b3340ef85f0d03b78173f8cab84799c74fa95b" alt=""><figcaption><p>Architecture de référence d’auto-mise à l’échelle</p></figcaption></figure>

#### Points clés d’intégration

1. Les clients intègrent l’Autorité de mise à l’échelle - [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md), [Server Browser](/docs.edgegap.com-fr/learn/server-browser.md)ou une solution personnalisée.
   1. Découvrez d’autres joueurs, réservez de la capacité sur les serveurs en fonctionnement, ou demandez de nouveaux serveurs si nécessaire.
2. L’Autorité de mise à l’échelle attribue des serveurs en fonctionnement ou démarre de nouveaux serveurs pour servir les joueurs.
3. Le serveur informe l’Autorité de mise à l’échelle en temps réel des démarrages/arrêts du serveur et des changements de connexion des joueurs.
   1. L’Autorité de mise à l’échelle supprime (expire) les enregistrements obsolètes des serveurs qui ne répondent plus (plantés).
4. Les clients se connectent et établissent directement des sessions de jeu avec le serveur, puis passent au gameplay.

**Nous recommandons fortement de mettre à l’échelle en fonction du nombre de connexions plutôt que de la charge physique** (CPU et RAM), car des fluctuations momentanées de la charge physique peuvent entraîner une disponibilité imprévisible.

### Réduire la mise à l’échelle

Des politiques efficaces de réduction de la mise à l’échelle sont essentielles pour optimiser les coûts, mais [l’arrêt des serveurs](/docs.edgegap.com-fr/docs/api/serveurs-dedies.md#v1-self-stop-request_id-access_point_id) sans précaution peut nuire négativement à l’expérience des joueurs. **Prenez en compte ces facteurs et testez les changements avant de les déployer :**

**Votre détection de l’activité / déconnexion des joueurs est-elle fiable ?**

* L’absence d’entrée indique-t-elle de manière fiable l’inactivité du joueur ? Les joueurs utilisent souvent des bots, des macros et d’autres techniques pour simuler l’activité et maintenir une connexion active afin d’éviter les temps d’attente en file.
* Y a-t-il des actions effectuées souvent par les joueurs actifs qui sont difficiles à simuler ?
* L’utilisation de bots ou de macros est-elle un problème ou une fonctionnalité avec [#studio-hosting](#studio-hosting "mention") les serveurs ?

**Éteindre les serveurs est-il facilement et rapidement réversible (remonter en charge) ?**

* Une fois atteint [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-3.-deployment-ready](https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-3.-deployment-ready "mention"), votre serveur peut nécessiter du temps supplémentaire pour effectuer l’initialisation du moteur et [#state-management](#state-management "mention") (restauration de l’état). Encourez-vous des coûts supplémentaires de calcul ou de transfert de données avec les services de jeu ? Ce temps d’attente impacte-t-il l’expérience des joueurs ?
* Pouvez-vous masquer le chargement du serveur avec une scène de chargement, un mini-jeu, un lobby ou par d’autres moyens ?

**Les joueurs sont-ils liés à des instances de serveur spécifiques ou peuvent-ils migrer facilement ?**

* Comment la connexion à un autre serveur influence-t-elle le compte du joueur, l’historique des achats, l’expérience sociale, la progression, l’inventaire et d’autres aspects du gameplay ?
* Passez en revue votre [#recovery-objectives](#recovery-objectives "mention") et assurez-vous qu’aucune donnée critique n’est perdue.
* Mettez en œuvre des méthodes automatisées ou des outils pour les joueurs afin de restaurer les données critiques.
* Fournissez une सहायता humaine et communiquez avec votre communauté au sujet des pannes et des problèmes.

## 🔎 Découvrabilité

Pour trouver des serveurs actifs acceptant de nouveaux joueurs, implémentez une ou plusieurs méthodes de découverte :

* Permettre aux joueurs de parcourir les serveurs et de choisir dans une liste avec [Server Browser](/docs.edgegap.com-fr/learn/server-browser.md).
* Lancer de nouveaux jeux lorsque suffisamment de joueurs rejoignent [Matchmaking](/docs.edgegap.com-fr/learn/matchmaking.md).
  * Ajouter des joueurs à [remplacer les départs dans les matchs existants par du backfill](/docs.edgegap.com-fr/learn/matchmaking/matchmaker-in-depth.md#backfill).
* [Implémenter un backend de jeu personnalisé ou tiers pour découvrir les serveurs](/docs.edgegap.com-fr/learn/advanced-features/managed-clusters.md#nakama-by-heroic-labs).

## 💭 Configuration et état

Intégrez des services pour définir les exigences initiales du serveur et gérer l’état des joueurs et du serveur.

### Gestion de la configuration

La configuration fait référence aux **données initiales transmises à votre serveur pendant le déploiement :**

* [variables injectées spécifiques à l’environnement](/docs.edgegap.com-fr/learn/orchestration/application-and-versions.md#other-parameters-optional):
  * par ex. données de compatibilité client/serveur,
* [emplacement du serveur](/docs.edgegap.com-fr/learn/orchestration/deployments.md#arbitrium_deployment_location-detailed-information-about-deployment-location), [ports du serveur](/docs.edgegap.com-fr/learn/orchestration/deployments.md#arbitrium_ports_mapping-detailed-information-about-your-internal-and-external-ports) et [autres informations du serveur](/docs.edgegap.com-fr/learn/orchestration/deployments.md#injected-environment-variables),
* [informations de matchmaking](/docs.edgegap.com-fr/learn/matchmaking/matchmaker-in-depth.md#injected-environment-variables) ou [variables de déploiement personnalisées](/docs.edgegap.com-fr/learn/orchestration/deployments.md#custom-variables),
* paramètres, clés et secrets d’intégration tiers.

{% hint style="info" %}
**La configuration est immuable** - elle est lue une seule fois après le démarrage de votre serveur et ne change pas ensuite.
{% endhint %}

### Gestion de l’état

L’état fait référence aux données décrivant le **résultat d’une série d’actions précédentes des joueurs et d’événements du serveur :**

* connexion du joueur, changements d’état contrôlés par le joueur (par ex. [Pawn](https://dev.epicgames.com/documentation/en-us/unreal-engine/pawn-in-unreal-engine)),
* changements liés aux objets contenus dans le niveau/la scène (par ex. [Actor](https://dev.epicgames.com/documentation/en-us/unreal-engine/actors-in-unreal-engine), [Objet de jeu](https://docs.unity3d.com/6000.0/Documentation/Manual/GameObjects.html)),
* changements liés au [mode de jeu](https://dev.epicgames.com/documentation/en-us/unreal-engine/game-mode-and-game-state-in-unreal-engine#gamemodes), [état du jeu](https://dev.epicgames.com/documentation/en-us/unreal-engine/game-mode-and-game-state-in-unreal-engine#gamestate), ou [scène de jeu](https://docs.unity3d.com/6000.0/Documentation/Manual/CreatingScenes.html) informations.

{% hint style="info" %}
**Les données d’état changent fréquemment.** Les clients sont mis à jour de manière sélective par l’autorité du serveur sur les informations pertinentes.
{% endhint %}

{% hint style="success" %}
**Effectuez des sauvegardes fréquentes de l’état pour éviter la perte de données** en cas de problèmes inattendus côté client ou serveur :

* de manière asynchrone en temps réel à l’aide d’un service tiers, par ex. [Nakama par Heroic Labs](/docs.edgegap.com-fr/learn/advanced-features/managed-clusters.md#nakama-by-heroic-labs),
* au démarrage ou à l’arrêt du client/serveur, sous forme de fichiers d’état désérialisés dans [le stockage d’objets cloud](https://www.linode.com/products/object-storage/).
  {% endhint %}

Les objets de jeu désignent généralement un propriétaire qui les contrôle ; il peut s’agir du serveur ou d’un joueur.&#x20;

#### Objets appartenant au serveur

Les objets appartenant au serveur peuvent être manipulés uniquement par le serveur. Les joueurs connectés ont un accès en lecture limité aux objets appartenant au serveur. Les objets appartenant au serveur ne sont généralement pas partagés avec d’autres serveurs.

{% hint style="success" %}
Les objets appartenant au serveur peuvent être **chargés par un serveur de remplacement en cas de panne inattendue du serveur**. Utilisez [l’ID de déploiement](/docs.edgegap.com-fr/learn/orchestration/deployments.md#basic-information) pour identifier votre nouveau fichier de sauvegarde lors du premier lancement, et pour stocker l’état des objets appartenant au serveur.
{% endhint %}

#### Objets appartenant au joueur

Les objets appartenant au joueur peuvent être manipulés à la fois par les joueurs et par le serveur. Attribuer la propriété des objets persistants aux joueurs facilite ensuite la migration vers d’autres serveurs.

{% hint style="success" %}
**Sauvegardez l’état des objets appartenant au joueur sur l’appareil du joueur ou sur un backend de jeu** entre les sessions de jeu.
{% endhint %}

{% hint style="info" %}
Empêchez la triche en validant les changements avec l’autorité du serveur. L’autorité et la propriété peuvent être séparées.
{% endhint %}

### Objectifs de récupération

En cas de problème, certaines catégories de données peuvent être plus sensibles à la perte de données, par exemple :

* données de compte, d’abonnement, d’achat et de microtransaction - **critique**,
* données de progression, de succès, de classements et d’inventaire - **important**,
* données de détection de triche, de modération, de performance et de suivi des erreurs - **important**,
* données de comportement des joueurs, sociales et de chat - **faible importance**.

{% hint style="success" %}
**Mettez en œuvre la restauration des achats à partir d’une source indépendante d’historique des transactions** pour une meilleure expérience.
{% endhint %}

Nous recommandons fortement de discuter des éléments suivants au sein de votre équipe :

* catégories de données gérées dans vos clients et serveurs de jeu,
* importance et sensibilité de chaque catégorie pour votre entreprise et vos joueurs,
* Recovery Point Objective (RPO) - quantité acceptable de perte de données avant qu’un préjudice grave ne survienne,
* Recovery Time Objective (RTO) - quantité acceptable de temps d’arrêt avant qu’un préjudice grave ne survienne.

## 👀 Observabilité

Les serveurs persistants de longue durée apportent de nouveaux défis en matière d’observabilité, notamment la détection des anomalies dans la surveillance, la journalisation et le suivi des bugs.

Nous **recommandons fortement de mettre en place des alertes pour les redémarrages des serveurs** afin d’obtenir une meilleure visibilité sur les problèmes.

Notre [Stockage des points de terminaison](/docs.edgegap.com-fr/docs/endpoint-storage.md) **intégration des journaux** **ne transfère que les journaux** **après** [/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped](https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/pages/5d7a2f9e0583a99d78071f1c4b8a7892a518534a#id-5.-deployment-stopped "mention")ajoutez des journaux personnalisés et un suivi des bugs (comme [Sentry](https://sentry.io/welcome/)) pour diagnostiquer les pannes partielles et les bugs.

{% hint style="success" %}
Envisagez de réserver [Flottes privées](/docs.edgegap.com-fr/learn/orchestration/flottes-privees.md) de la capacité de veille pour les jeux aux schémas de trafic prévisibles.
{% endhint %}

[^1]: le CCU le plus bas de la journée


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.edgegap.com/docs.edgegap.com-fr/learn/orchestration/persistance.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
