การสร้าง SPACE: รันไทม์ที่ปลอดภัยและมีประสิทธิภาพสำหรับเอเจนต์ที่ทำงานยาวนาน

SPACE คือแพลตฟอร์มแซนด์บ็อกซ์ที่ปลอดภัยและมีประสิทธิภาพของ Perplexity ซึ่งขับเคลื่อนเวิร์กโฟลว์ของเอเจนต์ที่ทำงานยาวนานและการรันโค้ดแบบแยกส่วนที่รวดเร็ว

ผู้เขียนPerplexity Engineering

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

แนวทางแซนด์บ็อกซ์แบบคอนเทนเนอร์แบบดั้งเดิมไม่ได้ถูกออกแบบมาสำหรับงานเหล่านี้ โดยทั่วไปแนวทางเหล่านี้จะสันนิษฐานว่าเป็นงานอายุสั้นและไร้สถานะ (stateless) และมีเคอร์เนลเป็นจุดเดียวที่อาจทำให้เกิดความล้มเหลว ในทางตรงกันข้าม เซสชันของเอเจนต์จะมีอายุยาวนานและมีสถานะ (stateful): เอเจนต์สะสมบริบทนานหลายชั่วโมง ระบบไฟล์สำหรับการทำงาน และกระบวนการรันที่ไม่อาจแค่โยนทิ้งแล้วสร้างขึ้นใหม่จากศูนย์ได้ ยิ่งไปกว่านั้น เวิร์กโหลดภายในควรไม่ได้รับความเชื่อถือโดยค่าเริ่มต้น ซึ่งจำเป็นต้องมีมาตรการรักษาความปลอดภัยที่แข็งแกร่งยิ่งขึ้น เซสชันเอเจนต์ที่ทำงานยาวนานต้องการซับสเตรตที่สามารถแยกเกสต์ที่ไม่เป็นมิตร รักษาความปลอดภัยสถานะของมัน และยังคงสามารถใช้งานได้ในสเกลใหญ่

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

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

การแชร์ข้อมูลระหว่างแซนด์บ็อกซ์มากขึ้นทำให้การสร้างเร็วขึ้น แต่ก็ขยายพื้นที่ผิวของการโจมตีให้กว้างขึ้น

การบันทึกสโ냅ช็อตบ่อยขึ้นช่วยปรับปรุงการกู้คืนและเปิดใช้งานฟีเจอร์ต่างๆ เช่น การย้อนกลับ แต่ต้องใช้เวลาและพื้นที่จัดเก็บ

แซนด์บ็อกซ์ของเอเจนต์ เช่น แซนด์บ็อกซ์ที่จำเป็นสำหรับการรันโค้ด ใช้ Agent Skills หรือดำเนินการไปป์ไลน์ Search as Code ในคิวรีของ Computer จำเป็นต้องใช้ทั้งสามอย่าง เราทำงานอย่างหนักในช่วงสองสามเดือนที่ผ่านมาเพื่อวิศวกรรมโครงสร้างพื้นฐานของเอเจนต์รุ่นถัดไปที่ขับเคลื่อนผลิตภัณฑ์ของเรา วันนี้เราขอแนะนำ SPACE (Sandboxed Platform for Agentic Code Execution): แพลตฟอร์มแซนด์บ็อกซ์ที่สร้างขึ้นสำหรับเวิร์กโฟลว์ของเอเจนต์ที่มีความปลอดภัย น่าเชื่อถือ และมีประสิทธิภาพในสเกลใหญ่ เมื่อเดือนที่แล้ว เราเริ่มเปิดตัว SPACE เป็นเลเยอร์แซนด์บ็อกซ์ที่ขับเคลื่อน Perplexity Computer ตลอดสัปดาห์ที่ผ่านมา ระบบได้รองรับการสร้างแซนด์บ็อกซ์อย่างปลอดภัยหลายล้านครั้ง และการเชื่อมต่อใหม่หลายสิบล้านครั้ง โดยมีเวลาในการสปินอัปเร็วกว่าโซลูชันก่อนหน้าของเรา 3-5 เท่า

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

