La soluzione client standard dell'API di WhatsApp Business viene eseguita su un singolo contenitore Docker. Se vuoi dividere il carico e predisporre più server per l'invio e la ricezione di messaggi a WhatsApp, puoi utilizzare la nostra soluzione Multiconnect.
La soluzione Multiconnect richiede prima una configurazione esistente di High Availability. Fai riferimento alla documentazione su High Availability per la configurazione, quindi procedi come indicato di seguito.
Con High Availability, solo un contenitore Docker è responsabile dell'invio e della ricezione di messaggi dai server WhatsApp. Se il traffico dei messaggi supera la capacità massima di trasmissione di un singolo contenitore Docker, si creerà un accumulo di invii di messaggi e la latenza di consegna aumenterà. Per poter estendere le capacità del client dell'API di WhatsApp Business, Multiconnect supporta il partizionamento per distribuire i carichi su più contenitori Docker. Attualmente supportiamo solo il partizionamento statico con un numero di partizioni pari a 1, 2, 4, 8, 16 o 32. High Availability è un caso speciale di Multiconnect dove il numero di partizioni è 1.
Nel cluster, sono presenti due nodi Coreapp (CoreApp 1
e CoreApp 3
) entrambi responsabili dell'invio e della ricezione di messaggi dal server WhatsApp. Ciascun messaggio apparterrà a un'unica partizione in base all'ID del destinatario.
Il client dell'API di WhatsApp Business utilizza il partizionamento perché la funzione Multiconnect sia applicabile. A seconda del numero di partizioni configurate, il database memorizzerà una mappa di partizioni che determina la partizione di riferimento di un messaggio in base all'ID del destinatario (o al nome utente di WhatsApp). La funzione per eseguire questa operazione è la seguente:
shard_id = hash(recipient-id) % shard-number
Ogni partizione è mappata a un contenitore Docker in esecuzione (Coreapp). Il Webapp saprà a quale contenitore Docker inviare la richiesta di messaggio in base a quanto restituito da questa funzione. Si consiglia di configurare il numero di partizioni + X macchine in modo da poter tollerare i guasti di X macchine.
Nello schema di Multiconnect a 2 partizioni riportato in alto, i messaggi vengono indirizzati a CoreApp 1
e CoreApp 3
in base alla funzione di partizionamento. CoreApp 2
è secondario: è in esecuzione, ma non ha alcuna connessione attiva ai server di WhatsApp. Si può dedurre che CoreApp 1
ottiene messaggi per shard=0
e che CoreApp 3
ottiene messaggi per shard=1
. Se CoreApp 1
smette di funzionare, saranno interessati solo i messaggi per shard=0
. Il sistema continua comunque a inviare e ricevere messaggi appartenenti a shard=1
utilizzando CoreApp 3
. Analogamente ad High Availability, Master 1
rileverà il fallimento di CoreApp 1
ed eseguirà il failover del traffico di shard=0
verso CoreApp 2
. Questo failover impiegherà circa 35 secondi.
Una volta che hai configurato il tuo cluster secondo la documentazione di High Availability, usa la seguente richiesta per attivare Multiconnect.
Ricorda che devi avere il numero di partizioni + X contenitori Docker del Coreapp in esecuzione prima di proseguire.
Multiconnect non garantisce High Availability. Fai in modo di avere più Coreapp che partizioni in esecuzione per High Availability.
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" }
Nome | Descrizione |
---|---|
| Obbligatorio. Prefisso internazionale per il numero di telefono registrato per questo client dell'API di WhatsApp Business come stringa. Ad esempio: |
| Obbligatorio. Numero di telefono registrato per questo client dell'API di WhatsApp Business senza il prefisso internazionale o il simbolo più (+) come stringa. Ad esempio: |
| Obbligatorio. Numero di partizioni che vuoi avere come intero. Opzioni: |
| Facoltativo. Il PIN a 6 cifre esistente per la verifica a due fattori come stringa. Ad esempio: |
| Obbligatorio. Con l'introduzione del parametro Compilando questo campo le aziende potranno chiamare questo endpoint in qualsiasi momento. Prima, le aziende potevano chiamare questo endpoint solo entro 7 giorni dalla registrazione del numero di telefono. Un certificato con codifica Base64 associato al numero di telefono precedentemente specificato. Puoi ottenere questo certificato tramite Business Manager. Consulta Copiare il certificato con codifica Base64 per informazioni. Note:
Se il parametro |
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 } }
Consulta Riferimento, Messaggi, Prestazioni.
Il modello permette di configurare il numero di istanze di contenitore Coreapp attive da creare. Il modello crea un'ulteriore istanza di contenitore Coreapp per favorire un passaggio rapido in caso di guasto di Coreapp.
Per impostazione predefinita, quando High Availability è abilitato il modello crea il seguente numero di istanze per tipo di ambiente per Multiconnect:
Il modello è configurato per scalare automaticamente istanze EC2 a seconda dell'utilizzo della memoria. L'utilizzo della memoria aumenta (o diminuisce) con un aumento (o una riduzione) del numero di istanze contenitore Coreapp "attive". Quindi, quando vengono create più istanze Coreapp, le istanze EC2 si adeguano di conseguenza. Tuttavia, il numero massimo di istanze EC2 che possono essere create è limitato come indicato di seguito:
Istanza Coreapp attive | Istanze EC2 massime |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
Il tasso di richieste API e il numero di istanze Coreapp attive determina il numero di connessioni al database. Con 8 istanze Coreapp attive e un tasso di richieste API di 100 messaggi/secondo, sono necessarie circa 700 connessioni DB (SSL disabilitata) e 1200 connessioni DB (SSL abilitata). Tuttavia, con 32 istanze Coreapp attive e un tasso di richieste API di 250 messaggi/secondo, sono necessarie circa 1700 connessioni DB.
Nella versione attuale, abbiamo usato db.m4.2xlarge
per 8 istanze Coreapp attive (crittografia connessione DB disabilitata) e db.m4.4x.large
per 32 istanze Coreapp attive (crittografia connessione DB abilitata). La seguente tabella fornisce una guida sulla selezione delle classi di istanza RDS e sul numero di connessioni massime che può supportare:
Istanza RDS | Connessioni DB massime |
---|---|
| 318 |
| 636 |
| 1272 |
| 2543 |
| 1212 |
| 2424 |
| 4848 |
| 9696 |
| 19391 |
| 38783 |
| 636 |
| 1272 |
| 2543 |
| 5086 |
| 12716 |
| 20345 |
| 298 |
| 596 |
| 1192 |
| 2384 |