Fanboi Channel

มิตรสหายนักพัฒนาซอฟต์แวร์ท่านหนึ่ง

Last posted

Total of 361 posts

1 Nameless Fanboi Posted ID:ZcCGcY0t+a

แตกมาจากกระทู้ มิตรสหายท่านหนึ่งในห้อง lounges
แต่อันนี้สำหรับ Software Developer

เริ่มจากอันนี้

ชอบอันนี้

มีประเด็นอยากพูดถึง คือ Pinterest เขาใช้ Kafka ซึ่งก็ถือว่าเป็นระบบที่ส่วนตัวผมคิดว่าเสถียรมากๆ แล้ว แต่สุดท้ายก็ไปเจอปัญหาว่า เวลาส่งข้อมูลจาก App ไป Kafka อาจเกิดเหตุการณ์ที่ว่า App ติดต่กับ Broker ไม่ได้ (อาจจะตายจริงหรือ Network connection หรืออะไรก็ตามแต่) ซึ่งทำให้เกิด Data loss ขึ้น

ขั้นแรกเขาก็ทำ Buffer ไว้ ถ้าสมมติติดต่อกับ Broker ไม่ได้ ก็เอาของที่เคยคิดว่าจะส่งให้ Kafka เก็บไว้ใน Memory ของ App ก่อนนะ พอมันติดต่อกับ Broker ได้เมื่อไหร่ค่อยส่งไปทีเดียว

ปัญหาที่ตามมาก็คือ Buffer เต็มเพราะ Memory มีจำกัด สุดท้ายเขาก็แก้โดยการ Write ลง Disk ซะเลย

ประเด็นที่น่าคิด

- Tools ไม่ได้แก้ปัญหาได้ทุกอย่างในโลก ใช้ Kafka ไม่ได้แปลว่าคุณได้ Relliablility & Scalability โดยอัตโนมัติแต่อย่างใด นี่ก็ต้องไปสร้าง Layer บน Kafka อีกทีเพื่อกันเรื่อง Data loss สิ่งที่น่าสนใจคือ การอ่านเขียนลงไฟล์สดกับ Kafka มัน Performant เท่ากันมั้ย อะไรจะกลายเป็น Bottleneck ในกรณีไหน (ผมใบ้ให้ว่าไม่เท่ากัน แต่มีจุดคุ้มทุนทาง Performance ต้องเข้าใจด้วยว่า Kafka มันเล่นไปจนถึงระดับระบบไฟล์ที่ทำไงให้ Seek disk ได้เร็วเลย เขียนอ่านไฟล์ธรรมดา "อาจจะ" สู้ไม่ได้ในกรณี 1-1 วัดกัน)

- เขาเลือกที่จะ Write buffer ลง Disk ซึ่งช้ากว่า Memory การอ่านกลับมาจากดิสก์ซึ่งช้ากว่า Memory ทำให้เกิด Lag time ระหว่าง Application กับ Message Queue มากขึ้น ทำให้ข้อมูลกระจายไปแต่ละส่วนในระบบช้าลง ถ้าในบริบทของ Pinterest ก็เป็นไปได้ว่าเรา Pin สิ่งนึงแต่ของคนอื่นกว่าจะขึ้นเห็นของที่เรา Pin ก็กินเวลาไปบ้าง ไม่ต้องนับเรื่องการเก็บ Stats ซึ่งช้าและไม่ Real-time เท่าเดิม นี่คือ Trade-off ที่เกิดแน่ๆ กับการเลือกทางนี้ ทำไมเขาถึงเลือก Trade-off แบบนี้ผมก็ไม่ทราบ แต่ก็เป็นเรื่องฝากให้คิดว่าทุกอย่างบนโลกมี Trade-off

- ทำไมระบบแบบนี้เกิด Data loss ไม่ได้จนต้องลงทุนขนาดนี้? นี่คือลงทุนให้ Data propagate ช้าลงซึ่งอาจจะกระทบ User experience ได้ด้วยซ้ำ เขาทำที่ Layer ไหนของระบบที่ Data เสียไม่ได้แล้ว

- ข้อสังเกต: ทำไม Buffer ไว้ใน Memory ถึงมีปัญหา Buffer เต็มได้ นั่นสะท้อนว่า Data loss "เคย" เกิดขึ้นเยอะมากระดับนึง มีปัญหาติดต่อ Broker ไม่ได้เยอะประมาณนึง พอคิดได้แบบนี้แล้วสิ่งที่ต้องถามต่อมาคือ อัตราการ Failed ของ Broker มันเยอะขนาดไหนกันนะ มันปกติหรือผิดปกติ แล้วจริงๆ สิ่งที่ Pinterest ทำมันเมคเซนส์มั้ย นี่คือ Workaround ที่ถูก หรือควรจะไปสืบหาต้นตอว่าทำไม Broker failed บ่อยขนาดนั้น? ผมตอบไม่ได้นะ บางทีมันอาจจะเป็นปกติอยู่แล้ว แต่อันนี้ให้ดูไว้ว่าเวลาดูงานพวกนี้ด้วย Critical thinking มันไม่ควรจะเชื่อถือไปเลยเพียงเพราะเขาเป็น Pinterest หรือบริษัทใหญ่

ประเด็นที่อยากสื่อทีสุดคืออันแรกนั่นแหละ อย่าโดนขายของด้วย Tool จนขาดความสามารถในการเข้าใจ System at Scale เพราะสุดท้ายคุณอาจจะต้องทำแบบ Pinterest ก็ได้นะที่ต้องทำอะไรบางอย่างเพื่อสู้กับ Trade-off ของตัว Tool เอง

Be Civil — "Be curious, not judgemental"

  • FAQs — คำถามที่ถามบ่อย (การใช้บอร์ด การแบน ฯลฯ)
  • Policy — เกณฑ์การใช้งานเว็บไซต์
  • Guidelines — ข้อแนะนำในการใช้งานเว็บไซต์
  • Deletion Request — แจ้งลบและเกณฑ์การลบข้อความ
  • Law Enforcement — แจ้งขอ IP address

All contents are responsibility of its posters.