วิศวกรเชิงเส้น Mufeez Amjad ได้เผยแพร่เรื่องราวโดยละเอียดเกี่ยวกับวิธีที่บริษัทปรับปรุงไปป์ไลน์การบูรณาการอย่างต่อเนื่อง หลังจากที่ตัวแทนการเข้ารหัส AI เปลี่ยน CI ให้เป็นคอขวดที่เลวร้ายที่สุด โดยลดเวลารอคำขอดึงจากมากกว่าหกนาทีเหลือเพียงห้านาที ในขณะที่ชุดทดสอบเกือบสี่เท่าตั้งแต่ต้นปี

โพสต์ดังกล่าวซึ่งเผยแพร่ในบล็อกวิศวกรรมของ Linear เมื่อวันที่ 21 กันยายน เริ่มต้นขึ้นเหมือนกับที่สิ่งเหล่านี้มักเกิดขึ้น โดยมีข้อความสั้น ๆ จากด้านบน เมื่อต้นปีนี้ Amjad เปิด Linear และพบว่า Tuomas ซึ่งเป็น CTO ของบริษัทได้มอบหมายปัญหาชื่อ "ต้นทุน CI สูง" ให้เขา และขอให้เขาทำให้ CI เร็วขึ้นในขณะที่เขาทำงานอยู่ หากต้องการทราบบริบทเพิ่มเติมเกี่ยวกับเรื่องราวนี้ โปรดดู ความครอบคลุมของอุตสาหกรรม AI ที่กำลังดำเนินอยู่

เมื่อตัวแทนแซงหน้าการตรวจสอบความถูกต้อง

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

การเพิ่มประสิทธิภาพเชิงเส้นสำหรับสองเมตริก: ระยะเวลาที่ PR รอบน CI และระยะเวลาที่รันเนอร์ใช้เวลานานเท่าใด ผลลัพธ์หลังการทำงานหลายเดือน: แม้ว่าชุดทดสอบจะเพิ่มขึ้นเกือบสี่เท่าตั้งแต่เดือนมกราคม แต่เวลารอคำขอดึงลดลงจากมากกว่าหกนาทีเหลือเพียงมากกว่าห้านาที และเวลารันเนอร์ต่อการทดสอบก็ลดลงประมาณครึ่งหนึ่ง

งานโดยกว้างๆ แบ่งออกเป็นสี่ประเภท ได้แก่ โครงสร้างพื้นฐานและเครื่องมือที่อัปเกรดแล้ว เพิ่มประสิทธิภาพงานที่ควบคุมงานอื่นๆ ลดการตั้งค่าซ้ำๆ และทำให้การดำเนินการทดสอบมีประสิทธิภาพมากขึ้น โค้ดเบสของ Linear ส่วนใหญ่เป็น TypeScript แต่การปรับปรุงหลายอย่างใช้ได้กับภาษาและ toolchains

เครื่องจักรที่เร็วกว่าและคอมไพเลอร์ดั้งเดิม

กำไรแรกสุดบางส่วนแทบไม่ต้องเพิ่มประสิทธิภาพของ CI เลย การย้ายปริมาณงานออกจาก GitHub Actions ไปยังรันเนอร์ของบริษัทอื่นที่มี CPU ที่เร็วกว่า พื้นที่เก็บข้อมูลประสิทธิภาพสูงกว่า และโครงสร้างพื้นฐานแคชที่ดีกว่า ให้ผลตอบแทนทันที เมื่อเทียบเคียงกันของสองวันทั้งสองฝั่งของสวิตช์ งานทำงานได้เร็วขึ้น 34% โดยเฉลี่ย โดยปริมาณงานบางอย่าง เช่น `tsc` ลดลง 52%