สถาปัตยกรรม

ในระดับสูง ระบบถูกจัดระเบียบออกเป็นสามเลเยอร์

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

บริการระดับโหนด (node-local services) คือกลไกภายในเครื่องที่จำเป็นในการดำเนินการตามแผนของระนาบการควบคุม พวกมันเป็นเจ้าของวงจรชีวิตของแซนด์บ็อกซ์ ที่เก็บข้อมูล ระบบเครือข่าย และการดำเนินการที่มีสิทธิ์พิเศษเบื้องหลังสิ่งเหล่านี้

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

สถาปัตยกรรมของ SPACE แบ่งออกเป็นสามเลเยอร์: ระนาบการควบคุมแบบไร้สถานะ (stateless control plane); บริการระดับโหนดที่จัดการวงจรชีวิตของแซนด์บ็อกซ์ พื้นที่เก็บข้อมูล และเกตความปลอดภัย และตัวแซนด์บ็อกซ์เอง

ระนาบการควบคุม

เกตเวย์ API คือจุดเริ่มต้น คำขอขาเข้าได้รับการตรวจสอบสิทธิ์และอนุญาต จากนั้นจึงแปลเป็นบันทึกของสถานะที่ต้องการ

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

บริการระดับโหนด

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

ตัวจัดการแซนด์บ็อกซ์ทราบว่าแซนด์บ็อกซ์ใดกำลังทำงาน หยุดชั่วคราว ระงับ หรือหยุดทำงาน พร้อมทั้งทรัพยากรจริงของพวกมัน มันทำงานโดยไม่มีสิทธิ์พิเศษและมอบหมายงานที่มีสิทธิ์พิเศษทั้งหมดให้กับตัวจัดการโหนด ซึ่งเป็นกระบวนการรูทเพียงกระบวนการเดียวที่ทำหน้าที่เป็นตัวกลางพริมิทิฟพื้นฐาน การจัดเก็บข้อมูลได้รับการจัดการภายในเครื่องและคงทนถาวร: สโ냅ช็อตของสถานะแซนด์บ็อกซ์ปัจจุบันจะถูกบันทึกไว้บนโหนด และตัวจัดการโวลุ่มจะย้ายสโ냅ช็อตและเทมเพลตเข้าและออกจากที่เก็บข้อมูลออบเจ็กต์ตามต้องการเพื่อให้สามารถดำเนินการข้ามโหนดได้ เกตความปลอดภัยคอยควบคุมสิ่งที่แซนด์บ็อกซ์สามารถเข้าถึงได้: ตัวจัดการข้อมูลรับรองจะควบคุมการฉีดข้อมูลรับรองภายใต้การอนุญาตต่อบริการ และเกตเวย์เครือข่ายจะบังคับใช้นโยบายการออกนอกเครือข่าย (egress) ของแซนด์บ็อกซ์แต่ละตัว

แซนด์บ็อกซ์

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

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

สามเสาหลัก: ความปลอดภัย ฟังก์ชันการทำงาน และประสิทธิภาพ

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

ความปลอดภัย: การปกป้องข้อมูลและระบบ

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

SPACE บังคับใช้ความปลอดภัยแบบเป็นชั้นโดยการรวมการแยกในระดับ VM และโฮสต์ เข้ากับช่องทางการสื่อสาร การจัดการข้อมูลรับรอง และการเข้ารหัสที่มีการควบคุมอย่างเข้มงวด

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

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

ข้อมูลได้รับการปกป้องเมื่อไม่ได้ใช้งาน (at rest) SPACE รองรับ BYOK (Bring Your Own Key) เพื่อปกป้องข้อมูลที่จัดเก็บไว้ภายนอก คีย์การเข้ารหัสมาจากบริการจัดการคีย์ของลูกค้าและจะไม่เข้าสู่แซนด์บ็อกซ์ หากองค์กรเพิกถอนคีย์ ข้อมูลของพวกเขาจะไม่สามารถอ่านได้

