โซลูชั่นไคลเอ็นต์ WhatsApp Business API มาตรฐานทำงานบนคอนเทนเนอร์ Docker เดี่ยว ในกรณีที่คุณต้องการแยกยอดการเข้าใช้งานและมีหลายเซิร์ฟเวอร์ในการส่งและรับข้อความให้กับ WhatsApp คุณสามารถใช้โซลูชั่นการเชื่อมต่อหลายจุดของเราเพิ่มเข้าไปได้
โซลูชั่นการเชื่อมต่อหลายจุดจำเป็นต้องมีการตั้งค่าความพร้อมใช้งานตลอดเวลาที่มีอยู่แล้วก่อน โปรดตั้งค่าตามเอกสารเกี่ยวกับความพร้อมใช้งานตลอดเวลา จากนั้นดำเนินการต่อตามวิธีด้านล่างนี้
สำหรับความพร้อมใช้งานตลอดเวลา จะมีเพียงคอนเทนเนอร์ Docker เดียวเท่านั้นที่รับผิดชอบในการส่งและรับข้อความจากเซิร์ฟเวอร์ของ WhatsApp หากจำนวนการส่งข้อความสูงเกินกว่าปริมาณสูงสุดของคอนเทนเนอร์ Docker แบบเดี่ยว ระบบจะส่งข้อความที่คั่งค้างและเวลาแฝงของการส่งข้อความจะเพิ่มขึ้น เมื่อต้องการปรับขนาดไคลเอ็นต์ WhatsApp Business API การเชื่อมต่อหลายจุดจะรองรับการสร้างชาร์ดเพื่อกระจายโหลดไปยังคอนเทนเนอร์ Docker หลายตัว ขณะนี้เราสนับสนุนเฉพาะการสร้างชาร์ดแบบคงที่โดยมีจำนวนชาร์ดอยู่ที่ 1, 2, 4, 8, 16 หรือ 32 ความพร้อมใช้งานระดับสูงถือเป็นกรณีพิเศษของการเชื่อมต่อหลายจุดโดยจะมีจำนวนชาร์ดอยู่ที่ 1
ในคลัสเตอร์ มีโหนด Coreapp อยู่ 2 โหนด (CoreApp 1
และ CoreApp 3
) ที่ทำหน้าที่ในการส่งและรับข้อความจากเซิร์ฟเวอร์ของ WhatsApp ในขณะเดียวกัน ทุกข้อความจะเป็นของชาร์ดเดียวเท่านั้นโดยอิงจาก ID ของผู้รับ
ไคลเอ็นต์ WhatsApp Business API ใช้การสร้างชาร์ดเพื่อให้มีการเชื่อมต่อหลายจุด ฐานข้อมูลจะจัดเก็บแผนที่ชาร์ดที่กำหนดว่าข้อความควรจะไปที่ชาร์ดใดโดยขึ้นอยู่กับ ID ของผู้รับ (หรือชื่อผู้ใช้ WhatsApp) ทั้งนี้ขึ้นอยู่กับจำนวนของชาร์ดที่คุณตั้งค่าไว้ ฟังก์ชั่นในการกำหนดนี้คือ:
shard_id = hash(recipient-id) % shard-number
แต่ละชาร์ดจะจับคู่กับคอนเทนเนอร์ Docker (Coreapp) ที่กำลังทำงานอยู่ Webapp รู้ว่าจะส่งคำขอข้อความไปยังคอนเทนเนอร์ Docker ใดโดยอิงจากการส่งกลับฟังก์ชั่นนี้ ขอแนะนำให้คุณตั้งค่าจำนวนโหนดและเครื่อง X เพื่อให้สามารถทนทานต่อความขัดข้องของเครื่อง X
จากแผนภาพการเชื่อมต่อหลายจุดแบบ 2 ชาร์ดด้านบน ข้อความจะถูกนำทางไปยัง CoreApp 1
และ CoreApp 3
ตามฟังก์ชั่นของชาร์ด โดย CoreApp 2
จะอยู่ในลำดับรองลงมาและมีความอุ่น แต่ไม่มีการเชื่อมต่อที่ใช้งานไปยังเซิร์ฟเวอร์ของ WhatsApp สมมติว่า CoreApp 1
รับข้อความของ shard=0
และ CoreApp 3
รับข้อความของ shard=1
หาก CoreApp 1
ล้มเหลว จะส่งผลกระทบกับข้อความของ shard=0
เท่านั้น ระบบจะยังคงส่งและรับข้อความที่เป็นของ shard=1
อยู่โดยใช้ CoreApp 3
คล้ายกับการทำให้ระบบพร้อมใช้งานตลอดเวลา Master 1
จะตรวจพบความล้มเหลวของ CoreApp 1
และย้ายการใช้งาน shard=0
ไปยังระบบสำรอง CoreApp 2
การย้ายไปยังระบบสำรองจะใช้เวลาประมาณ 35 วินาที
เมื่อคุณตั้งค่าคลัสเตอร์ของคุณตามเอกสารเกี่ยวกับความพร้อมใช้งานตลอดเวลาแล้ว ให้ใช้คำขอต่อไปนี้ในการเปิดการเชื่อมต่อหลายจุด
โปรดจำไว้ว่าคุณต้องมีหมายเลขการแบ่ง + คอนเทนเนอร์ X Docker ของ Coreapp ทำงานอยู่ก่อนที่จะดำเนินการต่อ
การเชื่อมต่อหลายจุดไม่รับประกันความพร้อมใช้งานตลอดเวลา มี Corepps มากกว่าชาร์ดที่ทำงานสำหรับความพร้อมใช้งานตลอดเวลา
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 นี้ที่ไม่มีรหัสประเทศหรือเครื่องหมายบวก (+) เป็นสตริง เช่น: |
| จำเป็นต้องระบุ จำนวนของชาร์ดที่คุณต้องการในรูปแบบของจำนวนเต็ม ตัวเลือก: |
| ระบุหรือไม่ก็ได้ PIN 6 หลักที่มีอยู่สำหรับการตรวจสอบยืนยันแบบสองชั้น เป็นสตริง เช่น: |
| จำเป็นต้องระบุ การเปิดตัว การสร้างช่องนี้ทำให้ธุรกิจสามารถเรียกใช้ตำแหน่งข้อมูลนี้ได้ทุกเมื่อ แต่ก่อนธุรกิจสามารถเรียกใช้ตำแหน่งข้อมูลนี้ได้ภายใน 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 ที่ใช้งานจะเป็นตัวกำหนดจำนวนการเชื่อมต่อกับฐานข้อมูล เมื่ออินสแตนซ์ Coreapp ที่ใช้งานอยู่ 8 ตัวและอัตรา API 100 ข้อความ/วินาที จะต้องมีการเชื่อมต่อประมาณ 700 DB (ปิดใช้งาน SSL) และการเชื่อมต่อ 1200 DB (เมื่อเปิดใช้งาน SSL) อย่างไรก็ตาม เมื่ออินสแตนซ์ Coreapp ที่ใช้งานอยู่ 32 ตัวและอัตรา API 250 ข้อความ/วินาที จะต้องมีการเชื่อมต่อประมาณ 1,700 DB
ในรุ่นปัจจุบันเราใช้ db.m4.2xlarge
สำหรับอินสแตนซ์ Coreapp ที่ใช้งานอยู่ 8 ตัว (ปิดใช้งานการเข้ารหัสการเชื่อมต่อ DB) และ db.m4.4x.large
สำหรับอินสแตนซ์ Coreapp ที่ใช้งานอยู่ 32 ตัว (เปิดใช้งานการเข้ารหัสการเชื่อมต่อ DB) ตารางต่อไปนี้ให้คำแนะนำเกี่ยวกับการเลือกคลาสอินสแตนซ์ RDS และจำนวนการเชื่อมต่อสูงสุดที่สามารถรองรับได้:
อินสแตนซ์ RDS | การเชื่อมต่อ DB สูงสุด |
---|---|
| 318 |
| 636 |
| 1272 |
| 2543 |
| 1212 |
| 2424 |
| 4848 |
| 9696 |
| 19391 |
| 38783 |
| 636 |
| 1272 |
| 2543 |
| 5086 |
| 12716 |
| 20345 |
| 298 |
| 596 |
| 1192 |
| 2384 |