สวัสดีครับนักอ่านทุกท่าน เชื่อว่าหลาย ๆ คนคงจะเคยใช้ SCB Connect กันมาบ้างแล้ว ส่วนใครที่ยังไม่รู้จัก ผมจะเกริ่นให้ฟังสักเล็กน้อย SCB Connect เป็น Application นึงที่ Integrate กับบริการของ SCB ผ่าน LINE Chat ได้ โดยที่มี Feature หลายอย่างเช่น การแจ้งเตือนความเคลื่อนไหวของบัญชี, Chat BOT หรือ Generate QR Code เพื่อใช้ชำระเงินได้ เพื่อไม่ให้เป็นการขายของจนเกินไป เราไปชม Technology Stack กันเลย

High level architecture of SCB Connect

Infrastructure

Internet

Technology

  1. Google Cloud Dialogflow ทำในส่วนของ NLP Message ต่าง ๆ
  2. AppEngine
  3. Firebase
  4. Angular
  5. React / Redux

DMZ (Demilitarized Zone)

Technology

Intranet

ก่อนหน้านี้ทาง SCB Connect มี Pain point อยู่หลายจุดกว่าจะมาถึงวันนี้ได้…
สมัยก่อนนั้นจะเป็นระบบ Monolith ซึ่งได้รวมเอาทุกสิ่งทุกอย่างผูกเข้าไว้ด้วยกัน การที่จะ Deploy จะใช้วิธีการ Build war file แล้วนำขึ้นไปบน jboss (สาย Java ยุคก่อนคงจะทราบซึ้งกันเป็นอย่างดี) จากนั้น…

ทาง SCB Connect ได้ทำการเปลี่ยนมาทำระบบเป็น Microservices แทน โดยทำการค่อย ๆ ถอดของที่อยู่ใน Monolith ออกมาเป็น Service ย่อย ๆ และยังคงใช้ภาษาเดิมคือ Java เพิ่มเติมด้วย Kotlin แล้วเลือกใช้ Framework ที่เป็นที่นิยมอย่าง Spring รวมถึงมีการใช้ระบบฐานข้อมูลทั้งแบบ Relational และ Non-Relational มีการทำ Caching ข้อมูลต่าง ๆ โดยเลือกใช้ Redis และเนื่องจากพอแตกระบบออกมาเป็น Service ย่อย ๆ เริ่มเยอะมากขึ้นเริ่มเห็นปัญหา จึงเริ่มมาสนใจใน Container โดยที่พวกเขาเลือกที่จะใช้ Kubernetes ในการจัดการ Infrastructure ที่อยู่บน On-Premise พอนำ Service ต่าง ๆ เข้ามาอยู่ใน Kubernetes แล้ว เขาก็ยังเจอปัญหาถัดมาอีก เนื่องจากพอเป็น Microservices แล้วมันก็จะมี Endpoint ยุบยับ และปัญหาอื่น ๆ จึงได้ทำตัว Gateway ขึ้นมาลด Pain point ในจุดนี้

Pain Point ต่อมา… ก่อนหน้านี้พวกเขาใช้ RestFul API (HTTP Protocol) ในการทำระบบส่ง Message ซึ่งปริมาณข้อความในระบบ SCB Connect มีหลายล้านข้อความต่อวัน ทำให้เกิดปัญหา เนื่องเวลาที่มี Request เข้ามามาก ๆ ทำให้เกิด Lost data เขาจึงได้ทำการหันมาใช้ Messging queue แต่การจะ Scale มันก็ยากอีก แล้วในที่สุดพวกเขาก็มาพบกับ Kafka พวกเขาพบว่า Kafka เป็นระบบจัดการ Event sourcing ที่ดีจึงได้ทำการศึกษา และทำการทดสอบ จนสุดท้ายก็ได้ใช้งานจริงบน Production

ก่อนที่จะมาใช้ Kafka เรียกได้ว่าช่วงนี้ Peak hour ต้องมานั่งลุ้นว่าระบบจะ Scale ได้ทันเวลา ซึ่งบางครั้ง Scale ไม่ทันทำให้เกิด Incident หลังจากที่หันมาใช้ Kafka ในการจัดการ Event sourcing ก็ทำให้ Incident กลายเป็น 0

นอกจากจะใช้ Kafka ในการจัดการ Event sourcing เรื่อง Message แล้วพวกเขายังเอา Kafka มาใช้ในเรื่อง การจัดการกับพวก ELK ต่าง ๆ รวมถึงมีการใช้ Prometheus ในการส่งข้อมูลไปแสดงผลที่ Grafana เพื่อใช้ในการ Monitoring ด้วย

incomming

Outgoing

การจัดการกับระบบฐานข้อมูลนั้นใช้ทั้ง Relational และ Non-Relational รวมถึงมีการนำข้อมูลต่าง ๆ ไปทำ Datalake เพื่อนำไปวิเคราะห์, ปรับให้ดีขึ้น และปรับปรุงส่วนที่ผิดพลาดอย่างสม่ำเสมอ

ในการ Bulid และ Deploy นั้น ได้มีการทำ Automation ในการ Continuous Integration(CI) และ Continuous delivery(CD) โดยใช้ Jenkins ที่จะขาดไปก็คือ Continuous deployment บน Production เนื่องจากเราจำเป็นต้องมีการให้ Audit เข้ามาตรวจสอบระบบก่อนขึ้นจริง ๆ อีกครั้งด้วย


Technology Stack

Language, Framework, Library

  • Nodejs
  • Ruby on Rails + Sidekiq
  • Angular
  • React / Redux

Database

Cloud & Infrastructure

  • CloudFront
  • Google Cloud Dialogflow + NLP
  • AppEngine
  • Firebase
  • Docker
  • Kubernetes
  • Apache Kafka

Centralize Logging

Monitoring

CI/CD and Test framework


Conclusion