Benefits of migrating to Kafka Platform

champillon
Billme Venture
Published in
2 min readJun 25, 2018

สวัสดีครับ,

พอดีมีเพื่อนๆในวงการหลายท่าน

ถามถึงว่าใช้ Kafka แล้วเป็นไงบ้าง

บอกตรงๆครับว่า “กลิ่นของความเสถียร” เริ่มตั้งแต่ตอน migrate

.

ก่อนจะเล่าถึงกลิ่นของความเสถียร

ขอท้าวความนิดนึงก่อนว่า Billme เอา Kafka ไปทำอะไรบ้าง

.

แน่นอนครับว่า Billme design ระบบเป็น reactive system

ตามที่เขียนในหนังสือของ Jonas Boner

(ที่ชื่อ reactive microservices architecture)

ดังนั้นเราเลยมี services เล็กๆมากมายให้จัดการ

.

จากรูป เป็น use-case นึงที่ Billme ใช้ Kafka ทำ data pipeline

เพราะเดิมนั้น Billme มี services มากมาย (ดังที่เห็นในรูป) ให้ต้องจัดการ

และก็จะมี overhead ในการทำ Asynchronous Calling มากมาย

(ในรูป เส้นลูกศรทึบคือ sync เส้นลูกศรปร่ะ คือ async)

และนอกจากนั้น ยังมี overhead

ในการส่ง data ที่ duplication กันมากมายเป็น async

(ดูได้จากช่อง Multi-Channel Routing)

.

ทำให้ เดิมเรามีปัญหามากในการทำให้ระบบนั้น self-healing ได้

(พูดง่ายๆว่า ตอน servies ตาย

ไม่รู้ว่า message ที่ได้รับ persist ลง working queue รึยัง)

.

ดังนั้น เราเลย migrate Asynchronous Calling ทั้งหมดลงไปอยู่ใน Kafka

ซึ่งแน่นอน เราต้อง design message formatในการ call กันใหม่

เพื่อให้เรา minimize topic ในการ call ตามหลักของ microservices

แต่ maximize benefit ในการพ่น message ใส่ topic แต่ละครั้ง

สิ่งที่ได้เห็นก็คือตามรูปด้านบนครับ

(จริงๆ มันมีรายละเอียดที่เป็นเคล็ดลับอีกนิดนึง ที่เรายังเปิดเผยไม่ได้

แต่วิธีคิดคือประมาณรูปด้านบนแหละครับ)

.

และเรากำลังจะ migrate ทั้งหมดเสร็จภายใน Q2 นี้

(จริงๆ เส้นสำคัญยกขึ้นหมดแล้ว

เหลือแต่เส้นที่ bandwidth การใช้ไม่เยอะที่ต้อง make it done ตามไป)

.

สิ่งที่ได้มาคือ
1. ความประทับใจตั้งแต่วันที่ยกขึ้น

วันนั้นผมยก CRUD ขึ้นก่อน

แล้วค่อยยก PDF Generator ขึ้น

แต่ ท่านแซป ก็สะกดชื่อใน config file ของ PDF Generator ผิด

ทำให้มันไม่เกาะกับ Kafka

ผมก็ทำรายการจาก UI -> CRUD -> Kafka ได้ปกติ

แต่พอขาที่ PDF Generator มันไม่เกาะกับ Kafka ทำให้ไม่ได้ message

พอเช็คไป เช็คมา พบว่า “แซปพิมพ์ผิด”

หลังจากแก้และยกขึ้นไปใหม่ จนเกาะกับ Kafka แล้ว

PDF Generator ก็ read message เก่าที่ผม test และมันค้างใน Kafka ทั้งหมด

สร้างเป็น PDF ได้ตรงตามความต้องการ

นี่คือรู้สึกเลยว่า เสถียร

(จริงๆ เรื่องแบบนี้เกิดขึ้น 4 — 5 ครั้ง ตั้งแต่เริ่ม test กันแล้ว

ถึงตัวไหนตาย ถ้าโยน message ใส่ Kafka ได้ เป็นอันว่างานเสร็จแน่ๆ

ตายแล้วเดี๋ยวก็ฟื้นมาทำต่อ ตามหลัง Reactive จริงๆ)

.

อ่อ ลืมบอกไปครับ Billme ใช้ Kubernestes (K8S) ในการ Orchestrate Docker

ดังนั้น ตัวปลุกมันขึ้นมาทำงานต่อคือ K8S เสมอๆ

.

2. response time ที่สุดขิง

จริงๆ ขึ้นชื่อว่า async ก็ไม่ได้หวังอะไรกับ response time มาก

สมัยก่อนเราเขียนโปรแกรม async call เองต้องรอหลังนาที

กว่าจะสร้าง PDF ได้

แต่พอยกขึ้น Kafka แล้ว ด้วยการที่มัน Push ใส่ PDF Generator เลย

ตอนนี้เราใช้เวลาแค่กระพริบตา ข้อมูล PDF ที่สร้างก็วิ่งกลับมาหา CRUD

และวิ่งไปหา Partners อื่นๆของเรา

.

3. development time ที่ลดลงมากๆ

หลังจาก redesign message format กันแล้วยกขึ้น Kafka

สิ่งที่ตามมาคือ การ plug partners app เข้าไป

ใน multi-channel routing topic นั้นเป็นไปได้อย่างรวดเร็วมาก

ตอนนี้เรากำลัง merge อีก 2–3 partners เข้าไป

และทีมงานก็ isolate ตัวเองออกจากกันได้

focus แค่ integration บน standard message format ที่ kafka ส่งให้

.

4. issue บน production น้อยลง

เพราะบางที async ที่เราเขียนเอง มันผีสิง (ผมยังไม่ได้ investigate ลึก)

ทำ docker ตายเป็น 10 รอบบ้าง

แต่พอยกขึ้น Kafka แล้ว เรื่องนี้หายไปราวกับไม่เคยเกิดขึ้นมาก่อน

.

ก็ประมาณ 4 ข้อนี้แหละครับ ข้อดีของ Kafka ตั้งแต่เริ่มใช้

ไว้มีอะไรจะเล่าสู่กันฟังอีกครับ

.

--

--