Die Standardversion des WhatsApp Business API-Client wird in einem einzelnen Docker-Container ausgeführt. Wenn du die Last aufteilen möchtest und mehrere Server Nachrichten an WhatsApp senden und empfangen sollen, kannst du zusätzlich unsere Multiconnect-Lösung nutzen.
Voraussetzung für die Multiconnect-Lösung ist ein bestehendes Hochverfügbarkeits-Setup. Befolge zur Einrichtung die Dokumentation zu Hochverfügbarkeit und fahre dann unten fort.
Bei Hochverfügbarkeit übernimmt ein einzelner Docker-Container das Senden und Empfangen von Nachrichten von WhatsApp-Servern. Wenn der Messaging-Verkehr den Durchsatz eines einzelnen Docker-Containers überschreitet, entsteht ein Überhang an zu sendenden Nachrichten. Gleichzeitig erhöhen sich die Latenzen bei der Zustellung von Nachrichten. Multiconnect unterstützt Sharding, um den WhatsApp Business API-Client zu entlasten. Dabei wird die anfallende Last auf mehrere Docker-Container verteilt. Derzeit wird nur statisches Sharding mit einer Shard-Anzahl von 1, 2, 4, 8, 16 oder 32 unterstützt. Hochverfügbarkeit ist ein Multiconnect-Sonderfall mit der Shard-Anzahl=1.
Das Cluster enthält zwei Coreapp-Nodes (CoreApp 1
und CoreApp 3
), die gleichzeitig Nachrichten an den WhatsApp-Server senden und von diesem empfangen. Abhängig von der Empfänger-ID gehört jede Nachricht nur zu einem bestimmten Shard.
Durch Unterstützung von Sharding erreicht der WhatsApp Business API-Client Multiconnect-Fähigkeit. Entsprechend der Anzahl Shards, die du einrichtest, speichert die Datenbank eine Shard Map. Diese Map bestimmt anhand der Empfänger-ID (bzw. des WhatsApp-Benutzernamens), an welche Shard eine Nachricht übergeben wird. Die Zuordnung erfolgt über folgende Funktion:
shard_id = hash(recipient-id) % shard-number
Jede Shard wird einem aktiven Docker-Container (Coreapp) zugeordnet. Anhand der Rückantwort dieser Funktion weiß Webapp, an welchen Docker-Container die Anfrage gesendet werden soll. Empfohlen wird die Einrichtung von Shard-Anzahl + X Rechnern, um den Ausfall von X Rechnern abfangen zu können.
In dem obigen Multiconnect-Diagramm mit zwei Shards werden Nachrichten entsprechend der Sharding-Funktion an CoreApp 1
und CoreApp 3
gesendet. CoreApp 2
ist ein sekundärer Node. Er ist zwar einsatzbereit, doch besteht keine Verbindung zu den WhatsApp-Servern. Nehmen wir an, CoreApp 1
erhält Nachrichten für shard=0
und CoreApp 3
erhält Nachrichten für shard=1
. Wenn CoreApp 1
ausfällt, sind nur Nachrichten für shard=0
betroffen. Das System sendet und empfängt für shard=1
bestimmte Nachrichten weiterhin über CoreApp 3
. Ähnlich wie bei Hochverfügbarkeit erkennt Master 1
den Ausfall von CoreApp 1
und leitet den shard=0
-Traffic um zu CoreApp 2
. Dieses Failover dauert etwa 35 Sekunden.
Sobald du deinen Cluster gemäß der Dokumentation zu Hochverfügbarkeit eingerichtet hast, kannst du multiconnect mit der folgenden Anfrage aktivieren.
Denk daran, dass Anzahl Shards + X Docker-Container der Coreapp ausgeführt werden müssen, bevor du fortfährst.
Multiconnect ist keine Garantie für Hochverfügbarkeit. Achte darauf, dass mehr Coreapps als Shards für Hochverfügbarkeit ausgeführt werden.
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" }
Name | Beschreibung |
---|---|
| Erforderlich. Landesvorwahl für die Telefonnummer, die für diesen WhatsApp Business API-Client registriert ist, als String, z. B. |
| Erforderlich. Telefonnummer, die für diesen WhatsApp Business API-Client registriert ist, ohne Landesvorwahl oder Pluszeichen (+) als String, z. B. |
| Erforderlich. Gewünschte Anzahl Shards als Ganzzahl. Optionen: |
| Optional. Die vorhandene sechsstellige PIN für die Zwei-Faktor-Verifizierung als String, z. B. |
| Erforderlich. Mit der Einführung des Wenn dieses Feld ausgefüllt wird, können Unternehmen diesen Endpunkt jederzeit aufrufen. Bisher konnten Unternehmen diesen Endpunkt nur innerhalb von 7 Tagen nach der Registrierung ihrer Telefonnummer anrufen. Ein Base64-kodiertes Zertifikat, das mit der zuvor angegebenen Telefonnummer verknüpft ist. Dieses Zertifikat kann mit Business Manager abgerufen werden. Weitere Informationen findest du unter Das Base64-kodierte Zertifikat kopieren. Hinweise:
Wenn der |
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 } }
Mit der Vorlage kannst du die Anzahl der zu erstellenden aktiven Coreapp-Container-Instanzen konfigurieren. Die Vorlage erstellt eine zusätzliche Coreapp-Container-Instanz, um im Falle eines Coreapp-Ausfalls einen schnellen Wechsel zu ermöglichen.
Die Vorlage erstellt standardmäßig die folgende Anzahl von Instanzen pro Umgebungstyp für Multiconnect, wenn Hochverfügbarkeit aktiviert ist:
Die Vorlage ist so konfiguriert, dass EC2-Instanzen je nach Speicherauslastung automatisch skaliert werden. Die Speicherauslastung steigt (oder sinkt) mit der Anzahl der „aktiven“ Coreapp-Container-Instanzen. Wenn also mehr Coreapp-Instanzen erstellt werden, werden die EC2-Instanzen automatisch entsprechend skaliert. Die maximale Anzahl von EC2-Instanzen, die erstellt werden können, ist jedoch wie folgt begrenzt:
Aktive Coreapp-Instanzen | Maximale Anzahl EC2-Instanzen |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
Die API-Anforderungsrate und die Anzahl der aktiven Coreapp-Instanzen bestimmen die Anzahl der Verbindungen zur Datenbank. Bei 8 aktiven Coreapp-Instanzen und einer API-Rate von 100 Nachrichten/Sekunde sind etwa 700 DB-Verbindungen (SSL ist deaktiviert) und 1.200 DB-Verbindungen (wenn SSL aktiviert ist) erforderlich. Bei 32 aktiven Coreapp-Instanzen und einer API-Rate von 250 Nachrichten/Sekunde sind jedoch etwa 1.700 DB-Verbindungen erforderlich.
In der aktuellen Version haben wir db.m4.2xlarge
für 8 aktive Coreapp-Instanzen (DB-Verbindungsverschlüsselung deaktiviert) und db.m4.4x.large
für 32 aktive Coreapp-Instanzen (DB-Verbindungsverschlüsselung aktiviert) verwendet. Die folgende Tabelle bietet eine Orientierung für die Auswahl der RDS-Instanzklasse und die Anzahl der maximalen Verbindungen, die sie unterstützen kann:
RDS-Instanz | Maximale Anzahl DB-Verbindungen |
---|---|
| 318 |
| 636 |
| 1272 |
| 2543 |
| 1212 |
| 2424 |
| 4848 |
| 9696 |
| 19391 |
| 38783 |
| 636 |
| 1272 |
| 2543 |
| 5086 |
| 12716 |
| 20345 |
| 298 |
| 596 |
| 1192 |
| 2384 |