標準 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 容器(核心應用程式)。網頁應用程式會根據此函數傳回的內容,知道要向哪個 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 秒。
根據高可用性文件設定叢集後,請使用以下要求來開啟多點連線。
請注意,您需要擁有分片編號以及正在運作的 Coreapp 之 X Docker 容器,方可繼續操作。
多點連線並不能保證高可用性。如要獲得高可用性,請執行多於分片數量的 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,格式為字串。例如: |
| 此為必要項目。 v2.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)和 1,200 個資料庫連線(若啟用 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 |