Mono-Repo กับ Multi-Repo: นำเสนอกลยุทธ์การจัดเก็บรหัส

เผยแพร่แล้ว: 2021-12-22

Mono-repo และ Multi-repo เป็นสองกลยุทธ์หลักสำหรับการโฮสต์และจัดการโค้ดผ่าน Git เราหารือทั้งกลยุทธ์และข้อดีและข้อเสียอย่างละเอียด

บทนำ

โครงการที่ทันสมัยส่วนใหญ่ได้รับการจัดการและโฮสต์บน Git Git ได้กลายเป็นแพลตฟอร์มมาตรฐานสำหรับการจัดการซอร์สโค้ดแบบกระจาย การควบคุมเวอร์ชัน และการทำงานร่วมกันจากทุกที่ในโลก Git นั้นรวดเร็วและมีประสิทธิภาพ มีสองวิธีหลักในการโฮสต์และจัดการรหัส Git ของคุณ:

  • โมโน-repo
  • หลาย repo

ก่อนเจาะลึกแนวทางเหล่านี้ เรามาทำความเข้าใจว่า repo ทำงานอย่างไร

Repos คืออะไร?

ที่เก็บ (Repo) มีโฟลเดอร์และไฟล์ทั้งหมดของโครงการของคุณ นอกจากนี้ยังมีข้อมูลเกี่ยวกับผู้ใช้ ผู้คน และคอมพิวเตอร์

ข้อมูลที่เก็บมีการควบคุมเวอร์ชัน repo สามารถเป็นเจ้าของโดยบุคคลหรือกลุ่มสมาชิกในทีม

Git เป็นที่เก็บข้อมูล อาจเป็นสาธารณะ ส่วนตัว หรือภายในก็ได้ GitHub เป็นบริการโฮสต์ของที่เก็บ Git และมีส่วนต่อประสานกับผู้ใช้

Git มีคุณสมบัติการควบคุมเวอร์ชันและการแชร์โค้ด อย่างไรก็ตาม สิ่งที่ทำให้ Git แตกต่างไปจากนี้ก็คือ หากนักพัฒนาต้องการเปลี่ยนแปลงไฟล์ของตน พวกเขาสามารถคัดลอกที่เก็บทั้งหมดไปยังระบบภายในเครื่องได้ ดังนั้น แม้ว่านักพัฒนาจะไม่มีสิทธิ์เขียนในโปรเจ็กต์ใดโดยเฉพาะ พวกเขาสามารถคัดลอกเนื้อหาในเครื่องและแก้ไขได้ (เรียกว่าการฟอร์ก)

นอกจากนี้ หากนักพัฒนาต้องการแชร์การเปลี่ยนแปลงที่ทำในเครื่อง พวกเขาสามารถส่ง "คำขอดึง" ไปยังเจ้าของโครงการได้

โครงการสามารถมีบริการเดียว ถ้าโปรเจ็กต์ของคุณมีหลายเวิร์กโฟลว์ คุณสามารถสร้างบริการได้หลายรายการสำหรับแต่ละเวิร์กโฟลว์ นักพัฒนาส่วนใหญ่ต้องการแยกโปรเจ็กต์ขนาดใหญ่ออกเป็นบริการอิสระที่มีขนาดเล็กกว่า โดยมีฟังก์ชันตั้งแต่หนึ่งฟังก์ชันขึ้นไป แต่ละบริการสามารถแก้ปัญหาทางธุรกิจต่างๆ ด้วยความนิยมของเฟรมเวิร์กแบบไร้เซิร์ฟเวอร์ ผู้ใช้จึงสามารถเข้าถึงฟังก์ชันต่างๆ ที่เป็นบริการได้

เมื่อคุณสร้างและใช้งานฟังก์ชันเหล่านี้แล้ว ขั้นตอนต่อไปคือการจัดโครงสร้างและควบคุมเวอร์ชัน - คุณสามารถมีบริการทั้งหมดของคุณในที่เก็บเดียว (mono-repo) หรือมีพื้นที่เก็บข้อมูลแยกต่างหากสำหรับแต่ละบริการที่คุณมี ( หลาย repo)!

โมโน repo มัลติรีโป

Mono-repo คืออะไร?

