ช่วงนี้ได้อ่านบทความจากบล็อกเทคต่างประเทศที่เป็นกระแสชื่อ "Microservices Killed Our Startup. Monoliths Would’ve Saved Us" แล้วรู้สึกทั้งเจ็บแปลบและอินมาก เลยขอสรุปมาแชร์ครับ
มันเหมือนเป็น "สมุดรวมคำตอบผิด" ชั้นดี ที่แสดงให้เห็นว่าการนำเทคโนโลยีใหม่ล่าสุดมาใช้แบบไม่มีเงื่อนไขนั้นอันตรายแค่ไหน
1. จุดเริ่มต้นของเรื่อง: "เราก็ทำแบบ Netflix กันเถอะ"
- สถานการณ์: ระดมทุนรอบ seed ได้ $2.5M รายได้ต่อเดือนโต 40% มีผู้ใช้ 50,000 คน เป็นสตาร์ตอัปที่รันบน Rails monolith ได้ดีมากอยู่แล้ว
- จุดเริ่มของปัญหา: มี lead architect เข้ามา แล้วชูเรื่อง "Scalability" พร้อมเสนอให้ย้ายไปใช้ MSA
- เหตุผล: "โครงสร้างตอนนี้ coupling สูงเกินไป ดู Netflix หรือ Uber สิ ถ้าเราอยากเป็นแบบนั้น เราต้องไปทาง microservices"
- ความจริง: ทีมที่มีนักพัฒนา 4 คน กับ DevOps 1 คน ตัดสินใจจะใช้สถาปัตยกรรมแบบ Netflix
2. 6 เดือนนรก (ไทม์ไลน์การนำ MSA มาใช้)
[เดือนที่ 1: ช่วงฮันนีมูน]
- แยกบริการแจ้งเตือนสำเร็จ ทุกคนฉลองกันว่า "เห็นไหม! ไปได้สวยนี่นา?"
- แต่เริ่มมีสัญญาณเตือน เช่น เวลาปล่อย deploy นานขึ้น จำนวน repository เพิ่มขึ้น
[เดือนที่ 2~3: รอยร้าวเริ่มเกิด]
- แยกบริการ Billing ออกมา ซึ่งบริการนี้เชื่อมกับ user, inventory และ order service ทั้งหมด
- ผลลัพธ์: network latency ทำให้ความเร็วตอบสนองช้าลงจาก 200ms → 800ms และถ้าบริการหนึ่งล่ม ก็เกิดความขัดข้องแบบลูกโซ่จนพังทั้งระบบ
[เดือนที่ 4~5: ฝันร้ายของ distributed transaction]
- เรื่องที่ใน monolith ใช้แค่ DB transaction เดียวก็จบ พอเป็นระบบกระจายต้องถึงขั้นนำ Saga pattern มาใช้
- สต็อกถูกตัดแล้วแต่จ่ายเงินไม่สำเร็จ rollback ก็ยุ่งเหยิง... ข้อมูลไม่สอดคล้องกันจนทีม CS รับเคสถล่ม
- แค่เพิ่มคอลัมน์ง่าย ๆ หนึ่งคอลัมน์ ก็ต้องแตะ 6 services งานที่ควรใช้ 2 ชั่วโมง กลายเป็น 3 วัน
[เดือนที่ 6: ทีมแตก]
- นักพัฒนาต้องทุ่มเวลาทั้งหมดไปกับการดูแล infrastructure แทนการพัฒนาฟีเจอร์
- ค่า infrastructure พุ่งจาก $3,000 → $12,000 (เพิ่มขึ้น 4 เท่า)
- นักพัฒนาคนสำคัญลาออก ("ฉันมาที่นี่เพื่อสร้างโปรดักต์ ไม่ได้มานั่งคลุกกับ Kubernetes ทั้งวัน")
3. การตัดสินใจ: "เราไม่ใช่ Netflix"
แม้สถาปนิกยังยืนยันว่า "ให้เพิ่ม Service Mesh และเครื่องมือ monitoring เข้าไปอีก" แต่ผู้เขียนก็ระเบิดออกมา
> "เราไม่ใช่ Netflix! Netflix มีวิศวกร 500 คน แต่เรามี 4 คน!"
สุดท้ายสถาปนิกคนนั้นก็ลาออก และทีมตัดสินใจ ย้อนกลับ (Rollback) ไปเป็น monolith
4. กลับสู่ monolith และการฟื้นคืนชีพ
- ใช้เวลา 8 สัปดาห์รวมโค้ดกลับเข้าเป็น monolith อีกครั้ง
- ผลลัพธ์:
- ความเร็วในการปล่อยฟีเจอร์กลับมา (จากเดือนละ 4 รายการ → 20 รายการ)
- ความเร็วตอบสนองคงที่ที่ 220ms
- ค่า infrastructure ลดลง
- และที่สำคัญที่สุดคือ ความสุขของนักพัฒนาเพิ่มขึ้น
5. บทเรียนสำคัญ (ข้อสรุปของบทความนี้)
- MSA ไม่ได้เป็นเครื่องมือแก้ 'ปัญหาทางเทคนิค' แต่เป็นเครื่องมือแก้ 'ปัญหาระดับองค์กร'
- มันเหมาะเมื่อมีนักพัฒนามากกว่า 50 คนจนเริ่มชนกันเอง หรือเมื่อรอบการ deploy ของแต่ละส่วนต่างกันมากเกินไป
- Netflix/Google ไม่ใช่ role model ของคุณ
- พวกเขาเองก็เริ่มจาก monolith ก่อน เปลี่ยนทีหลังเมื่อขนาดโตขึ้น ไม่ได้เริ่มมาแบบนั้นตั้งแต่แรก
- ความซับซ้อนคือภาษี
- ทุกครั้งที่จำนวน service เพิ่มขึ้น ต้นทุนในการจัดการจะเพิ่มแบบทบต้น
- network call ไม่ได้ฟรี
- การเรียกฟังก์ชันในหน่วยความจำ (nanosecond) กับการเรียกผ่านเครือข่าย (millisecond) เป็นคนละระดับกันโดยสิ้นเชิง
สรุปสั้น ๆ:
"Monolith ไม่ใช่ศัตรู สถาปัตยกรรมที่แย่ต่างหากคือศัตรู ทีม 4 คน ได้โปรดใช้ monolith ไปเถอะ"
14 ความคิดเห็น
เอาล่ะ ตอนนี้พวกคลั่งไคล้ MSA กำลังจะแห่กันมาแล้ว
คำพูดที่ว่า network call ไม่ได้ฟรี นี่จริงเลยนะ การเรียกฟังก์ชันกับการทำ API call ต่างกันอย่างชัดเจน
ฉันมาที่นี่เพื่อสร้างผลิตภัณฑ์ ไม่ได้มาเพื่อคลุกกับ Kubernetes ทั้งวัน —> นั่นคือคำพูดที่โง่ที่สุดที่ผมเคยได้ยินมา
ทำไมน่ะ? ถ้าอยู่ในสถานการณ์ที่ทำ k8s แบบมี k8s เป็นเป้าหมายอยู่แล้ว ก็ดูเหมือนจะเป็นคำพูดที่ถูกต้องนะ?
ผมชอบคอมเมนต์ของคุณ bungker เลยกดอ่านทีละอันอยู่ แต่มีแค่อันนี้ที่ผมไม่ค่อยเห็นด้วยเท่าไหร่ อืม ช่วยอธิบายเพิ่มเติมได้ไหมครับ
เป็นโพสต์เกี่ยวกับ AI ที่ไม่มีเนื้อหาสาระเลย แบบนี้แหละช่วงนี้ผมแทบไม่อ่าน Medium แล้ว
ถ้าเป็นบริการที่ทำกันแค่ 4 คน ก็คงไม่มีเหตุผลต้องแยกเป็น MSA นะ
ถ้าจะทำ MSA องค์กรก็ต้องปรับให้เข้ากับ MSA ด้วย...
ผมคิดว่าข้อ 4 ในสรุปด้านล่างน่าจะเป็นประเด็นที่เขาต้องการจะสื่อครับ และโดยรวมแล้วก็รู้สึกเห็นด้วยกับเนื้อหานี้ครับ
อืม... เหมือนมีอะไรแปลก ๆ นะ
บทความนี้ดูเหมือนเขียนด้วย AI ครับ
ผมเองก็รู้สึกแบบนั้นมากขึ้นเรื่อย ๆ ในช่วงนี้เหมือนกัน..
เลยเดาว่าบทความจากหลายบล็อกคงกำลังเขียนกันโดยอาศัยทั้งประสบการณ์ของตัวเอง + ความช่วยเหลือจาก AI
เพราะหลายบทความเขียนได้เป็นเหตุเป็นผลมาก และอ่านง่ายมากเลยครับ
สิ่งที่ผมอยากฝากไว้คือ ผมเห็นว่านี่เป็นความเห็นที่ดูเป็นสไตล์ AI มากและไม่มีแหล่งอ้างอิง จึงอยากเสนอว่าไม่ควรแชร์บทความลักษณะนี้ครับ
นี่คือโพสต์ที่นำมาจาก Hacker News ครับ/ค่ะ โพสต์ส่วนใหญ่ที่ผมนำมาลงก็มาจากเนื้อหาบน Hacker News
https://news.ycombinator.com/item?id=46469845
อย่างที่คุณบอกไว้.. ดูเหมือนว่าผมควรใส่อ้างอิง Hacker News ด้วยนะครับ/ค่ะ
1) ความน่าเชื่อถือของบทความน่าสงสัย: มีกลิ่นงานการตลาด/งานที่สร้างโดย AI
ใจความหลัก
คำพูดตรงแรงๆ (แปล)
สรุปสั้นๆ
2) วิจารณ์ฝั่งผู้นำ/สถาปนิกระบบ: ปัญหาไม่ใช่เทคโนโลยี แต่คือ ‘โครงสร้างการตัดสินใจ’
ใจความหลัก
คำพูดตรงแรงๆ (แปล)
สรุปสั้นๆ
3) มุมมองเชิงธุรกิจ: สตาร์ตอัปล้มเหลวเพราะ MSA จริงหรือ?
ใจความหลัก
คำพูดตรงแรงๆ (แปล)
สรุปสั้นๆ
4) ข้อคิดทางเทคนิค: คำแนะนำจากประสบการณ์จริงเรื่อง monolith vs MSA (ส่วนที่เป็นประโยชน์จริง)
ใจความหลัก
คำพูดตรงแรงๆ (แปล)
สรุปสั้นๆ
“เริ่มจาก monolith แล้วค่อยแยก service ก็ต่อเมื่อขอบเขตมัน ‘เกิดขึ้นเองตามธรรมชาติ’ เท่านั้น”
สรุปภาพรวมของชุมชนในประโยคเดียว
คนส่วนใหญ่เห็นด้วยกับประโยคว่า “เราไม่ใช่ Netflix” แต่ในขณะเดียวกันก็สงสัยแรงเหมือนกันว่า ตัวบทความเองอาจเป็นเรื่องเล่าแบบขายฝันโรค Netflix (=การตลาด/AI) ก็ได้