標準 WhatsApp Business API 用戶端解決方案是在單一 Docker 容器上執行。如果您想要將負載量分流,並且有多部伺服器可傳送和接收訊息至 WhatsApp,可以利用我們的多點連線解決方案來強化效能。
多點連線解決方案首先需要現有的高可用性設定。請按照「高可用性」文件進行設定,然後繼續下面的操作。
透過高可用性,只有單一 Docker 容器負責從 WhatsApp 伺服器傳送和接收訊息。如果訊息傳送流量超過單一 Docker 容器的最大傳送量,將會導致訊息傳送積壓,且將增加訊息傳遞延遲。為了擴展 WhatsApp Business API 用戶端,多點連線支援分片,以將負載量分散到多個 Docker 容器。目前,我們只支援分片數為 1、2、4、8、16 或 32 的靜態分片。高可用性是多點連線的一個特例,其分片數為 1。
叢集中有兩個 Coreapp 節點(CoreApp 1
和 CoreApp 3
)同時負責從 WhatsApp 伺服器傳送和接收訊息。每個訊息只屬於一個基於收件者編號的分片。
WhatsApp Business API 用戶端使用分片來實現多點連線。根據您設定的分片數,資料庫會儲存分片映射,以根據收件者編號(或 WhatsApp 用戶名稱)來決定訊息應前往哪個分片。用來決定此動作的函式為:
shard_id = hash(recipient-id) % shard-number
每個分片都映射到執行中的 Docker 容器(Coreapp)。根據此函式傳回的內容,網路應用程式可知道要將訊息要求傳送給哪個 Docker 容器。建議您設定分片數 + X 台電腦,以能夠容忍 X 台電腦故障。
在上述 2 分片多點連線圖表中,系統會根據分片函式將訊息路由到 CoreApp 1
和 CoreApp 3
。CoreApp 2
為次要分片,其處於暖機狀態,但與 WhatsApp 伺服器沒有作用中的連線。假設 CoreApp 1
取得 shard=0
的訊息,CoreApp 3
取得 shard=1
的訊息。如果 CoreApp 1
停止運作,只會影響 shard=0
的訊息。系統仍會使用 CoreApp 3
傳送和接收屬於 shard=1
的訊息。Master 1
與高可用性類似,也會偵測 CoreApp 1
的故障,並將 shard=0
流量容錯移轉至 CoreApp 2
。此容錯移轉的時間約需 35 秒。
根據「高可用性」文件設定叢集後,請使用以下要求來開啟多點連線。
請記得,您需要有分片數量 + X 個 Docker 容器的 Coreapp 在執行中,才能繼續進行。
多點連線無法保證高可用性。所執行的 Coreapp 要比分片多,才能獲得高可用性。
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" }
名稱 | 說明 |
---|---|
| 必要項目。 以字串表示為此 WhatsApp Business API 用戶端註冊的電話號碼國碼/區碼。例如: |
| 必要項目。 以字串表示為此 WhatsApp Business API 用戶端註冊的電話號碼,不包含國碼/區碼或加號(+)。例如: |
| 必要項目。 您想要擁有的分片數量(整數)。 選項: |
| 選用項目。 以字串表示用於雙重驗證的現有 6 位數 PIN 碼。例如: |
| 必要項目。 在 2.41.2 版中導入 填入此欄位可讓商家隨時呼叫此端點。此前,商家只能在電話號碼註冊後 7 天內呼叫此端點。 與先前指定之電話號碼相關聯的 Base64 編碼憑證。 您可以使用企業管理平台來取得此憑證。如需相關資訊,請參閱複製 Base64 編碼憑證。 注意:
若未提供 |
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 } }
請參閱參考資料:訊息:效能。
範本可讓您配置所要建立的作用中 Coreapp 容器執行個體數量。範本會建立一個額外的 Coreapp 容器執行個體,以在 Coreapp 故障時協助快速切換。
根據預設,「高可用性」啟用時,範本會依照環境類型建立下列數量的執行個體,以進行多點連線:
範本配置為根據記憶體使用率自動擴展 EC2 執行個體。記憶體使用率會隨著「作用中」的 Coreapp 容器執行個體數量增加(或減少)而增加(或減少)。因此,當建立更多 Coreapp 執行個體時,EC2 執行個體會隨之自動擴展。不過,可建立的 EC2 執行個體有最大數量限制,如下所示:
作用中 Coreapp 執行個體 | EC2 執行個體上限 |
---|---|
2 | 3 |
4 | 4 |
8 | 5 |
16 | 8 |
32 | 15 |
API 要求速率和作用中 Coreapp 執行個體的數量決定了資料庫的連線數量。如果有 8 個作用中 Coreapp 執行個體,而 API 速率為每秒 100 則訊息,則需要大約 700 個資料庫連線(SSL 停用時)和 1200 個資料庫連線(SSL 啟用時)。不過,如果有 32 個作用中 Coreapp 執行個體,而 API 速率為每秒 250 則訊息,則需要大約 1,700 個資料庫連線。
在目前版本中,我們為 8 個作用中 Coreapp 執行個體使用 db.m4.2xlarge
(停用資料庫連線加密),並為 32 個作用中 Coreapp 執行個體使用 db.m4.4x.large
(啟用資料庫連線加密)。下表針對 RDS 執行個體類別的選擇及其可支援的連線數上限提供相關指引:
RDS 執行個體 | 資料庫連線數上限 |
---|---|
| 318 |
| 636 |
| 1272 |
| 2543 |
| 1212 |
| 2424 |
| 4848 |
| 9696 |
| 19391 |
| 38783 |
| 636 |
| 1272 |
| 2543 |
| 5086 |
| 12716 |
| 20345 |
| 298 |
| 596 |
| 1192 |
| 2384 |