ฟังก์ชันการทำงาน: การขับเคลื่อนเวิร์กโฟลว์ของเอเจนต์

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

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

ชุดย่อยหลักของสถานะแซนด์บ็อกซ์และการเปลี่ยนผ่านสถานะช่วยให้เกิดการสนับสนุนวงจรชีวิตที่สมบูรณ์

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

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

ประสิทธิภาพ: การปรับแต่งเวลาและพื้นที่

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

ตัวเลือกการออกแบบที่สำคัญทำให้สิ่งนี้เป็นไปได้: ระบบไฟล์ SPACE ใช้ btrfs เป็นระบบไฟล์บนโหนดสำหรับการจัดเก็บแซนด์บ็อกซ์ Btrfs (ระบบไฟล์ B-tree) ผสมผสานระบบไฟล์แบบคัดลอกเมื่อเขียน (copy-on-write) เข้ากับการจัดการโวลุ่มตรรกะแบบบูรณาการ ซึ่งมีประโยชน์หลายประการ:

สำเนา Reflink ทำได้รวดเร็ว เนื่องจากคุณแชร์เอกเซนต์ (extents) เบื้องต้น ดังนั้นจึงจำเป็นต้องคัดลอกเฉพาะข้อมูลเมตาเท่านั้น

สโ냅ช็อตเป็นแบบอะตอมิกและรวดเร็ว เนื่องจากคุณเพียงแค่สร้างรูทใหม่

ต้องใช้พื้นที่จัดเก็บน้อยที่สุด เนื่องจากคุณจัดเก็บเฉพาะส่วนที่เปลี่ยนแปลงไปเท่านั้น

ส่งผลให้สามารถสร้างและกู้คืนแซนด์บ็อกซ์ได้อย่างรวดเร็ว แทนที่จะสร้างแซนด์บ็อกซ์จากศูนย์ทุกครั้ง เราเก็บพูลพอดที่อุ่น (warm pool) ซึ่งมีเทมเพลตทั่วไปที่พร้อมใช้งานบนดิสก์อยู่แล้ว และตอบสนองคำขอโดยการผูกมันเข้ากับพอดที่มีเทมเพลตตรงกัน การให้ระบบไฟล์รูทที่เขียนได้แก่แซนด์บ็อกซ์นั้นจึงเป็นการโคลนแบบคัดลอกเมื่อเขียน (copy-on-write) แทนที่จะเป็นการคัดลอกแบบเต็มรูปแบบ เมื่อไม่มีพอดอุ่นที่เหมาะสม เราจะสร้างเทมเพลตตามความต้องการ เราจะรวมคำขอพร้อมกันสำหรับอิมเมจเดียวกันให้เป็นการดาวน์โหลดเดี่ยว ดังนั้นการพรั่งพรูของคำขอที่เหมือนกันจึงไม่กลายเป็นการทำงานที่ซ้ำซ้อนกัน

ผลลัพธ์ที่ได้คือรันไทม์ของแซนด์บ็อกซ์ที่มีทรงพลัง น้ำหนักเบา และรวดเร็วปานสายฟ้า เมื่อเราเปิดตัว SPACE เราได้รันมันควบคู่ไปกับผู้ให้บริการแซนด์บ็อกซ์รายก่อนหน้าของเราบนทราฟฟิกการผลิตเดียวกัน ตลอดสัปดาห์เปิดตัว SPACE สร้างแซนด์บ็อกซ์ได้เร็วกว่าเดิมถึงสามถึงห้าเท่าตลอดการแจกแจง โดยเฉพาะอย่างยิ่ง ค่ามัธยฐานของความหน่วงในการสร้างลดลงจาก 185 มิลลิวินาทีเหลือ 60 มิลลิวินาที (ปรับปรุงขึ้น 3.1 เท่า) และความหน่วงในเปอร์เซ็นต์ไทล์ที่ 90 ลดลงจาก 447 มิลลิวินาทีเหลือ 89 มิลลิวินาที (ปรับปรุงขึ้น 5.0 เท่า) เราสังเกตเห็นการปรับปรุงในระดับความสำคัญที่คล้ายคลึงกันในตัวชี้วัดประสิทธิภาพและการใช้ทรัพยากรอื่นๆ

