จาก MongoDB ไปยัง Postgres
เรื่องนี้เกี่ยวกับอะไร?
ระหว่างการสัมภาษณ์งานกับบริษัทแห่งหนึ่ง ฉันถูกขอให้ตอบคำถามต่อไปนี้: คุณช่วยอธิบายปัญหาที่ยากที่สุดที่คุณเคยแก้ได้หรือไม่? โดยสรุปแล้ว ปัญหาที่ยากที่สุดที่ฉันแก้เกิดขึ้นระหว่างที่ฉันทำงานอยู่ที่ eBay ซึ่งฉันได้ย้ายหนึ่งในโครงการภายในขนาดใหญ่ของ eBay จากการใช้ MongoDB ไปใช้ Postgres ในปี 2023 อย่างไรก็ตาม คำถามนี้ทำให้ฉันได้คิดอย่างจริงจังว่าฉันแก้ปัญหายากนี้ได้อย่างไร และเปิดโอกาสให้ฉันได้ทบทวนเส้นทางการเป็นนักพัฒนาของตนเอง ด้วยเหตุนี้ ฉันจึงเขียนคำตอบที่ละเอียดและครอบคลุมมากสำหรับคำถามดังกล่าว และต้องการแบ่งปันคำตอบนี้บนเว็บไซต์ของฉัน
คำถามคืออะไร?
คุณช่วยอธิบายปัญหาที่ยากที่สุดที่คุณเคยแก้ได้หรือไม่? โปรดตอบกลับด้วยย่อหน้าไม่เกิน 4 ย่อหน้า และบอกให้เราทราบว่า:
- คุณทำอะไร
- อะไรทำให้สิ่งนั้นยาก
- คุณเรียนรู้อะไรจากประสบการณ์นี้
- ผลลัพธ์ที่เกิดขึ้นทำให้คุณเติบโตอย่างไร
คำตอบของฉันคืออะไร?
1 - คุณทำอะไร
ในปัจจุบันของเส้นทางอาชีพ ปัญหาที่ยากที่สุดที่ฉันแก้เกิดขึ้นระหว่างการทำงานในตำแหน่งปัจจุบันที่ eBay ปัจจุบันที่ eBay ซึ่งฉันทำงานในรูปแบบสัญญาจ้างผ่าน Hitachi Vantara ฉันพัฒนาและดูแลเครื่องมือภายในที่เรียกว่า Storage Management System หรือ STMS STMS เป็นเครื่องมือที่ทีม Service & Storage Infrastructure (SSI) ของ eBay ใช้เพื่อตรวจสอบและจัดการอุปกรณ์ต่าง ๆ ในศูนย์ข้อมูลของ eBay STMS ช่วยให้วิศวกรสามารถตรวจสอบเมตริกของอาร์เรย์ สวิตช์ โฮสต์ กลุ่มดิสก์ คลัสเตอร์ และฐานข้อมูลจำนวนมากได้ รวมถึงจัดการการแจ้งเตือนสำหรับสวิตช์และอาร์เรย์ และช่วยให้วิศวกรสามารถทำงานขั้นสูง เช่น การจัดสรรโฮสต์ได้อย่างง่ายดาย STMS รับเมตริกมากกว่า 1.5 ล้านรายการต่อนาที ซึ่งมาจากอาร์เรย์ สวิตช์ โฮสต์ กลุ่มดิสก์ และคลัสเตอร์จำนวนหลายสิบหรือหลายร้อยรายการทั่วศูนย์ข้อมูลของ eBay ระบบนี้ทำหน้าที่เป็นเครื่องมือสำคัญสำหรับทีม SSI ในการตรวจสอบและจัดการโครงสร้างพื้นฐานด้านพื้นที่จัดเก็บข้อมูลของ eBay ซึ่งมีความสำคัญอย่างยิ่งต่อบริการหลักและรูปแบบธุรกิจของ eBay เมื่อพิจารณาทั้งหมดนี้แล้ว ปัญหาที่ยากที่สุดที่ฉันต้องแก้ระหว่างช่วงเวลาที่ทำงานอยู่ที่ eBay คือการย้าย STMS จากการใช้ฐานข้อมูล MongoDB ไปใช้ฐานข้อมูล Postgres
2 - อะไรทำให้สิ่งนั้นยาก
สิ่งที่ทำให้ปัญหานี้ยากคือ MongoDB และ Postgres เป็นฐานข้อมูลที่มีพื้นฐานแตกต่างกันโดยสิ้นเชิง MongoDB เป็นฐานข้อมูลแบบเอกสาร (NoSQL) ซึ่งหมายความว่าข้อมูลถูกจัดเก็บเป็น JSON ในคอลเลกชัน (คล้ายกับเอกสารในตู้เก็บแฟ้ม) ส่วน Postgres เป็นฐานข้อมูลเชิงสัมพันธ์ (SQL) ซึ่งหมายความว่าข้อมูลถูกจัดเก็บเป็นแถวในตาราง (คล้ายกับในสเปรดชีต) นอกจากนี้ แบ็กเอนด์ทั้งหมดของ STMS ยังถูกสร้างขึ้นเพื่อประมวลผลและจัดการข้อมูลในรูปแบบ JSON โดยใช้แพ็กเกจที่เข้ากันได้เฉพาะกับ MongoDB สำหรับการดำเนินการด้านฐานข้อมูล อีกทั้งในระหว่างการย้ายระบบนี้ จะต้องไม่มีช่วงเวลาหยุดให้บริการ และฟีเจอร์เกือบทั้งหมดจะต้องยังคงทำงานได้ เนื่องจาก STMS เป็นเครื่องมือภายในที่มีความสำคัญอย่างยิ่ง การย้ายระบบทั้งหมดนี้ต้องดำเนินการให้เสร็จภายในไม่กี่เดือน โดยไม่มีช่วงเวลาหยุดให้บริการ และไม่มีแผนการดำเนินงานที่ชัดเจน ฉันเองก็ไม่มีประสบการณ์กับ Postgres มากนักมาก่อน และเช่นเดียวกับเพื่อนร่วมงานทุกคน ฉันไม่มีประสบการณ์ในการย้ายโค้ดเบสเก่าขนาดใหญ่จากฐานข้อมูล NoSQL ไปยังฐานข้อมูล SQL
3 - คุณเรียนรู้อะไรจากประสบการณ์นี้
การย้ายโค้ดของ STMS จาก MongoDB ไปยัง Postgres เสร็จสมบูรณ์โดยไม่มีช่วงเวลาหยุดให้บริการ พร้อมทั้งยังคงรักษาฟีเจอร์และความสามารถในการทำงานเกือบทั้งหมดเอาไว้ได้ สิ่งนี้จำเป็นต้องอาศัยการค้นคว้า การเรียนรู้ การทดสอบ และการแก้ไขปัญหาอย่างกว้างขวาง ฉันปรับโครงสร้างข้อมูลของเราใหม่ให้ทำงานกับฐานข้อมูลเชิงสัมพันธ์ได้อย่างมีประสิทธิภาพมากขึ้น และพัฒนาแพ็กเกจใหม่เพื่อทดแทนแพ็กเกจที่เราเคยพึ่งพาแต่ไม่สามารถทำงานร่วมกับ Postgres ได้ โดยรวมแล้ว การย้ายระบบดำเนินไปอย่างราบรื่นและปราศจากข้อบกพร่องที่มีนัยสำคัญ ซึ่งเกินความคาดหวังของฉัน ตลอดกระบวนการนี้ ฉันได้เรียนรู้มากมาย ในด้านเทคนิค ฉันมีความเข้าใจที่ดีขึ้นเกี่ยวกับ Postgres, SQL, parse trees, ORM, Sequelize, Prisma, query builders, equivalence checking, การตั้งค่าฐานข้อมูล primary-standby และการทดสอบหน่วยที่เกี่ยวข้องกับฐานข้อมูล โดยพื้นฐานแล้ว ฉันเรียนรู้วิธีแยกปัญหาที่ซับซ้อนออกเป็นส่วนย่อย ๆ ได้อย่างมีประสิทธิภาพมากขึ้น และนำโซลูชันที่เหมาะสมไปใช้กับแต่ละส่วน นอกจากนี้ ฉันยังเรียนรู้วิธีการเป็นผู้นำและนำโครงการนี้ไปจนถึงบทสรุป แม้จะต้องเผชิญกับข้อจำกัด อุปสรรค และสิ่งที่ไม่ทราบมากมาย
4 - ผลลัพธ์ที่เกิดขึ้นทำให้คุณเติบโตอย่างไร
ฉันเริ่มต้นอาชีพในด้านหุ่นยนต์ระหว่างเรียนระดับปริญญาตรี แต่เปลี่ยนเส้นทางไปสู่การพัฒนาเว็บเมื่อได้งานที่ eBay ซึ่งเป็นการเข้าสู่สายงานที่ฉันไม่มีประสบการณ์มาก่อน การเปลี่ยนแปลงนี้ได้วางรากฐานสำหรับอาชีพที่ขับเคลื่อนด้วยการเรียนรู้และการปรับตัวอย่างต่อเนื่อง ความท้าทายในการย้าย STMS จาก MongoDB ไปยัง Postgres ถือเป็นก้าวกระโดดครั้งสำคัญในอาชีพของฉัน และมีส่วนอย่างมากต่อการเติบโตในสายอาชีพของฉัน เรื่องนี้ไม่ได้เกี่ยวกับเพียงการเพิ่มพูนความเข้าใจเกี่ยวกับฐานข้อมูลหรือการพัฒนาทักษะการแก้ปัญหาเท่านั้น โครงการนี้ผลักดันให้ฉันก้าวเข้าสู่พื้นที่ใหม่ โดยเรียกร้องการวางแผนอย่างรอบคอบและความมุ่งมั่นที่จะไม่ให้เกิดช่วงเวลาหยุดให้บริการ ด้วยการเป็นผู้นำการย้ายระบบโดยไม่มีประสบการณ์มาก่อนในการเปลี่ยนผ่านฐานข้อมูลขนาดใหญ่ ฉันได้เรียนรู้ถึงคุณค่าของการสื่อสารที่ชัดเจน การทำงานเป็นทีม และการแบ่งความท้าทายที่ซับซ้อนออกเป็นส่วนที่จัดการได้ ประสบการณ์นี้ขยายทักษะทางเทคนิคของฉัน และยังเพิ่มความมั่นใจให้กับฉัน ทำให้ฉันมุ่งไปสู่เป้าหมายและโครงการที่มีความทะเยอทะยานมากขึ้น หลักชัยนี้ในอาชีพของฉันไม่เพียงแสดงให้เห็นถึงการเติบโตของฉันในฐานะนักพัฒนาและผู้นำเท่านั้น แต่ยังแสดงให้เห็นถึงการเติบโตในฐานะผู้แก้ปัญหาอีกด้วย โดยชี้ให้เห็นว่าการเปิดรับสิ่งที่ไม่รู้จักและประสบความสำเร็จคือกุญแจสำคัญต่อการพัฒนาตนเองและวิชาชีพ
บทสรุปคืออะไร?
คำตอบของฉันทำให้ฉันผ่านเข้าสู่ขั้นตอนที่สองของกระบวนการสัมภาษณ์งานที่บริษัทแห่งนั้น และเปิดโอกาสให้ฉันได้พูดคุยอย่างน่าพอใจกับหนึ่งในนักพัฒนาของทีม ซึ่งเป็นเรื่องที่ดีมาก แต่ที่สำคัญกว่านั้น งานชิ้นนี้เปิดโอกาสให้ฉันได้ทบทวนปัญหาทางเทคนิคที่ท้าทายที่สุดที่ฉันเคยแก้ในอาชีพของตนเองระหว่างช่วงเวลาที่ทำงานอยู่ที่ eBay งานนี้ทำให้ฉันได้คิดถึงการเติบโตของตนเองในฐานะนักพัฒนา/วิศวกร พัฒนาทักษะใหม่ ๆ และเพิ่มความมั่นใจในการปรับตัวและแก้ไขปัญหาที่ซับซ้อน