เมื่อเร็วๆ นี้ เราเริ่มต้นโปรเจ็กต์เล็กๆ เพื่อล้างวิธีที่ส่วนต่างๆ ของระบบสื่อสารกันอยู่เบื้องหลังที่ Buffer บริบทสั้นๆ บางอย่าง: เราใช้สิ่งที่เรียกว่า SQS (Amazon Simple Queue Service คิวเหล่านี้ทำหน้าที่เหมือนห้องรอสำหรับงาน ส่วนหนึ่งของระบบส่งข้อความออกไปและอีกส่วนหนึ่งหยิบขึ้นมาในภายหลัง ลองนึกถึงการฝากข้อความไว้ให้เพื่อนร่วมงาน: "เฮ้ เมื่อคุณได้รับโอกาส ให้ประมวลผลข้อมูลนี้" ระบบที่ส่งบันทึกไม่จำเป็นต้องรอการตอบกลับ โปรเจ็กต์ของเราคือ เพื่อทำการบำรุงรักษาตามปกติ: อัปเดตเครื่องมือที่เราใช้เพื่อทดสอบคิวในเครื่องและล้างการกำหนดค่าแต่ในขณะที่เรากำลังแมปคิวที่เราใช้จริงเราพบสิ่งที่เราไม่คาดคิด: กระบวนการพื้นหลังที่แตกต่างกันเจ็ดกระบวนการ (หรืองาน cron ซึ่งเป็นงานตามกำหนดเวลาที่ทำงานโดยอัตโนมัติ) และผู้ปฏิบัติงานที่ทำงานอย่างเงียบ ๆ นานถึงห้าปี ทุกคนไม่ทำอะไรเลยเลยนี่คือสาเหตุที่สำคัญวิธีที่เราค้นพบพวกเขาและสิ่งที่เราทำเกี่ยวกับมันเหตุใดสิ่งนี้จึงสำคัญมากกว่าที่คุณคิดใช่การเรียกใช้โดยไม่จำเป็น โครงสร้างพื้นฐานต้องเสียค่าใช้จ่าย ฉันคำนวณอย่างรวดเร็ว และสำหรับพนักงานคนหนึ่ง เราจะต้องจ่ายเงินประมาณ 360-600 เหรียญสหรัฐในระยะเวลา 5 ปี นี่เป็นจำนวนเงินเพียงเล็กน้อยในโครงการการเงินของเรา แต่แน่นอนว่าเป็นการสิ้นเปลืองอย่างแท้จริงสำหรับกระบวนการที่ไม่ทำอะไรเลย อย่างไรก็ตาม หลังจากผ่านการล้างข้อมูลครั้งนี้แล้ว ฉันจะยืนยันว่าต้นทุนทางการเงินเป็นส่วนที่เล็กที่สุดของปัญหา ทุกครั้งที่วิศวกรคนใหม่เข้าร่วมทีมและสำรวจระบบของเรา พวกเขาต้องเผชิญกับกระบวนการลึกลับเหล่านี้ คำถามที่กลืนกินเวลาและสร้างความไม่แน่นอน เราทุกคนเคยเจอมาแล้ว — จ้องมองไปที่โค้ดบางส่วน กลัวที่จะสัมผัสมันเพราะบางทีมันอาจจะกำลังทำบางสิ่งที่สำคัญ แม้แต่โครงสร้างพื้นฐานที่ "ถูกลืม" ก็จำเป็นต้องได้รับการดูแลในบางครั้ง ออกจากบริษัทเมื่อหลายปีก่อนและบริบทยังคงอยู่กับพวกเขา สิ่งนี้เกิดขึ้นได้อย่างไร มันง่ายที่จะชี้นิ้ว แต่ความจริงก็คือสิ่งนี้เกิดขึ้นตามธรรมชาติในระบบที่มีอายุยืนยาว ฟีเจอร์เลิกใช้แล้ว แต่งานพื้นหลังที่รองรับมันยังคงทำงานต่อไป มีคนหมุนพนักงาน "ชั่วคราว" เพื่อจัดการการย้ายข้อมูล และไม่เคยถูกรื้อถอน งานที่กำหนดเวลาไว้จะซ้ำซ้อนหลังจากการเปลี่ยนแปลงทางสถาปัตยกรรม แต่ไม่มีใครคิดที่จะตรวจสอบ เราเคยส่งอีเมลฉลองวันเกิดที่ Buffer To การทำเช่นนี้ เราได้รันงานที่กำหนดเวลาไว้ซึ่งตรวจสอบฐานข้อมูลทั้งหมดสำหรับวันเกิดที่ตรงกับวันที่ปัจจุบัน และส่งอีเมลส่วนตัวถึงลูกค้า ในระหว่างการปรับโครงสร้างใหม่ในปี 2020 เราได้เปลี่ยนเครื่องมืออีเมลธุรกรรมของเราแต่ลืมที่จะลบผู้ปฏิบัติงานรายนี้ออก เนื่องจากมันทำงานต่อไปอีกห้าปี ไม่มีความล้มเหลวของบุคคลใดเลย - เป็นความล้มเหลวของกระบวนการ โดยไม่ได้ตั้งใจ การล้างข้อมูลที่สร้างไว้ในวิธีการทำงานของเรา สถาปัตยกรรมของเราช่วยให้เราค้นพบมัน เช่นเดียวกับหลายๆ บริษัท Buffer ยอมรับการเคลื่อนไหวของไมโครเซอร์วิส (แนวทางยอดนิยมที่บริษัทต่างๆ แบ่งรหัสออกเป็นบริการเล็กๆ จำนวนมากที่เป็นอิสระ) เมื่อหลายปีก่อน เราแบ่งบริการขนาดใหญ่ออกเป็นบริการต่างๆ กัน โดยแต่ละบริการมีที่เก็บข้อมูล ไปป์ไลน์การปรับใช้ และโครงสร้างพื้นฐานของตัวเอง ในเวลานั้น มันสมเหตุสมผลแล้ว: แต่ละบริการสามารถนำไปใช้งานได้ด้วยตัวเองโดยมีขอบเขตที่ชัดเจนระหว่างทีม แต่ในช่วงหลายปีที่ผ่านมา เราพบว่าค่าใช้จ่ายในการจัดการพื้นที่เก็บข้อมูลหลายสิบแห่งมีมากกว่าผลประโยชน์สำหรับทีมที่มีขนาดเท่าเรา ยังคงมีอยู่เป็นขอบเขตทางตรรกะ แต่พวกเขาอยู่ด้วยกันในที่เดียว นี่กลายเป็นสิ่งที่ทำให้การค้นพบเป็นไปได้ ในโลกของไมโครเซอร์วิส แต่ละพื้นที่เก็บข้อมูลเป็นเกาะของตัวเอง วิศวกรที่ถูกลืมใน repo หนึ่งอาจไม่เคยถูกสังเกตเห็นโดยวิศวกรที่ทำงานในที่อื่น ไม่มีที่เดียวที่จะค้นหาชื่อคิว ไม่มีมุมมองแบบรวมของสิ่งที่กำลังทำงานอยู่ ในที่สุดเราก็สามารถเห็นภาพทั้งหมดได้ เข้าคิวกับผู้ผลิตแต่ไม่มีผู้บริโภค เราสามารถค้นหาคนงานที่อ้างอิงถึงคิวที่ไม่มีอยู่อีกต่อไป การรวมไม่ได้ออกแบบมาเพื่อช่วยให้เราค้นหาโครงสร้างพื้นฐานของซอมบี้ - แต่มันทำให้เป็นเช่นนั้นการค้นพบนี้แทบจะหลีกเลี่ยงไม่ได้ จริงๆ แล้วสิ่งที่เราทำเมื่อเราระบุกระบวนการที่กำพร้าได้แล้ว เราก็ต้องตัดสินใจว่าจะทำอย่างไรกับกระบวนการเหล่านั้น ต่อไปนี้คือวิธีที่เราเข้าถึงมัน ขั้นแรก เราติดตามแต่ละอันไปยังต้นกำเนิดของมัน เราขุดค้นประวัติ git และเอกสารเก่าๆ เพื่อทำความเข้าใจว่าเหตุใดผู้ปฏิบัติงานแต่ละคนจึงถูกสร้างขึ้นตั้งแต่แรก ในกรณีส่วนใหญ่ วัตถุประสงค์เดิมมีความชัดเจน: การย้ายข้อมูลเพียงครั้งเดียว คุณลักษณะที่เลิกใช้งาน วิธีแก้ปัญหาชั่วคราวที่หมดประโยชน์ จากนั้นเราก็ยืนยันว่าไม่ได้ใช้งานจริง ก่อนที่จะลบสิ่งใดออก เราได้เพิ่มการบันทึกเพื่อตรวจสอบว่ากระบวนการเหล่านี้ไม่ได้ทำสิ่งสำคัญที่เราพลาดไปอย่างเงียบๆ เราเฝ้าติดตามอยู่สองสามวันเพื่อให้แน่ใจว่าพวกเขาจะไม่ถูกเรียกเลย และเราก็ลบออกทีละน้อย เราไม่ได้ลบทุกอย่างพร้อมกัน เราได้ลบกระบวนการออกทีละขั้นตอน โดยคอยดูผลข้างเคียงที่ไม่คาดคิด (โชคดีที่ไม่มี) ในที่สุด เราก็บันทึกสิ่งที่เราเรียนรู้ เราได้เพิ่มบันทึกลงในเอกสารภายในของเราเกี่ยวกับสิ่งที่แต่ละกระบวนการทำแต่แรกและเหตุใดจึงถูกลบออก ดังนั้นวิศวกรในอนาคตจึงไม่สงสัยว่ามีบางสิ่งที่สำคัญหายไปหรือไม่ มีอะไรเปลี่ยนแปลงหลังจากการล้างข้อมูล เรายังเร็วในการวัดผลกระทบทั้งหมด แต่นี่คือสิ่งที่เราได้เห็นจนถึงตอนนี้ รายการโครงสร้างพื้นฐานของเราถูกต้องแล้ว เมื่อมีคนถามว่า “เราทำงานคนงานอะไร?” เราสามารถตอบคำถามนั้นได้อย่างมั่นใจ การสนทนาการเริ่มต้นใช้งานก็ง่ายขึ้นเช่นกัน วิศวกรหน้าใหม่ไม่สะดุดกับกระบวนการลึกลับและสงสัยว่ากระบวนการเหล่านี้ขาดบริบทหรือไม่ โค้ดเบสสะท้อนถึงสิ่งที่เราทำจริง ไม่ใช่สิ่งที่เราทำเมื่อห้าปีที่แล้ว ถือว่ารีแฟกเตอร์เป็นเหมือนโบราณคดีและการป้องกัน สิ่งสำคัญที่สุดที่ผมได้รับจากโปรเจ็กต์นี้ คือ การปรับแฟกเตอร์ที่สำคัญทุกครั้งคือโอกาสสำหรับโบราณคดี เมื่อคุณเจาะลึกลงไปในระบบ และเข้าใจอย่างแท้จริงว่าชิ้นส่วนต่างๆ เชื่อมโยงกันอย่างไร คุณจะอยู่ในตำแหน่งที่สมบูรณ์แบบที่จะตั้งคำถามถึงสิ่งที่ยังจำเป็นอยู่ คิวนั้นจากโปรเจ็กต์เก่าบางอันเหรอ? ผู้ปฏิบัติงานที่ใครบางคนสร้างขึ้นสำหรับการย้ายข้อมูลแบบครั้งเดียว? งานที่กำหนดเวลาไว้ซึ่งอ้างอิงถึงคุณลักษณะที่คุณไม่เคยได้ยินมาก่อน? พวกมันอาจยังคงทำงานอยู่ นี่คือสิ่งที่เรากำลังสร้างในกระบวนการของเราในอนาคต:ในระหว่างการรีแฟคเตอร์ใดๆ ให้ถามว่า: มีอะไรอีกที่ส่งผลกระทบต่อระบบนี้ซึ่งเราไม่ได้ดูมาระยะหนึ่งแล้ว?เมื่อเลิกใช้งานฟีเจอร์ ให้ติดตามไปจนถึงกระบวนการเบื้องหลังของมัน ไม่ใช่แค่โค้ดที่ผู้ใช้ต้องเผชิญเท่านั้น เมื่อมีคนออกจากทีม บันทึกสิ่งที่พวกเขารับผิดชอบ โดยเฉพาะอย่างยิ่งสิ่งที่พวกเขาทำงานในเบื้องหลัง เรายังคงมีส่วนที่เก่ากว่าของโค้ดเบสของเราที่ยังไม่ได้ถูกย้ายไปยังเวอร์ชันเดียว ที่เก็บข้อมูลยัง เมื่อเรารวบรวมต่อไป เราก็มั่นใจว่าเราจะพบโบราณวัตถุที่ซ่อนอยู่เหล่านี้อีก แต่ตอนนี้เราพร้อมแล้วที่จะจับพวกมันและป้องกันไม่ให้เกิดโค้ดใหม่ เมื่อโค้ดทั้งหมดของคุณรวมอยู่ในที่เดียว โครงสร้างพื้นฐานที่ถูกละเลยก็ไม่มีที่ซ่อนอีกต่อไป

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free