Mở rộng quy mô ứng dụng API với giải pháp Đa kết nối

Giải pháp Ứng dụng API WhatsApp Business tiêu chuẩn chạy trên một vùng chứa Docker duy nhất. Trong trường hợp muốn tách dung lượng tải, đồng thời có nhiều máy chủ nhận và gửi tin nhắn đến WhatsApp, bạn có thể tận dụng giải pháp đa kết nối của chúng tôi.

Giải pháp Đa kết nối đòi hỏi quá trình thiết lập độ sẵn sàng cao hiện có trước tiên. Hãy làm theo hướng dẫn trong tài liệu về Độ sẵn sàng cao để thiết lập, sau đó tiếp tục như bên dưới.

Tổng quan

Khi có độ sẵn sàng cao, chỉ một vùng chứa Docker chịu trách nhiệm gửi và nhận tin nhắn từ máy chủ WhatsApp. Nếu lưu lượng nhắn tin vượt quá thông lượng tối đa của một vùng chứa Docker, tin nhắn gửi đi sẽ bị tồn đọng và độ trễ gửi tin nhắn sẽ tăng lên. Để mở rộng Ứng dụng API WhatsApp Business, giải pháp đa kết nối hỗ trợ phân đoạn để phân bổ tải trên nhiều vùng chứa Docker. Hiện tại, chúng tôi chỉ hỗ trợ phân đoạn tĩnh với số đoạn là 1, 2, 4, 8, 16 hoặc 32. Độ sẵn sàng cao là trường hợp đặc biệt của đa kết nối có số đoạn là 1.

Nhóm đa kết nối 2 đoạn

Trong nhóm này, có 2 nút Coreapp (CoreApp 1CoreApp 3) chịu trách nhiệm gửi và nhận tin nhắn từ máy chủ WhatsApp cùng lúc. Mỗi tin nhắn sẽ chỉ thuộc về một đoạn dựa trên ID người nhận.

Phân đoạn

Ứng dụng WhatsApp Business API dùng tính năng phân đoạn để đạt được mức đa kết nối. Tùy thuộc vào số đoạn mà bạn thiết lập, cơ sở dữ liệu sẽ lưu trữ bản đồ đoạn để xác định tin nhắn thuộc về đoạn nào dựa trên ID người nhận (hoặc tên người dùng WhatsApp). Dưới đây là hàm dùng để xác định điều này:

shard_id = hash(recipient-id) % shard-number

Mỗi đoạn được ánh xạ đến một vùng chứa Docker đang chạy (Coreapp). Webapp sẽ biết vùng chứa Docker nào cần gửi yêu cầu tin nhắn dựa trên kết quả mà hàm này trả về. Bạn nên thiết lập số đoạn + X máy để có thể cho phép X lỗi máy.

Trong sơ đồ đa kết nối 2 đoạn ở trên, tin nhắn được định tuyến đến CoreApp 1CoreApp 3 dựa trên hàm phân đoạn. CoreApp 2 là nút phụ – hoạt động rất hiệu quả, nhưng không có kết nối hoạt động với máy chủ WhatsApp. Giả sử CoreApp 1 nhận tin nhắn cho shard=0, còn CoreApp 3 nhận tin nhắn cho shard=1. Nếu CoreApp 1 gặp sự cố, chỉ các tin nhắn cho shard=0 mới bị ảnh hưởng. Hệ thống vẫn sẽ gửi và nhận các tin nhắn thuộc về shard=1 bằng CoreApp 3. Tương tự như chế độ độ sẵn sàng cao, Master 1 sẽ phát hiện lỗi của CoreApp 1 và chuyển đổi lưu lượng truy cập shard=0 sang CoreApp 2. Chuyển đổi này sẽ diễn ra trong khoảng 35 giây.

Thiết lập giải pháp Đa kết nối

Sau khi bạn thiết lập nhóm theo hướng dẫn trong tài liệu về Độ sẵn sàng cao, hãy sử dụng yêu cầu sau để bật chế độ đa kết nối.

Hãy nhớ là bạn cần phải có số đoạn + X vùng chứa Docker của Coreapp đang chạy trước khi tiếp tục.

Giải pháp Đa kết nối không đảm bảo Độ sẵn sàng cao. Hãy sử dụng nhiều Coreapp hơn số đoạn đang chạy để đảm bảo Độ sẵn sàng cao.

Yêu cầu

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"
}

Thông số

TênMô tả

cc

Bắt buộc.

