Solusi Klien API WhatsApp Business standar berjalan pada satu kontainer Docker. Jika Anda ingin membagi beban dan memiliki beberapa server yang mengirim dan menerima pesan ke WhatsApp, Anda juga dapat menggunakan solusi multikoneksi kami.
Solusi Multikoneksi membutuhkan pengaturan ketersediaan tinggi terlebih dahulu. Ikuti dokumentasi Ketersediaan Tinggi untuk menyiapkannya, lalu lanjutkan dengan yang di bawah ini.
Dengan ketersediaan tinggi, hanya satu kontainer Docker yang bertanggung jawab untuk mengirim dan menerima pesan dari server WhatsApp. Jika traffic pengiriman pesan melebihi throughput maksimum sebuah kontainer Docker, akan terjadi backlog pengiriman pesan dan latensi penyampaian pesan akan meningkat. Untuk menyesuaikan skala Klien API WhatsApp Business, multikoneksi mendukung sharding untuk menyebar muatan ke beberapa kontainer Docker. Saat ini, kami hanya mendukung sharding statis dengan jumlah partisi 1, 2, 4, 8, 16, atau 32. Ketersediaan tinggi adalah kasus istimewa multikoneksi dengan jumlah partisi 1.
Di dalam klaster, terdapat dua node CoreApp (CoreApp 1
dan CoreApp 3
) yang bertanggung jawab untuk mengirim dan menerima pesan dari server WhatsApp pada saat yang sama. Setiap pesan hanya akan dimiliki oleh satu partisi berdasarkan ID penerima.
Klien API WhatsApp Business menggunakan sharding untuk mencapai multikoneksi. Tergantung pada jumlah partisi yang Anda siapkan, database akan menyimpan peta partisi yang menentukan partisi mana yang harus dituju pesan sesuai dengan ID penerima (atau nama pengguna WhatsApp). Fungsi untuk menentukan ini adalah:
shard_id = hash(recipient-id) % shard-number
Setiap partisi dipetakan ke kontainer Docker yang berjalan (CoreApp). Aplikasi Web akan mengetahui kontainer Docker mana yang akan dikirimi permintaan pesan berdasarkan pengembalian fungsi ini. Anda direkomendasikan untuk menyiapkan jumlah partisi + X mesin untuk dapat menoleransi X kegagalan mesin.
Dalam diagram multikoneksi 2 partisi di atas, pesan diarahkan ke CoreApp 1
dan CoreApp 3
berdasarkan fungsi sharding. CoreApp 2
adalah sekunder — CoreApp ini hangat, tetapi tidak memiliki koneksi aktif ke server WhatsApp. Anggap CoreApp 1
mendapatkan pesan untuk shard=0
dan CoreApp 3
mendapatkan pesan untuk shard=1
. Jika CoreApp 1
mati, hanya pesan untuk shard=0
yang akan terpengaruh. Sistem masih akan mengirim dan menerima pesan milik shard=1
menggunakan CoreApp 3
. Mirip dengan ketersediaan tinggi, Master 1
akan mendeteksi kegagalan CoreApp 1
dan mengarahkan traffic shard=0
untuk failover ke CoreApp 2
. Failover ini akan memakan sekitar 35 detik.
Setelah Anda menyiapkan klaster Anda sesuai dengan Dokumentasi Ketersediaan Tinggi, gunakan permintaan berikut untuk mengaktifkan multikoneksi.
Ingat Anda harus memiliki jumlah partisi + X kontainer Docker dari CoreApp yang aktif sebelum melanjutkan.
Multikoneksi tidak menjamin Ketersediaan Tinggi. Memiliki lebih banyak CoreApp daripada partisi yang aktif untuk Ketersediaan Tinggi.
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" }
Nama | Deskripsi |
---|---|
| Wajib. Kode negara untuk nomor telepon yang terdaftar untuk Klien API WhatsApp Business ini sebagai string. Contoh: |
| Wajib. Nomor telepon terdaftar untuk Klien API WhatsApp Business ini tanpa kode negara atau simbol plus (+) sebagai string. Contoh: |
| Wajib. Jumlah partisi yang ingin Anda miliki dalam bilangan bulat. Opsi: |
| Opsional. PIN 6 digit yang ada untuk verifikasi dua faktor sebagai string. Contoh: |
| Wajib. Dengan diperkenalkannya parameter Mengisi kolom ini memungkinkan Bisnis untuk memanggil endpoint ini kapan saja. Sebelumnya, bisnis hanya dapat memanggil endpoint ini dalam waktu 7 hari sejak pendaftaran nomor telepon mereka. Sertifikat berenkode Base64 terkait dengan nomor telepon yang telah ditentukan sebelumnya. Anda bisa mendapatkan sertifikat ini menggunakan Pengelola Bisnis. Lihat Menyalin Sertifikat Berenkode Base64 untuk informasinya. Catatan:
Jika parameter |
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 } }
Lihat Referensi, Pesan, Kinerja.
Template ini memungkinkan Anda untuk mengonfigurasi jumlah instance kontainer CoreApp aktif yang akan dibuat. Template membuat satu instance kontainer CoreApp tambahan untuk membantu peralihan cepat jika terjadi kegagalan CoreApp.
Template membuat sejumlah instance per jenis lingkungan berikut untuk Multikoneksi, secara default, saat Ketersediaan Tinggi diaktifkan:
Template ini dikonfigurasikan untuk penskalaan otomatis instance EC2, bergantung pada penggunaan memori. Utilisasi memori meningkat (atau menurun) dengan peningkatan (atau penurunan) dalam jumlah instance kontainer CoreApp “aktif”. Oleh karena itu, ketika lebih banyak instance CoreApp dibuat, instance EC2 akan diskalakan secara otomatis. Namun, jumlah maksimum instance EC2 yang dapat dibuat dibatasi sebagai berikut:
Instance CoreApp Aktif | Instance EC2 Maksimum |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
Laju permintaan API & jumlah instance CoreApp aktif menentukan jumlah koneksi ke database. Dengan 8 instance CoreApp aktif dan laju API 100 pesan/detik, dibutuhkan sekitar 700 koneksi DB (SSL dinonaktifkan) dan 1200 koneksi DB (saat SSL diaktifkan). Namun, dengan 32 instance CoreApp aktif dan laju API 250 pesan/detik, dibutuhkan sekitar 1.700 koneksi DB.
Dalam rilis saat ini, kami menggunakan db.m4.2xlarge
untuk 8 instance CoreApp aktif (enkripsi koneksi DB dinonaktifkan) dan db.m4.4x.large
untuk 32 instance CoreApp aktif (enkripsi koneksi DB diaktifkan). Tabel berikut memberikan panduan tentang pemilihan kelas instance RDS dan jumlah koneksi maksimum yang dapat didukungnya:
Instance RDS | Koneksi DB Maksimum |
---|---|
| 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 |