สวัสดีครับนักอ่านทุกท่าน เชื่อว่าหลาย ๆ คนคงจะเคยใช้ SCB Connect กันมาบ้างแล้ว ส่วนใครที่ยังไม่รู้จัก ผมจะเกริ่นให้ฟังสักเล็กน้อย SCB Connect เป็น Application นึงที่ Integrate กับบริการของ SCB ผ่าน LINE Chat ได้ โดยที่มี Feature หลายอย่างเช่น การแจ้งเตือนความเคลื่อนไหวของบัญชี, Chat BOT หรือ Generate QR Code เพื่อใช้ชำระเงินได้ เพื่อไม่ให้เป็นการขายของจนเกินไป เราไปชม Technology Stack กันเลย
Infrastructure
ทาง SCB Connect แบ่ง Infrastructure ออกเป็น 3 Layer ใหญ่ ๆ คือ Internet, DMZ และ Intranet
Internet
Layer นี้จะเป็นการ Connect กับ LINE โดยมีการใช้ API ทั้ง Push, Reply และ Multicast
Technology
- Amazon Web Service(AWS) S3 ร่วมกับ CloudFront ในการ Storage รูปภาพที่จะใช้ Push ไปหาลูกค้า
- Google Cloud Dialogflow ทำในส่วนของ NLP Message ต่าง ๆ
- AppEngine
- Firebase
- Angular
- React / Redux
DMZ (Demilitarized Zone)
Layer นี้จะมี Firewall และ Load balance รวมถึงการทำ Reverse proxy
SCB Connect ใช้ DMZ เพื่อมาทำการ Prevent เหมือนเป็นทหารด่านแรกที่จะมาป้องกันระบบ แล้วนำมาทำหน้าที่ Reverse proxy และทำการ Forward ต่อไป
Technology
- NGINX
Intranet
Layer นี้จะมี Kubernetes Cluster ซึ่งภายในนั้นก็จะมี Service มากมาย พวก Service ต่าง ๆ เหล่านั้น ก็จะไปทำการ Call SCB Enterprise API อีกที โดยที่ DMZ จะทำการเรียก Service เหล่านั้นผ่าน Internal Gateway
ก่อนหน้านี้ทาง 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 ด้วย
การจัดการกับระบบฐานข้อมูลนั้นใช้ทั้ง Relational และ Non-Relational รวมถึงมีการนำข้อมูลต่าง ๆ ไปทำ Datalake เพื่อนำไปวิเคราะห์, ปรับให้ดีขึ้น และปรับปรุงส่วนที่ผิดพลาดอย่างสม่ำเสมอ
ในการ Bulid และ Deploy นั้น ได้มีการทำ Automation ในการ Continuous Integration(CI) และ Continuous delivery(CD) โดยใช้ Jenkins ที่จะขาดไปก็คือ Continuous deployment บน Production เนื่องจากเราจำเป็นต้องมีการให้ Audit เข้ามาตรวจสอบระบบก่อนขึ้นจริง ๆ อีกครั้งด้วย
Technology Stack
มาดู List technology stack ของ SCB Connect กัน
Language, Framework, Library
- Java, Kotlin
- Nodejs
- Ruby on Rails + Sidekiq
- Angular
- React / Redux
Database
- MySQL
- DynamoDB
- Redis
Cloud & Infrastructure
- Amazon Web Service(AWS) S3
- CloudFront
- Google Cloud Dialogflow + NLP
- AppEngine
- Firebase
- Docker
- Kubernetes
- Apache Kafka
Centralize Logging
- ELK Stack ( Elasticsearch + Logstash + Kibana )
Monitoring
- Prometheus
- Grafana
- Prometheus Alert Manager
- Burrow (Kafka Monitoring)
CI/CD and Test framework
- Jenkins
- Robot framework
- Selenium
Conclusion
เราจะเห็นว่า ทาง SCB Connect ใช้ Technology Stack ที่ค่อนข้างจะใหม่ เนื่องจากได้ทำจริง เจ็บจริง และได้นำมาปรับใช้กับงานจริงที่เป็นระดับ Large scale โดยมี User ที่เข้ามาใช้งานระดับ 10 ล้านคน ต่อวัน ซึ่งมันถือว่าเป็นความท้าทายระดับนึง ของเหล่า Software Engineer
เครดิต
https://medium.com/@iamgique/มาดู-technology-stack-ของ-scb-connect-ในปี-2019-กัน-a2de21ec782c