จาก Live กับหนึ่งในทีมพัฒนาของระบบเราไม่ทิ้งกัน จาก page รู้ไม่มากแต่อยากเล่า
ที่เปิดให้คนไทยที่ได้รับผลกระทบจาก COVID-19 มาลงทะเบียน
เพื่อรับเงินเยียวยา
ดังนั้นจึงทำการสรุปสั้น ๆ ไว้หน่อย

โดยทำการสรุปในส่วนที่ผมสนใจไว้นิดหน่อย

คำถามแรก สาเหตุที่ระบบล่มในช่วงแรก

ทำให้คนใช้งานเจอ popup ไม่สามารถใช้งานได้นั่นเอง
เกิดจากการ generate captcha จริง ๆ
เนื่องจากการ generate captcha จะสร้าง image ขึ้นมา
ซึ่งใช้ CPU จำนวนมาก
นั่นส่งผลต่อการทำงานโดยรวมของระบบเลย

ระบบงานทำการเตรียม Node จำนวน 1,000 node ใน Kubernetes cluster
และเตรียมการ scale ไว้แบบอัตโนมัติ
ทีมงานเคยมีประสบการกับ ชิม ช้อบ ใช้มาแล้ว
โดยมองว่าระบบ  เราไม่ทิ้งกัน ต้องเยอะกว่าแน่นอน
ดังนั้นเตรียมไว้ 10 เท่าไปเลย

ก่อนเปิดระบบงานพบว่ามีคนมารอกว่า 20 ล้าน request
ทั้งหมดนี้เข้ามาตอนเปิดระบบเลย
นั่นทำให้ระบบไม่สามารถรองรับได้
ระบบรวนไปหมด

ทีมงานพยายามแก้ไขประมาณ 10-20 นาที
แต่ปัญหายังไม่หาย
ทีมพัฒนาจึงตัดสินใจที่จะ reset ระบบเพื่อแก้ไข
จากนั้นค่อย ๆ แก้ไข
โดยเริ่มจากการพูดคุยกับทีมพัฒนา
ทำการอธิบาย business flow 
เพื่อให้ทีมทั้งหมดเข้าใจ ทำให้เห็นปัญหาที่แท้จริง
จะได้แก้ไขได้ถูกต้อง

จากนั้นก็ค่อย ๆ recovery ระบบแบบค่อยเป็นค่อยไปตาม business flow
โดยสิ่งที่สำคัญคือ ระบบ monitoring ที่ทำการ monitoring ทุกจุด
ทำงานกันเป็นทีมทั้งภายในและภายนอกที่สนับสนุนอยู่

ในการ scale ทำแบบ manual กันไปเลย
เพื่อให้เหมาะสมตามการใช้งานจริง ๆ ซึ่งเหมาะสมกว่าแบบ auto

ปัญหาต่อมาคือเรื่องของการส่ง OTP
ซึ่งจะส่งผ่าน TRUE แน่นอนว่าเต็มที่ของการส่งแล้ว
โดยทำการ scale ไปจนถึง 5,000 TPS ก็ยังรับไม่ไหว

ต่อมาสรุปเรื่องของ Stack การพัฒนาระบบมีอะไรบ้าง ?

หลัก ๆ เป็นดังนี้

  • ใช้ Google Cloud Platform เป็นหลัก
  • ใช้ service ต่าง ๆ ของ Google Cloud เช่น
    • Google Cloud Armor สำหรับช่วยจัดการเรื่อง Security และ DDOS
    • Stack Driver สำหรับเก็บข้อมูล log ต่าง ๆ
  • ส่วนของ service พัฒนาด้วย Spring framework โดยแยกแต่ละ service ออกจากกันเป็น service เล็ก ๆ ตามแนวคิด Micorservice
  • Database ที่ใช้คือ Redis (Cluster) เป็น NoSQL database แบบ Key-value สำหรับเก็บข้อมูลทั้งหมด
  • การติดต่อไปยัง external service จะผ่าน Queue/messaging ซึ่งอาจจะใช้ Kafka ก็ได้ ผมคิดไปเองนะ
  • ระบบ Monitoring จะใช้ Stack Driver + Grafana

แสดงดังรูป

เทคโนโลยีที่ใช้พัฒนา

แยกการพัฒนาเป็น service ย่อย ๆ

ต่อไปยัง external service จะทำงานแบบ Asynchronous ผ่าน Queue/Messaging

ปิดท้ายด้วย Lesson learn ของการพัฒนาระบบนี้ มีอะไรบ้าง ?

  • การพูดคุยและวางแผน
  • ความไว้เนื้อเชื่อใจ
  • Monitoring สำคัญมาก
  • Scale ตาม scenario เป็นแบบ manual (ตอนแรกทำไว้แบบ auto)
  • แยกแต่ละ service ตามแนวคิด Microservice ทำให้ scale ได้ดีขึ้น

ดูย้อนหลังได้จาก

EP0.1 สัมภาษณ์ทีม Dev เราไม่ทิ้งกัน

1. ร่วงไปครั้งแรกเพราะ gencaptcha จริงไหม2. กู้กลับมาแก้อะไรเพิ่มถึงกลับมาเอาอยู่ได้3. อื่นๆเท่าที่พอเล่าได้ พวก DB , Cache ,จำนวน Instance , Deploy ด้วยอะไร

โพสต์โดย รู้ไม่มาก แต่อยากเล่า เมื่อ วันจันทร์ที่ 30 มีนาคม 2020