Mã quốc gia của số điện thoại đã đăng ký cho Ứng dụng API WhatsApp Business này dưới dạng chuỗi. Ví dụ: "1".

phone_number

Bắt buộc.

Số điện thoại đã đăng ký cho Ứng dụng API WhatsApp Business này không có mã quốc gia hoặc ký hiệu dấu cộng (+) dưới dạng chuỗi. Ví dụ: "6315550000".

shards

Bắt buộc.

Số đoạn bạn muốn có dưới dạng số nguyên.

Tùy chọn:1, 2, 4, 8, 16, 32

pin

Không bắt buộc.

Mã PIN 6 chữ số hiện có dưới dạng chuỗi cho tính năng xác minh 2 yếu tố. Ví dụ: "123456". Chỉ yêu cầu mã PIN trong trường hợp bạn đã bật xác minh 2 yếu tố cho tài khoản này.

cert

Bắt buộc.

Nhờ việc đưa thông số certvào v2.41.2, bạn có thể gọi API này bất cứ lúc nào mà không bị ngắt kết nối nếu thông số cert được cung cấp.

Khi điền trường này, Doanh nghiệp có thể gọi điểm cuối này bất cứ lúc nào. Trước kia, doanh nghiệp chỉ có thể gọi điểm cuối này trong vòng 7 ngày đăng ký số điện thoại của họ.


Chứng chỉ được mã hóa Base64 liên kết với số điện thoại đã chỉ định trước đây.


Bạn có thể lấy chứng chỉ này qua Trình quản lý kinh doanh. Hãy xem phần Sao chép chứng chỉ được mã hóa Base64 để biết thông tin.


Lưu ý:

  • Nếu cung cấp chứng chỉ đã hết hạn, tài khoản của bạn sẽ bị cấm.
  • Nếu cung cấp chứng chỉ không chính xác, bạn sẽ nhận được lỗi cho biết rằng quá trình thiết lập ứng dụng của bạn đã bị đăng xuất. Để đặt số đoạn của mình, bạn cần gọi lại điểm cuối bằng chứng chỉ chính xác.

Nếu thông số cert không được cung cấp, việc gọi API này quá 7 ngày sau khi bạn hoàn tất quá trình đăng ký số điện thoại sẽ dẫn đến ngắt kết nối ứng dụng API.

Phản hồi

201 Created   : You successfully changed shard number 
403 Forbidden : You could hit this if server is temporarily unavailable, retry the request should fix it

Truy xuất thông tin về đoạn

Yêu cầu

GET /v1/account/shards

Phản hồi

{
  "account": {
      "shards": number-of-shards 
  }
}

Tốc độ gửi tin nhắn

Hãy xem Tài liệu tham khảo, Tin nhắn, Hiệu quả.

Chi tiết triển khai AWS

URL mẫu:

  • Doanh nghiệp: https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent.yml?versionId=Tvb.Sa6uTwmvj1rSbbpKCmEKz2pyxcLG
  • Cơ sở dữ liệu: https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_db.yml?versionId=3.vthzENa7qUOuZrozcX9hDk9n8.kdTg
  • Lambda: https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_lambda.yml?versionId=gqIhZaXkX_NylKaPJMDBlQNk9.Pl_34b
  • Mạng: https://wa-biz-cfn.s3-us-west-2.amazonaws.com/wa_ent_net.yml?versionId=Y_NczQaJ.4QTAlyedZPir2XF_IAPDpsh

Với mẫu này, bạn có thể đặt cấu hình số lượng phiên bản vùng chứa Coreapp đang hoạt động sẽ được tạo. Mẫu sẽ tạo một phiên bản vùng chứa Coreapp bổ sung để giúp chuyển đổi nhanh chóng trong trường hợp Coreapp gặp lỗi.

Theo mặc định, mẫu sẽ tạo số lượng phiên bản sau đây trên mỗi loại môi trường cho giải pháp Đa kết nối khi Độ sẵn sàng cao được bật:

  • Chính thức: Phiên bản EC2: 3, Vùng chứa Web: 3, Vùng chứa Coreapp: 3, Vùng chứa Master: 3
  • Tách chuyển: Phiên bản EC2: 2, Vùng chứa Web: 2, Vùng chứa Coreapp: 2, Vùng chứa Master: 2

