A solução-padrão do cliente da WhatsApp Business API é executada em um único contêiner do Docker. Caso você queira dividir a carga e contar com vários servidores enviando e recebendo mensagens ao WhatsApp, use a nossa solução de multiconexão.
A solução de multiconexão primeiro exige uma configuração de alta disponibilidade. Consulte a documentação sobre alta disponibilidade para configurar a solução. Depois, siga as instruções abaixo.
Com a alta disponibilidade, apenas um contêiner do Docker é responsável por enviar e receber mensagens dos servidores do WhatsApp. Se o tráfego de mensagens ultrapassar a taxa de transferência de dados máxima de um contêiner do Docker, haverá uma fila de envios, aumentando a latência da entrega de mensagens. Para a ampliação do cliente da WhatsApp Business API, a multiconexão é compatível com o uso de fragmentação para distribuir cargas em diversos contêineres do Docker. Atualmente, oferecemos compatibilidade apenas com a fragmentação estática, com uso de 1, 2, 4, 8, 16 ou 32 fragmentos. A alta disponibilidade é um caso especial de multiconexão em que o número de fragmentos é 1.
No cluster, há dois nós Coreapp (CoreApp 1
e CoreApp 3
) responsáveis por enviar e receber mensagens do servidor do WhatsApp ao mesmo tempo. Cada mensagem pertencerá a somente um fragmento com base na identificação do destinatário.
O cliente da WhatsApp Business API usa fragmentação para obter multiconexão. Dependendo do número de fragmentos configurado, o banco de dados armazenará um mapa de fragmentos que determina qual fragmento deve receber uma mensagem com base no ID do destinatário (ou nome de usuário do WhatsApp). A função para determinar isso é:
shard_id = hash(recipient-id) % shard-number
Cada fragmento é mapeado para um contêiner do Docker em execução (Coreapp). O Webapp saberá para qual contêiner Docker enviar a solicitação de mensagem com base no que essa função retornar. Recomenda-se configurar o número de fragmentos + X máquinas para que seja possível suportar X falhas de máquina.
No diagrama de multiconexão de dois fragmentos acima, as mensagens são encaminhadas para CoreApp 1
e CoreApp 3
com base na função de fragmentação. CoreApp 2
é secundário. Ele está receptivo, mas não tem conexões ativas com os servidores do WhatsApp. Suponha que CoreApp 1
receba mensagens para shard=0
, e CoreApp 3
receba mensagens para shard=1
. Se CoreApp 1
expirar, apenas as mensagens para shard=0
serão afetadas. O sistema ainda enviaria e receberia mensagens que pertencem a shard=1
usando CoreApp 3
. Assim como a alta disponibilidade, o Master 1
detectará a falha do CoreApp 1
e fará failover do tráfego de shard=0
para CoreApp 2
. Esse failover levará aproximadamente 35 segundos para ser ativado.
Depois de configurar o seu cluster de acordo com a Documentação de alta disponibilidade, use a seguinte solicitação para ativar a multiconexão.
Lembre-se: é preciso ter um número de fragmento + X contêineres de Docker do Coreapp em execução antes de continuar.
A multiconexão não garante a alta disponibilidade. Tenha mais Coreapps do que fragmentos em execução para alta disponibilidade.
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 | Descrição |
---|---|
| Obrigatório. Código do país do número de telefone registrado para esse cliente da WhatsApp Business API como uma string. Por exemplo: |
| Obrigatório. Número de telefone registrado para esse cliente da WhatsApp Business API sem o código do país ou com o símbolo de adição (+) como uma string. Por exemplo: |
| Obrigatório. Número de fragmentos que você quer na forma de número inteiro. Opções: |
| Opcional. O PIN atual com seis dígitos para verificação de dois fatores como uma string. Por exemplo: |
| Obrigatório. Com a introdução do parâmetro Preenchendo este campo, as empresas podem fazer chamadas para o ponto de extremidade a qualquer momento. Anteriormente, as empresas só podiam fazer chamadas para o ponto de extremidade sete dias depois de registrar o número de telefone. Um certificado codificado em Base64 associado ao número de telefone especificado. É possível obter o certificado por meio do Gerenciador de Negócios. Para saber mais, consulte Copiar o certificado codificado em Base64. Observações:
Se o parâmetro |
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 } }
Confira Referência, mensagens, desempenho.
O modelo permite que você configure o número de instâncias de contêiner ativas do Coreapp a serem criadas. O modelo cria uma instância de contêiner adicional do Coreapp para ajudar na troca rápida no caso de falha do Coreapp.
Quando a alta disponibilidade estiver habilitada, o modelo criará por padrão a seguinte quantidade de instâncias por tipo de ambiente para multiconexão:
O modelo é configurado para dimensionamento automático de instâncias de EC2 dependendo da utilização da memória. A utilização da memória aumenta ou diminui conforme o número de instâncias de contêiner “ativas” do Coreapp. Assim, quando mais instâncias do Coreapp forem criadas, as instâncias de EC2 serão dimensionadas de forma automática e correspondente. No entanto, o número máximo de instâncias de EC2 passíveis de criação é limitado da seguinte maneira:
Instâncias ativas do Coreapp | Máximo de instâncias de EC2 |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
A taxa de solicitações de API e o número de instâncias ativas do Coreapp determinam o número de conexões ao banco de dados. Com oito instâncias ativas do Coreapp e uma taxa de API de 100 mensagens/segundo, é necessário ter cerca de 700 conexões de DB (SSL desabilitado) e 1.200 conexões de DB (com SSL desabilitado). No entanto, com 32 instâncias ativas do Coreapp e uma taxa de API de 250 mensagens por segundo, é necessário ter cerca de 1.700 conexões de DB.
Na versão atual, usamos db.m4.2xlarge
para oito instâncias ativas do Coreapp (criptografia de conexão de DB desabilitada) e db.m4.4x.large
para 32 instâncias ativas do Coreapp (criptografia de conexão de DB desabilitada). A tabela a seguir fornece orientação sobre a seleção de classe de instância de RDS e sobre o número máximo de conexões aceito:
Instância de RDS | Máximo de conexões de DB |
---|---|
| 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 |