ในการเปรียบเทียบโดยตรง ความหน่วงในการสร้างสำหรับแซนด์บ็อกซ์ SPACE เร็วกว่าโซลูชันแซนด์บ็อกซ์ก่อนหน้าของเราสูงสุดถึง 5 เท่า

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

บทสรุป

เมื่อออกแบบระบบที่ซับซ้อน มักจะดึงดูดใจให้เลือกวัตถุประสงค์เพียงอย่างเดียวเพื่อเพิ่มประสิทธิภาพแบบแยกส่วน แต่นักพัฒนาของเอเจนต์ระดับแนวหน้าเรียกร้องความปลอดภัย ฟังก์ชันการทำงาน และประสิทธิภาพในสัดส่วนที่เท่ากัน ด้วย SPACE เราตั้งเป้าที่จะบรรลุการปรับปรุงแบบพาเรโต (Pareto improvement) ในทั้งสามเสาหลัก

ตัวเลือกการออกแบบแต่ละรายการสามารถตอบสนองเป้าหมายหลายประการได้พร้อมกัน ทำให้ความสมดุลที่ละเอียดอ่อนนี้เป็นไปได้ VM แบบต่อแซนด์บ็อกซ์ทำให้เวิร์กโหลดแต่ละรายการมีเคอร์เนลของตัวเอง เสริมสร้างความปลอดภัยผ่านการแยกส่วนที่แข็งแกร่ง ในขณะเดียวกันก็ให้ขอบเขตจุดตรวจสอบที่สะอาดซึ่งสโ냅ช็อตพึ่งพา Btrfs ช่วยให้การใช้งานสโ냅ช็อต การแยกสาขา และการดำเนินการอื่นๆ ที่จำเป็นต่อรันไทม์ของเอเจนต์มีประสิทธิภาพ space daemon ช่วยให้การโต้ตอบของเกสต์ทั้งหมดอยู่บนเส้นทางฝั่งโหนดที่มีการควบคุม ผนึกขอบเขตระหว่างเกสต์และโหนด ในขณะที่ยังคงรักษาอิสระในการเคลื่อนไหวของเอเจนต์ไว้ เกตเวย์เครือข่ายส่วนกลางทำหน้าที่ไกล่เกลี่ยการออกนอกเครือข่ายและการฉีดข้อมูลรับรองโดยไม่เปิดเผยความลับให้กับเกสต์เลย

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

ปัจจุบัน SPACE ขับเคลื่อนเซสชัน Perplexity Computer หลายล้านเซสชันแล้ว เราตั้งใจให้ SPACE ทำหน้าที่เป็นเลเยอร์แบบ 통합 สำหรับการจัดเตรียมและการควบคุมแซนด์บ็อกซ์ในทุกการตั้งค่า ตั้งแต่วันที่ Linux microVMs ไปจนถึง Windows guests ไปจนถึงเครื่องภายในของผู้ใช้เอง เรากำลังทำงานอย่างหนักในการผลักดัน SPACE เข้าสู่การตั้งค่าใหม่เหล่านี้ เพื่อให้นักพัฒนาสามารถส่งมอบผลิตภัณฑ์ AI ที่ทำงานได้ทุกที่ที่ผู้ใช้ทำงาน

หากคุณกระตือรือร้นที่จะร่วมกำหนดเลเยอร์การประมวลผลที่ขับเคลื่อนเอเจนต์ระดับแนวหน้าของวันพรุ่งนี้ เราขอเชิญคุณ เข้าร่วมทีมของเรา