ในวิธีการซื้อซ้ำแบบโมโน คุณสามารถเก็บบริการทั้งหมดของคุณไว้ในที่เก็บข้อมูลเดียว (โมโน) คุณยังสามารถปรับใช้และจัดการแต่ละบริการได้อย่างอิสระ บริการสามารถแบ่งปันไลบรารีและรหัสทั่วไป

บริษัทต่างๆ เช่น Facebook, Google และ Dropbox ใช้ mono-repo

ข้อดีของ Mono-repo

วิธี Mono-repo มีข้อดีหลายประการ:

  • ที่เดียวในการจัดเก็บรหัสโครงการทั้งหมด และทุกคนในทีมสามารถเข้าถึงได้
  • ใช้ซ้ำและแชร์โค้ดได้ง่าย ทำงานร่วมกับทีม
  • ง่ายต่อการเข้าใจผลกระทบของการเปลี่ยนแปลงของคุณที่มีต่อทั้งโครงการ
  • ตัวเลือกที่ดีที่สุดสำหรับการรีแฟคเตอร์โค้ดและการเปลี่ยนแปลงครั้งใหญ่ในโค้ด
  • สมาชิกในทีมสามารถดูภาพรวมของโครงการทั้งหมดได้
  • ง่ายต่อการจัดการการพึ่งพา

ข้อเสียของ Mono-repo

แน่นอน mono-repo มีข้อเสียอยู่บ้าง ประเด็นหลักคือประสิทธิภาพ หากโปรเจ็กต์ของคุณเติบโตและมีการเพิ่มไฟล์ทุกวัน ๆ การเช็คเอาท์ การดึง และการดำเนินการอื่นๆ อาจช้าลงและการค้นหาไฟล์อาจใช้เวลานานขึ้น

นอกจากนี้ หากคุณจ้างผู้รับเหมาอิสระจำนวนมากสำหรับโครงการของคุณ การให้พวกเขาเข้าถึงฐานรหัสทั้งหมดอาจไม่ปลอดภัยนัก

นอกจากนี้ การนำการปรับใช้อย่างต่อเนื่อง (CD) ไปใช้ทำได้ยาก เนื่องจากหลายคนสามารถเช็คอินการเปลี่ยนแปลงได้ และระบบ Continuous Integration (CI) ของคุณอาจต้องทำการสร้างใหม่หลายครั้ง

บริษัทขนาดใหญ่ที่ใช้ mono-repos ได้ปรับแต่งเครื่องมือเพื่อจัดการกับปัญหาการปรับขนาด ตัวอย่างเช่น Facebook ใช้ระบบไฟล์แบบกำหนดเองและการควบคุมแหล่งที่มา

Multi-repo คืออะไร?

ในแนวทาง multi-repo มีที่เก็บหลายแห่งที่โฮสต์ไลบรารีและบริการต่างๆ ของโปรเจ็กต์ หากบริการเปลี่ยนแปลง นักพัฒนาจำเป็นต้องสร้างใหม่เฉพาะบริการนั้น ไม่ใช่ทั้งโครงการ บุคคลและทีมสามารถทำงานในบริการเฉพาะของตน และเข้าถึงได้เฉพาะบริการที่จำเป็นเท่านั้น

บริษัทอย่าง Netflix และ Amazon ใช้การซื้อซ้ำหลายรายการ

ข้อดีของ Multi-repo

จำนวนบริษัทที่นำ multi-repo มาใช้มากกว่าบริษัทที่ซื้อ mono-repo เนื่องจากเหตุผลดังต่อไปนี้:

  • แต่ละบริการและไลบรารีมีการกำหนดเวอร์ชันของตัวเอง
  • การเช็คเอาต์และดึงโค้ดมีขนาดเล็กและแยกจากกัน ดังนั้นจึงไม่มีปัญหาด้านประสิทธิภาพแม้ว่าขนาดของโปรเจ็กต์จะเพิ่มขึ้น
  • ทีมสามารถทำงานได้อย่างอิสระและไม่จำเป็นต้องเข้าถึง codebase ทั้งหมด
  • การพัฒนาที่รวดเร็วและความยืดหยุ่น
  • แต่ละบริการสามารถเผยแพร่แยกกันและมีวงจรการปรับใช้ของตัวเอง ทำให้ CI และ CD ง่ายต่อการใช้งาน
  • การควบคุมการเข้าถึงที่ดีขึ้น – ทุกทีมไม่จำเป็นต้องมีสิทธิ์เข้าถึงไลบรารีทั้งหมดอย่างสมบูรณ์ – แต่สามารถเข้าอ่านได้หากต้องการ

