La solution standard du client de l’API WhatsApp Business s’exécute sur un seul conteneur Docker. Au cas où vous souhaitez diviser la charge et disposer de plusieurs serveurs qui envoient et reçoivent des messages à WhatsApp, vous pouvez également utiliser notre solution de multiconnexion.
La solution Multiconnect nécessite au préalable la configuration de la haute disponibilité. Pour configurer la fonction, reportez-vous à la documentation sur la haute disponibilité, puis continuez ci-dessous.
Avec la haute disponibilité, un seul conteneur Docker est responsable de l’envoi et de la réception de messages provenant des serveurs WhatsApp. Si le trafic de messagerie dépasse le débit maximal d’un seul conteneur Docker, les envois de messages sont retardés et la latence de remise des messages augmente. Pour faire évoluer le client de l’API WhatsApp Business, la multiconnexion prend en charge le partitionnement afin de répartir les charges sur plusieurs conteneurs Docker. Actuellement, nous ne prenons en charge que le partitionnement statique avec un nombre de partitions égal à 1, 2, 4, 8, 16 ou 32. La haute disponibilité est un cas particulier de multiconnexion où le numéro de partition est 1.
Dans le cluster, deux nœuds Coreapp (CoreApp 1
et CoreApp 3
) sont chargés d’envoyer et de recevoir des messages du serveur WhatsApp simultanément. Chaque message n’appartiendra qu’à une seule partition en fonction de l’ID du destinataire.
Le client de l’API WhatsApp Business utilise le partitionnement pour obtenir la multiconnexion. En fonction du nombre de partitions que vous avez configurées, la base de données stockera une carte de partitions qui détermine la partition à laquelle un message doit être envoyé, en fonction de l’ID du ou de la destinataire (ou du nom d’utilisateur·ice WhatsApp). La fonction pour déterminer ceci est :
shard_id = hash(recipient-id) % shard-number
Chaque partition est associée à un conteneur Docker en cours d’exécution (Coreapp). La Webapp saura à quel conteneur Docker envoyer la demande de message en fonction du retour de cette fonction. Il est recommandé de configurer le numéro de la partition + les ordinateurs X pour pouvoir tolérer les pannes de l’ordinateur X.
Dans le diagramme multiconnecté à deux partitions ci-dessus, les messages sont routés vers CoreApp 1
et CoreApp 3
selon la fonction de partitionnement. CoreApp 2
est secondaire, il est sauvegardé à chaud, mais n’a pas de connexion active aux serveurs WhatsApp. Supposons que CoreApp 1
reçoive des messages pour shard=0
et CoreApp 3
obtient des messages pour shard=1
. Si CoreApp 1
tombe en panne, seuls les messages pour shard=0
seront affectés. Le système continue d’envoyer et de recevoir des messages appartenant à shard=1
à l’aide de CoreApp 3
. Comme pour la haute disponibilité, Master 1
détecte la défaillance du CoreApp 1
et bascule le trafic shard=0
vers CoreApp 2
. Ce basculement prendra environ 35 secondes.
Une fois que votre cluster est configuré conformément aux instructions de la documentation sur la haute disponibilité, utilisez la requête suivante pour activer la multiconnexion.
Remarque : vous devez disposer d’un numéro de partition et de X conteneurs Docker de Coreapp en cours d’exécution avant de continuer.
Multiconnect ne garantit pas la haute disponibilité. Pour bénéficier de la haute disponibilité, il est nécessaire d’exécuter plus de Coreapps que de partitions.
POST /v1/account/shards { "cc": "country-code", "phone_number": "phone-number", "shards": 1 | 2 | 4 | 8 | 16 | 32, "pin": "pin", "cert": "verified-name-cert-in-base64" }
Nom | Description |
---|---|
| Obligatoire. Indicatif du pays du numéro de téléphone enregistré pour ce client de l’API WhatsApp Business sous la forme d’une chaîne (par exemple, |
| Obligatoire. Numéro de téléphone enregistré pour ce client de l’API WhatsApp Business sans l’indicatif du pays ou le symbole plus (+), sous la forme d’une chaîne (par exemple, |
| Obligatoire. Nombre de partitions dont vous souhaitez disposer (nombre entier). Options : |
| Facultatif. Code PIN à 6 chiffres existant pour la procédure d’authentification à deux facteurs, sous la forme d’une chaîne (par exemple, |
| Obligatoire. Grâce à l’intégration du paramètre En remplissant ce champ, vous permettez aux entreprises d’appeler ce point de terminaison à n’importe quel moment. Avant, elles ne pouvaient l’appeler qu’au cours des sept jours suivant l’enregistrement de leur numéro de téléphone. Certificat encodé au format Base64 associé au numéro de téléphone spécifié précédemment. Ce certificat peut être obtenu avec Business Manager. Pour en savoir plus, consultez Copier le certificat encodé au format Base64. Remarques :
Si vous appelez cette API plus de sept jours après l’enregistrement de votre numéro de téléphone et que le paramètre |
201 Created : You successfully changed shard number 403 Forbidden : You could hit this if server is temporarily unavailable, retry the request should fix it
GET /v1/account/shards
{ "account": { "shards": number-of-shards } }
Consultez la section Performances de l’article de référence Messages.
Le modèle vous permet de configurer le nombre d’instances actives du conteneur Coreapp à créer. Il crée une instance de conteneur Coreapp supplémentaire pour un basculement rapide en cas d’échec du Coreapp.
Lorsque la haute disponibilité est activée, le modèle crée par défaut le nombre d’instances suivant par type d’environnement pour Multiconnect :
Le modèle est configuré pour une évolution automatique des instances EC2 en fonction du niveau d’utilisation de la mémoire. L’utilisation de la mémoire augmente (ou diminue) avec une augmentation (ou une diminution) du nombre d’instances actives du conteneur Coreapp. C’est pourquoi lors de la création d’instances supplémentaires de Coreapp, les instances EC2 s’adaptent automatiquement en conséquence. Toutefois, le nombre maximal d’instances EC2 pouvant être créées est limité comme suit :
Instances actives de Coreapp | Nombre maximal d’instances EC2 |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
Le taux de demandes d’API et le nombre d’instances actives de Coreapp déterminent le nombre de connexions à la base de données. Avec huit instances actives de Coreapp et un débit d’API de 100 messages/seconde, environ 700 connexions à la base de données (si SSL est désactivé) ou 1 200 connexions à la base de données (lorsque SSL est activé) sont nécessaires. Toutefois, avec 32 instances actives de Coreapp et un débit d’API de 250 messages/seconde, environ 1 700 connexions à la base de données sont nécessaires.
Dans la version actuelle, nous avons utilisé db.m4.2xlarge
pour huit instances actives de Coreapp (chiffrement de la connexion à la base de données désactivé) et db.m4.4x.large
pour 32 instances actives de Coreapp (chiffrement de la connexion à la base de données activé). Le tableau suivant donne des indications sur le choix d’une catégorie d’instance RDS et le nombre maximal de connexions qu’elle prend en charge :
Instance RDS | Nombre maximal de connexions à la base de données |
---|---|
| 318 |
| 636 |
| 1 272 |
| 2 543 |
| 1 212 |
| 2 424 |
| 4 848 |
| 9 696 |
| 19 391 |
| 38 783 |
| 636 |
| 1 272 |
| 2 543 |
| 5 086 |
| 12 716 |
| 20 345 |
| 298 |
| 596 |
| 1 192 |
| 2 384 |