เลเยอร์ P2P ใหม่ของ Internet Computer เปิดตัว QUIC สำหรับการทำ State Sync

ข้อมูลเบื้องต้น

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

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

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

ในขณะที่โพสต์บนบล็อกนี้ NNS (DAO ที่ควบคุม Internet Computer) ได้เริ่มต้นด้วยการเปิดตัวเลเยอร์ P2P ใหม่สำหรับการซิงค์สถานะ เพื่อตอบสนองต่อข้อเสนอของชุมชนที่นำข้อเสนอของชุมชนมาใช้เวอร์ชันจำลอง cabe2ae3 สำหรับเครือข่ายย่อยกว่าแปดเครือข่าย ซึ่งหมายความว่าการขนส่ง QUIC ใหม่นั้นเปิดใช้งานบนซับเน็ตของ Internet Computer ทั้งหมดแล้ว อย่างไรก็ตาม การซิงค์สถานะจะใช้เลเยอร์ P2P ใหม่เฉพาะในซับเน็ตชุดเล็ก ๆ ในตอนนี้

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

โปรโตคอลแบบ P2P ของ Internet Computer

เลเยอร์เพียร์ทูเพียร์ (P2P) ของ Internet Computer มีหน้าที่ในการส่งข้อความภายในเครือข่ายย่อยของโหนด แต่ละเครือข่ายย่อยทำงานเครือข่ายเพียร์ทูเพียร์แยกกัน และโหนดภายในเครือข่ายย่อยแต่ละเครือข่ายจะใช้เครือข่ายนี้เพื่อส่งข้อความถึงกัน

โดยด้านบนของเลเยอร์นี้ จะมีหลายองค์ประกอบที่ใช้เลเยอร์ P2P เพื่อแลกเปลี่ยนข้อความระหว่างกัน โดยระบบมีชื่อเสียงที่สุดคือโปรโตคอล Internet Computer ส่วนประกอบอื่น ๆ รวมถึงโปรโตคอล State Sync ที่ใช้เลเยอร์ P2P เพื่อแลกเปลี่ยนข้อความกับผู้อื่นบนเครือข่ายย่อยเดียวกัน

โปรโตอล State sync ของ Internet Computer

รูปที่ 1: โปรโตคอล State sync ของ Internet Computer

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

โปรโตคอล Sate Sync ทำงานดังนี้: โหนดใหม่จะสร้างจุดตรวจสอบทุก ๆ สองถึงสามร้อยรอบ (ปกติ 500 รอบ) สิ่งนี้เกี่ยวข้องกับการเขียน State ที่จำลองแบบลงดิสก์ การคำนวณแฮชของ State นี้ และ Consensus ที่พยายามเห็นด้วยกับ State นี้ โดยรวมแฮชไว้ในสิ่งที่เรียกว่า Catch-up Packages (CUP) ซึ่งแฮชจะถูกคำนวณในลักษณะที่ทำให้ไม่เหมือนกับสองสถานะที่แตกต่างกัน และจะมีแฮชเดียวกัน ซึ่งหมายความว่าการมีอยู่ของ CUP ที่ตกลงกันไว้สำหรับความสูงเฉพาะนั้นยังบอกเป็นนัยว่า (1) โหนดส่วนใหญ่เห็นด้วย บนสถานะที่ความสูงเฉพาะและ (2) โหนดส่วนใหญ่สามารถให้บริการในส่วนนี้ในฐานะของส่วนหนึ่งของ State Sync ได้

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

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

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

การใช้ QUIC เพื่อทำให้ P2P ง่ายขึ้นสำหรับ State Sync

รูปที่ 2: การออกแบบเลเยอร์ P2P ใหม่สำหรับ State Sync

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

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

เลเยอร์ P2P ใหม่สำหรับ State Sync ที่แสดงในรูปที่ 2 จะไม่เปลี่ยนโปรโตคอล State Sync แต่จะเปลี่ยนเฉพาะเลเยอร์เครือข่ายด้านล่างเท่านั้น และใช้ส่วนประกอบการโอนใหม่ ซึ่งองค์ประกอบการขนส่งเป็นองค์ประกอบที่ใช้โดย P2P เพื่อสร้างและรักษาการเชื่อมต่อระหว่างเพียร์ สำหรับเลเยอร์ P2P ใหม่สำหรับ State Sync เราได้สร้างส่วนประกอบการขนส่งใหม่ที่รองรับฟังก์ชัน async API สองฟังก์ชัน:

  • push(message, peer_id)
  • rpc(message, peer_id) -> response

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

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

รูปที่ 3: การมัลติเพล็กซ์ผ่านการเชื่อมต่อ QUIC

ประโยชน์ของการเปลี่ยนมาใช้ QUIC

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

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

การใช้วิธีการโอนรูปแบบใหม่สำหรับไคลเอ็นต์อื่น

ตามที่กล่าวไว้ข้างต้น  เลเยอร์ P2P ที่ไคลเอ็นต์อื่นใช้กำลังดำเนินการปรับปรุง โดยแผนของเราคือการทำให้ใช้ส่วนประกอบการขนส่งใหม่ ดังนั้น ในที่สุดจะมีข้อความจากไคลเอ็นต์ทั้งหมดแบบมัลติเพล็กซ์บนการเชื่อมต่อ QUIC เดียวกัน ซึ่งจะทำให้การขนส่ง TCP ล้าสมัย การใช้ QUIC สามารถช่วยจัดลำดับความสำคัญการรับส่งข้อมูลของลูกค้าที่แตกต่างกันแบบไดนามิกได้ ตัวอย่างเช่น State Sync อาจเป็นการดำเนินการที่ใช้แบนด์วิธมาก ซึ่งเราอาจต้องจัดลำดับความสำคัญเหนือไคลเอ็นต์อื่น ๆ เพื่อให้การดำเนินการเสร็จสิ้นโดยเร็วที่สุด อย่างไรก็ตาม หากหลายโหนดบนเครือข่ายย่อยเดียวกันมีการใช้ State Sync เราอาจต้องการตรวจสอบให้แน่ใจว่าโปรโตคอลฉันทามติ (Consensus Protocol) มีความสำคัญเหนือกว่า State Sync ไม่เช่นนั้นอาจไม่สามารถดำเนินการได้เร็วพอ

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

วิธีพัฒนาโปรโตคอล State Sync

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

อ่านข้อมูลเพิ่มเติมในโปรโตคอล Internet Computer Consensus ได้ที่ PODC 2022

Source: DFINITY

Share on facebook
Share on twitter
Share on linkedin

wissarut

ข่าวต่อไป