ข้อเสียของ Multi-repo

  • ต้องซิงค์การพึ่งพาและไลบรารีที่ใช้ในบริการและโครงการเป็นประจำเพื่อรับเวอร์ชันล่าสุด
  • ส่งเสริมวัฒนธรรมที่เงียบงันในบางจุด นำไปสู่โค้ดที่ซ้ำกัน และแต่ละทีมพยายามแก้ไขปัญหาเดียวกัน
  • แต่ละทีมอาจปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดที่แตกต่างกันสำหรับรหัสของตน ซึ่งทำให้เกิดปัญหาในการปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดทั่วไป

ความแตกต่างระหว่าง Mono และ Multi Repo

ให้เราสรุปความแตกต่างระหว่าง mono-repo และ multi-repo:

โมโน-repo หลาย repo
รหัสทั้งหมดของโครงการทั้งหมดขององค์กรอยู่ในที่เก็บส่วนกลาง แต่ละบริการและโครงการมีที่เก็บแยกต่างหาก
ทีมสามารถทำงานร่วมกันและทำงานร่วมกันได้ เห็นความเปลี่ยนแปลงของกันและกัน ทีมสามารถทำงานได้อย่างอิสระ การเปลี่ยนแปลงส่วนบุคคลไม่ส่งผลต่อการเปลี่ยนแปลงโดยทีมหรือโครงการอื่น
แต่ละคนเข้าถึงโครงสร้างโครงการทั้งหมด ผู้ดูแลระบบสามารถจำกัดการควบคุมการเข้าถึงโครงการหรือบริการที่นักพัฒนาต้องการเข้าถึง
ปัญหาในการขยายขนาดอาจเกิดขึ้นได้หากขนาดของโครงการเติบโตขึ้นเรื่อยๆ ประสิทธิภาพที่ดีเนื่องจากรหัสที่จำกัดและหน่วยบริการที่เล็กกว่า
ยากที่จะปรับใช้การปรับใช้อย่างต่อเนื่อง (CD) และการรวมอย่างต่อเนื่อง (CI) นักพัฒนาสามารถบรรลุ CD และ CI ได้อย่างง่ายดายเพราะสามารถสร้างบริการได้อย่างอิสระ
นักพัฒนาสามารถแชร์ไลบรารี, API และโค้ดทั่วไปอื่นๆ ได้อย่างง่ายดายเมื่ออัปเดตในที่เก็บส่วนกลาง การเปลี่ยนแปลงใดๆ ในไลบรารีและรหัสทั่วไปอื่นๆ ควรซิงค์เป็นระยะเพื่อหลีกเลี่ยงปัญหาในภายหลัง

บทสรุป

ทั้ง mono-repo และ multi-repo ได้รับความนิยมเท่ากัน และอันไหนดีกว่าขึ้นอยู่กับขนาดโปรเจ็กต์ของคุณ ความต้องการของโปรเจ็กต์ และระดับของการกำหนดเวอร์ชันและการควบคุมการเข้าถึงที่คุณต้องการ

Mono-repo สนับสนุนความสม่ำเสมอในขณะที่ multi-repo เน้นที่การแยกส่วน ในขณะที่อยู่ใน repo แบบโมโน ทีมงานทั้งหมดสามารถเห็นการเปลี่ยนแปลงที่ทำโดยบุคคลหนึ่งคน โดย multi-repo จะสร้าง repo แยกกันสำหรับแต่ละทีม ซึ่งมีสิทธิ์เข้าถึงเฉพาะบริการที่จำเป็นเท่านั้น หากคุณต้องการใช้ mono-repo และ multi-repo ร่วมกันสำหรับโครงการของคุณ คุณสามารถใช้ meta ซึ่งเป็นเครื่องมือในการจัดการหลายโครงการและไลบรารี

คุณอาจสนใจแหล่งข้อมูลฟรีเพื่อเรียนรู้ Git