การปรับปรุง Toolchain ให้ทันสมัยทำให้ได้รับชัยชนะมากขึ้น การเปลี่ยนมาใช้ `tsgo` ซึ่งเป็นคอมไพเลอร์ TypeScript ดั้งเดิม จะตัดค่ามัธยฐานรายสัปดาห์ของการตรวจสอบการพิมพ์ลง 73% ซึ่งมากพอที่จะย้ายคอขวดออกจากการตรวจสอบการพิมพ์โดยสิ้นเชิง

Linting โดยไม่มีกราฟประเภท

Linting เป็นอีกหนึ่งเป้าหมายแรกเริ่ม กฎ ESLint แบบกำหนดเองของ Linear จำนวนหนึ่งขึ้นอยู่กับข้อมูลประเภท TypeScript ซึ่งบังคับให้ทุก Lint ทำงานสร้างกราฟชนิดเต็มก่อนที่จะประเมิน — ทำให้ Lint เป็นหนึ่งในงาน CI ที่ต้องใช้หน่วยความจำมากที่สุด

ทีมงานเขียนกฎใหม่เพื่อใช้การวิเคราะห์แบบคงที่บนแผนผังไวยากรณ์เชิงนามธรรม โดยระบุโครงสร้างที่เหมือนฟังก์ชันและรูปแบบการป้องกันโดยไม่มีข้อมูลประเภทใดๆ นั่นทำให้ ESLint ปล่อย TypeScript โดยสิ้นเชิง โดยลดเวลา Lint ของ API ลง 68% และเวลา Lint ของพื้นที่เก็บข้อมูลเต็มลดลง 55% โดยการใช้หน่วยความจำลดลงอย่างมาก นอกจากนี้ยังช่วยอำนวยความสะดวกในการโยกย้ายไปยัง Oxlint ในเวลาต่อมา ซึ่งช่วยลดเวลาของนักวิ่ง CI ที่ใช้กับผ้าสำลีอีกด้วย

ลดขนาดเส้นทางที่สำคัญ

ด้วยการตรวจสอบแต่ละรายการที่เร็วขึ้น Linear จะซูมออกและถือว่า CI เป็นระบบ สิ่งนี้ดึงดูดความสนใจไปที่งานเล็กๆ ที่อยู่หน้างานอื่นๆ ทั้งหมด เช่น การตรวจจับการเปลี่ยนแปลงเส้นทางและการตรวจสอบแคชผลการทดสอบที่เกตที่ระดับงาน ซึ่งหมายความว่าไม่มีชิ้นส่วนการทดสอบ API ทั้งแปดรายการที่สามารถเริ่มต้นได้จนกว่าจะเสร็จสิ้น

การแก้ไขมีรายละเอียดปลีกย่อยแต่เพิ่มเติม การกำหนดความลึกในการดึงข้อมูลสูงสุดใช้เวลาเกตที่ช้าที่สุดจาก 94 วินาทีเหลือ 20 วินาที การลบการชำระเงินทั้งหมดออกจากงานที่ไม่จำเป็นต้องใช้แผนผังการทำงานจะลดเวลาเหล่านั้นจาก 27 วินาทีเหลือ 7 วินาที การชำระเงินแบบกระจัดกระจายและไม่มีจุดบกพร่องซึ่งมีประวัติที่จำกัดจะช่วยประหยัดเวลาได้อีก 11 วินาทีคี่สำหรับเหตุการณ์พุชและคิวรวม โดยรวมแล้ว ระยะเวลามัธยฐานของงานการตรวจจับการเปลี่ยนแปลงลดลงจาก 26 วินาทีเป็น 8, p90 จาก 31 เป็น 12 และทำงานช้าที่สุดจาก 138 วินาทีเหลือ 37 วินาที