Mẫu được đặt cấu hình để tự động thay đổi quy mô các phiên bản EC2 tùy vào mức sử dụng bộ nhớ. Mức sử dụng bộ nhớ tăng (hoặc giảm) cùng với mức tăng (hoặc giảm) số lượng phiên bản vùng chứa Coreapp "đang hoạt động". Do đó, khi số lượng phiên bản Coreapp được tạo tăng lên, số lượng phiên bản EC2 sẽ tự động mở rộng theo đó. Tuy nhiên, số lượng phiên bản EC2 tối đa có thể tạo được giới hạn như sau:

Số lượng phiên bản Coreapp đang hoạt động Số lượng phiên bản EC2 tối đa

2

3

4

4

8

5

16

8

32

15

Định cỡ phiên bản RDS

Tốc độ yêu cầu API và số lượng phiên bản Coreapp đang hoạt động xác định số lượng kết nối đến cơ sở dữ liệu. Với 8 phiên bản Coreapp đang hoạt động và tốc độ API là 100 tin nhắn/giây, bạn cần có kết nối khoảng 700 DB (khi SSL bị vô hiệu hóa) và kết nối 1200 DB (khi SSL được bật). Tuy nhiên, với 32 phiên bản Coreapp đang hoạt động và tốc độ API là 250 tin nhắn/giây, bạn cần có kết nối khoảng 1.700 DB.

Trong bản phát hành hiện tại, chúng tôi đã sử dụng db.m4.2xlarge cho 8 phiên bản Coreapp đang hoạt động (mã hóa kết nối cơ sở dữ liệu bị vô hiệu hóa) và db.m4.4x.large cho 32 phiên bản Coreapp đang hoạt động (mã hóa kết nối cơ sở dữ liệu được bật). Bảng sau cung cấp hướng dẫn về cách lựa chọn lớp phiên bản RDS và số lượng kết nối tối đa mà lớp đó có thể hỗ trợ:

Phiên bản RDS Số lượng kết nối cơ sở dữ liệu tối đa

db.t2.medium

318

db.t2.large

636

db.t2.xlarge

1272

db.t2.2xlarge

2543

db.r4.large

1212

db.r4.xlarge

2424

db.r4.2xlarge

4848

db.r4.4xlarge

9696

db.r4.10xlarge

19391

db.r4.16xlarge

38783

db.m4.large

636

db.m4.xlarge

1272

db.m4.2xlarge

2543

db.m4.4xlarge

5086

db.m4.10xlarge

12716

db.m4.16xlarge

20345

db.m3.medium

298

db.m3.large

596

db.m3.xlarge

1192

db.m3.2xlarge

2384

Cấu hình

  • Các phiên bản Coreapp đang hoạt động được đặt trong mẫu chỉ quản lý số lượng phiên bản Coreapp đã tạo. Tuy nhiên, để kích hoạt số lượng tương tự, bạn phải sử dụng tùy chọn Đặt số đoạn (có trong phần Thiết lập giải pháp Đa kết nối). Giá trị mặc định của số đoạn là 1.
  • Luôn đảm bảo số lượng phiên bản Coreapp lớn hơn hoặc bằng số đoạn được đặt trong API.
  • Cách tăng số đoạn:
    • Tạo hoặc cập nhật ngăn xếp với số lượng phiên bản Coreapp đang hoạt động mong muốn.
    • Sau khi thành công, hãy sử dụng tùy chọn Đặt số đoạn để kích hoạt cùng một số lượng đoạn/phiên bản Coreapp đang hoạt động.
    • Lưu ý: Tùy chọn Đặt số đoạn sẽ khiến tất cả phiên bản vùng chứa Coreapp ngừng hoạt động và tự động khởi động lại. Thời gian ngừng hoạt động diễn ra trong khoảng 45 giây đến 1 phút khi thực thi tùy chọn Đặt số đoạn.
  • Cách giảm số đoạn:
    • Sử dụng tùy chọn Đặt số đoạn để giảm số lượng đoạn/phiên bản Coreapp tương tự đang hoạt động.
    • Sau khi khởi động lại thành công tất cả phiên bản Coreapp, hãy cập nhật ngăn xếp với cùng số lượng phiên bản Coreapp đang hoạt động.
    • Lưu ý: Việc cập nhật ngăn xếp có thể chấm dứt các phiên bản Coreapp đang hoạt động hiện phân phối đoạn đó. Tuy nhiên, các phiên bản Coreapp đang hoạt động khác sẽ sớm được chỉ định. Nói cách khác, thời gian ngừng hoạt động có thể tăng thêm (~35 giây) trong quy trình này.