Tags:
Node Thumbnail

เมื่อต้นปีที่ผ่านมา Slack มีเหตุล่ม 3 ชั่วโมง สัปดาห์นี้ทีมงานก็ออกมารายงานถึงสาเหตุของการล่มครั้งนั้น โดยจุดเริ่มต้นเกิดระหว่างการอัพเกรด Consul แม้จะอัพเกรดเพียงบางส่วน

ทาง Slack ใช้ Consul สำหรับทำ service discovery ให้กับ memcached กระบวนการอัพเกรดครั้งนั้นเป็นการอัพเกรดทีละ 25% โดยอัพเกรด 25% แรกไปก่อนแล้วและไม่มีปัญหาอะไร โดยระหว่างอัพเกรด โหนดที่อัพเกรดจะถอดตัวออกไปและใส่โหนดใหม่ที่ cache ว่างเข้ามาแทน แต่ระหว่างการอัพเดตครั้งนั้นระบบมีโหลดสูง และเมื่อกำลังอัพเกรดก็มี memcached บางส่วนถูกล้างข้อมูล

ปัญหาเกิดขึ้นเมื่อการคิวรี Group Direct Message (GDM) นั้น ไม่ได้ค้นหาแยกตาม shard ของคลัสเตอร์ Vitess (คลัสเตอร์ MySQL) แต่กลับทำ scatter query ส่งคิวรีไปทุก shard เพื่อหาข้อมูล และเมื่อแคชหายไป ตัวไคลเอนต์ก็จะยิงคิวรีเข้า Vitess ทำให้โหลดโดยรวมสูงขึ้น คลัสเตอร์ Vitess เริ่มเกิด timeout ทำให้ข้อมูลไม่ถูกแคช เกิดเป็นปัญหาวนลูปคือไคลเอนต์ที่ขอข้อมูลไม่ได้ก็พยายามยิงคิวรีเข้าไปเรื่อยๆ และแคชก็ไม่มีข้อมูลทำให้ยิงคิวรีตรงเข้า Vitess ไปเรื่อยๆ อีกเช่นกัน

ทาง Slack สรุปบทเรียนโดยปรับกระบวนการอัพเกรด Consul ไม่ให้สร้างปัญหาแบบนี้อีก และแก้ไข scatter query เดิมให้คิวรีแยกตาม shard เพื่อไม่ให้เกิดโหลดสูงอีกครั้ง

ที่มา - Slack

No Description

Get latest news from Blognone

Comments

By: whitebigbird
Contributor
on 29 April 2022 - 11:19 #1247280
whitebigbird's picture

ปัญหาลักษณะนี้มัน foresee ยาก/ง่ายระดับไหนครับ เท่าที่ดูมีเงื่อนไขประกอบเยอะพอควร

By: icez
ContributoriPhoneAndroidRed Hat
on 29 April 2022 - 12:35 #1247288 Reply to:1247280

ยิ่งระบบซับซ้อนยิ่งประเมินยากครับ บางทีคิดว่าออกแบบไว้ดีมากแล้ว แต่โดน "พฤติกรรมการทำงานร่วมกันระหว่าง service" (ทำงานเดี่ยวๆ ไม่เป็น แต่พอไปใช้ x คู่กับ y แล้วเป็น) บางอย่างเข้าไป ก็ระเบิดกันมาเยอะแล้วครับ

ลักษณะนี้ก็น่าจะเข้าข่าย

By: whitebigbird
Contributor
on 29 April 2022 - 13:31 #1247290 Reply to:1247288
whitebigbird's picture

กำลังอยากเก่งด้าน availability เลยครับ แต่เคสแบบนี้ถ้ากันได้ 100% เรียกว่าเทพคงยังดูเก่งไม่พอใช่มั้ยครับ

By: icez
ContributoriPhoneAndroidRed Hat
on 29 April 2022 - 15:32 #1247297 Reply to:1247290

ระบบที่ซับซ้อนขนาดนี้ มักไม่ใช่ระบบที่เกิดจากคนคนเดียว (หรือหลักหน่วยคน) ครับ มันคือระบบที่เกิดจากคนหลายสิบคน หลายแผนก หลายหน่วยงานมาร่วมกันสร้างขึ้นมา

ซึ่งความเข้าใจการทำงานของระบบของแต่ละคนมีจำกัด จะเก่งแค่ไหนก็ไม่มีวันไปเข้าใจทุกอย่างในระบบได้ ก็ต้องอาศัย learn by mistake แบบนี้ไปเรื่อยๆ ครับ

By: lew
FounderJusci's WriterMEconomicsAndroid
on 29 April 2022 - 17:10 #1247306 Reply to:1247297
lew's picture

อย่างกรณีนี้

  • ทีม upgrade Consul แค่ทีละ 25% ไม่เป็นอะไรหรอก แคชไม่ได้ดับหมด
  • คนเขียน GDM ถ้า cache missed บางส่วนก็คิวรีตรงไปเลย ไม่เป็นไรหรอก โหลดไม่ได้มาก
  • คนออกแบบคิวรี เราคิวรีตาม shard แทบหมด มีแค่บางอันจะกระจายทุก shard บ้างไม่น่าเป็นอะไร โหลดไม่ได้มากมาย

พอประกอบร่างในเวลาเดียวกัน ก็กลายเป็น Transformer


lewcpe.com, @wasonliw

By: whitebigbird
Contributor
on 29 April 2022 - 17:29 #1247307 Reply to:1247306
whitebigbird's picture

แต่เอาจริงกลายเป็นโกโก้ครันช์ ฝันร้ายของผมเลยครับ รู้สึกว่าตัวเองเก่งไม่พอซะที

By: wiennat
Writer
on 2 May 2022 - 14:03 #1247484 Reply to:1247307

มันเป็น Murphy's Law น่ะครับ เก่งแค่ไหนมันก็จะมีจุดที่พังได้เสมอ หน้าที่ของชาวเรา (หมายถึงทั้ง Engineer ต่างๆ) ก็คือทำให้มันมีโอกาสพังน้อยที่สุด แล้วถ้ามันพังอยู่ก็ให้มันกระทบน้อยที่สุด


onedd.net

By: whitebigbird
Contributor
on 2 May 2022 - 14:13 #1247485 Reply to:1247484
whitebigbird's picture

ขอบคุณครับ

By: big50000
AndroidSUSEUbuntu
on 2 May 2022 - 20:58 #1247532 Reply to:1247280
big50000's picture

ต่อให้ระบบมีหน้าที่แค่ print Hello World กลับไปทุกครั้ง มันก็พังเพราะเด็กฝึกงานเตะปลั๊กได้

By: whitebigbird
Contributor
on 2 May 2022 - 22:44 #1247538 Reply to:1247532
whitebigbird's picture

คมคายยิ่งนัก แม่บ้านถอดปลั๊กไปเสียบเครื่องดูดฝุ่น