ความน่าเชื่อถือในการชำระเงินก็จำเป็นต้องได้รับการปรับปรุงเช่นกัน เนื่องจากรันเนอร์บุคคลที่สามอยู่นอกเครือข่ายของ GitHub และอาศัยลิงก์ IP โดยตรง การเสื่อมสภาพของลิงก์เป็นระยะ ๆ จึงทำให้การดึงข้อมูลหยุดชะงักในบางครั้ง Linear แทนที่ `actions/checkout` ด้วยการดำเนินการแบบคอมโพสิตของตัวเองที่ลองใหม่ด้วย backoff ตั้งค่า `GIT_HTTP_LOW_SPEED_LIMIT` และ `GIT_HTTP_LOW_SPEED_TIME` ดังนั้นการเชื่อมต่อที่หยุดทำงานจะถูกยกเลิกหลังจากผ่านไปประมาณ 30 วินาทีแทนที่จะหยุดทำงาน และใช้แคชการชำระเงินที่เก็บมิเรอร์ git แบบถาวรบนดิสก์ที่ติดหนึบ

การแก้ไขเล็กๆ น้อยๆ อย่างหนึ่งได้ลบเวลาที่เสียไปกับคิวการรวม: เครื่องหมายแคชถูกเขียนเป็นส่วนหนึ่งของการตรวจสอบขั้นสุดท้ายก่อนที่จะรวม ดังนั้น PR จึงสามารถอยู่ในคิวได้แม้ว่าจะผ่านการทดสอบแล้วก็ตาม การย้ายการเขียนนั้นไปยังงานที่ไม่ใช่ gating ใช้เวลา 42 วินาทีจากเส้นทางผสานสำหรับทุกคำขอดึง API และรายการคิวผสาน เมื่อรวมกันแล้ว การเปลี่ยนแปลงเหล่านี้ใช้เวลาประมาณหนึ่งนาทีในการตรวจสอบที่จำเป็นสำหรับ API PR เกี่ยวกับการพลาดแคช ในขณะที่ลดการสตาร์ทของนักวิ่ง

วินาทีที่สูญเปล่าน้อยลงต่องาน

ค่าติดตั้งการโจมตีประเภทสุดท้ายที่เกิดขึ้นซ้ำๆ ในทุกงาน ส่วนทดสอบ API แต่ละส่วนใช้เวลา 7 ถึง 8 วินาทีในการติดตั้งไคลเอ็นต์ Postgres เดียวกันโดยมีความฉลาดในการใช้งานทุกครั้ง การย้ายมันไปเป็นอิมเมจฐาน CI ขนาดเล็กควบคู่ไปกับ Node หมายความว่าชาร์ดสามารถเริ่มทำงานได้ ต่อมาทีมงานได้เพิ่มส่วนหัวของบิลด์ดั้งเดิมให้กับรูปภาพหลังจากพบว่าการดาวน์โหลดในระหว่างการตั้งค่าอาจค้างในบางครั้ง

ทำไมมันถึงดังก้อง

โพสต์ดังกล่าวสร้างความตื่นตะลึงให้กับนักพัฒนา โดยขึ้นหน้าแรกของ Hacker News โดยได้รับคะแนนประมาณ 250 คะแนน และความคิดเห็นประมาณ 280 รายการภายในหนึ่งวัน ปฏิกิริยานี้อธิบายได้ง่าย — ประสบการณ์ของ Linear กล่าวถึงต้นทุนของการพัฒนาที่ได้รับความช่วยเหลือจาก AI ซึ่งองค์กรด้านวิศวกรรมส่วนใหญ่เผชิญอยู่ในขณะนี้เท่านั้น เจ้าหน้าที่ที่สร้างคำขอดึงในไม่กี่นาทียังคงรอไปป์ไลน์การตรวจสอบความถูกต้องที่ออกแบบมาสำหรับจังหวะของมนุษย์ และทุกนาทีของการรอนั้นจะคูณกับทุกเจ้าหน้าที่ที่ทำงานขนานกัน

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

---

ก้าวนำหน้า AI

รับข่าวสาร AI การวิเคราะห์ และความก้าวหน้าล่าสุด ทั้งหมดในที่เดียว

อ่านข่าว AI เพิ่มเติม →