กระบวนทัศน์: เครื่องมือทดสอบโหลดโดยละเอียด Flood
ผู้เขียนต้นฉบับ: "Introducing flood: a load testing tool for benchmarking EVM nodes》
แนะนำ
การรวบรวมข้อความต้นฉบับ: Deep Tide TechFlow
แนะนำ
การทดสอบโหลดเป็นขั้นตอนสำคัญในการสร้างและพัฒนาระบบข้อมูลที่มีความยืดหยุ่นสูงและประสิทธิภาพที่ยอดเยี่ยม อย่างไรก็ตาม การทดสอบโหลดไม่ได้ใช้กันอย่างแพร่หลายในการพัฒนาโครงสร้างพื้นฐานของสกุลเงินดิจิทัล เรารู้สึกตื่นเต้นที่จะแนะนำ Flood ซึ่งเป็นเครื่องมือการเปรียบเทียบสำหรับการวิเคราะห์ประสิทธิภาพปลายทาง RPC เพื่อเติมเต็มช่องว่างนี้
ในขั้นต้น เราใช้ Flood เป็นเครื่องมือในการเพิ่มประสิทธิภาพ Reth และทำความเข้าใจกับเวลาในการตอบสนองและการแลกเปลี่ยนปริมาณงานภายใต้การโหลดที่แตกต่างกัน ต่อมา เราค้นพบว่า Flood มียูทิลิตี้ที่สำคัญในการเพิ่มประสิทธิภาพของโครงสร้างพื้นฐานสกุลเงินดิจิทัลหลายประเภทนอกเหนือจาก Reth
ลองมาดูกัน
การทดสอบโหลดคืออะไรและเหตุใดจึงสำคัญ
การทดสอบโหลดหมายถึงการวัดการเปลี่ยนแปลงคุณลักษณะด้านประสิทธิภาพของระบบเนื่องจากขึ้นอยู่กับปริมาณงานที่แตกต่างกัน ข้อมูลเชิงลึกที่สำคัญเบื้องหลังแนวทางนี้คือเมตริกประสิทธิภาพ เช่น ทรูพุต เวลาแฝง และอัตราข้อผิดพลาดโดยทั่วไปจะลดลงเมื่อระบบมีโหลดเพิ่มขึ้น ดังนั้น การสังเกตลักษณะการทำงานของระบบภายใต้โหลดการควบคุมที่แตกต่างกันสามารถเปิดเผยข้อมูล เช่น คอขวดของระบบ โหมดความล้มเหลว และความสามารถด้านประสิทธิภาพขั้นสูงสุด
ข้อมูลที่ได้รับจากการทดสอบโหลดสามารถนำไปใช้ได้หลายวิธี ในขณะที่ระบบกำลังพัฒนา การทดสอบโหลดสามารถเน้นว่าคอขวดของระบบใดจำเป็นต้องได้รับการปรับปรุงให้ดีขึ้น เมื่อเปรียบเทียบสองระบบ การทดสอบโหลดสามารถบอกได้ว่าระบบใดมีประสิทธิภาพหรือเชื่อถือได้มากกว่ากัน ในกรณีพิเศษนี้ การทดสอบโหลดสามารถเปรียบเทียบการกำหนดค่าฮาร์ดแวร์หรือซอฟต์แวร์ที่แตกต่างกันสองแบบของระบบเดียว ในแต่ละกรณี การทดสอบโหลดจะช่วยให้การพัฒนาระบบมีประสิทธิภาพสูงสุด
จะโหลดทดสอบโหนด blockchain ได้อย่างไร?
เรามุ่งเน้นที่ RPC ซึ่งเป็นโปรโตคอลการสื่อสารที่ใช้กันทั่วไปในการดึงข้อมูลจากโหนดบล็อกเชน
ปัจจุบัน วิธีทั่วไปในการวัดประสิทธิภาพ RPC ไม่ใช่การทดสอบโหลด แต่เป็นการทดสอบเวลาแฝง: คุณส่งคำขอไปยังโหนด RPC และวัดว่าใช้เวลานานเท่าใดจึงจะได้รับการตอบกลับ การทดสอบเวลาแฝงสำหรับผู้ให้บริการ RPC ต่างๆ สามารถพบได้บนเว็บไซต์ต่างๆ น่าเสียดายที่การทดสอบประเภทนี้ให้มุมมองที่จำกัดเกี่ยวกับประสิทธิภาพของโหนด เนื่องจากการทดสอบนี้แสดงให้เห็นเพียงเล็กน้อยเกี่ยวกับลักษณะการทำงานของระบบภายใต้ภาระงาน
ในบล็อกเชน ปริมาณงานอาจแตกต่างกันไปในสองวิธีที่สำคัญ ตัวแปรคลาสสิกคือขนาด โหลด 10,000 คำขอต่อวินาทีเน้นระบบมากกว่าโหลด 100 คำขอต่อวินาที ตัวแปรโหลดอื่นคือวิธี RPC มีวิธี RPC ที่แตกต่างกันสำหรับข้อมูลแต่ละประเภทที่ดึงมาจากโหนดบล็อกเชน ตัวอย่างเช่น บล็อก vs ธุรกรรม vs บันทึก vs ติดตาม แต่ละวิธีของ RPC จะวางโหลดประเภทต่างๆ กันบนระบบ เมธอด RPC บางเมธอดถูกผูกไว้กับหน่วยความจำ IO ในขณะที่เมธอดอื่นๆ ถูกผูกไว้กับ CPU
น้ำท่วมคืออะไร?
เราพัฒนาเครื่องมือทดสอบโหลดที่เรียกว่า Flood ตามหลักการเหล่านี้ ซึ่งแตกต่างจากการทดสอบเวลาแฝง Flood ให้มุมมองที่ไม่เคยมีมาก่อนเกี่ยวกับลักษณะการทำงานของจุดสิ้นสุด RPC ผ่านการทดสอบโหลดและขยายขอบเขตการทดสอบไปยังวิธีการ RPC ที่เกี่ยวข้องทั้งหมด
น้ำท่วมประกอบด้วยสามองค์ประกอบพื้นฐาน:
Call Generation Engine: Flood สร้างการเรียก RPC แบบกำหนดพารามิเตอร์ชุดใหญ่พร้อมการกระจายการสุ่มตัวอย่างที่คล้ายกับปริมาณงานบล็อกเชนประเภทต่างๆ Flood ใช้ชุดข้อมูล Paradigm Data Portal เพื่อให้แน่ใจว่าครอบคลุมประวัติ blockchain อย่างสมบูรณ์
เครื่องมือทดสอบโหลด: จากนั้น Flood จะประสาน Vegeta (เครื่องมือทดสอบโหลดประสิทธิภาพสูงที่เขียนด้วย Go) เพื่อใช้การเรียกเหล่านี้เพื่อโหลดจุดสิ้นสุด RPC ทดสอบ
Reporting Engine: หลังจากที่ Flood ดำเนินการทดสอบ มันจะสรุปผลลัพธ์โดยใช้แผนภูมิ ตาราง และรายงานต่างๆ ข้อมูลสรุปเหล่านี้รวมเข้ากับสคริปต์และข้อมูลได้ง่าย
แต่ละส่วนประกอบสามารถกำหนดค่าได้สูง ทำให้ Flood ครอบคลุมสถานการณ์การทดสอบและสภาพแวดล้อมที่หลากหลาย
น้ำท่วมทำอะไรได้บ้าง?
ระหว่างการทำงานปกติของ Flood ผู้ใช้ระบุเมธอด RPC ที่จะทดสอบและรายการของ RPC endpoints ตัวอย่างเช่น คุณอาจต้องการทดสอบประสิทธิภาพของ eth_getLogs ของ Reth สองเวอร์ชัน Flood จะเรียกใช้โหลดการควบคุมที่แตกต่างกันเพื่อทดสอบจุดสิ้นสุด RPC เหล่านี้ ตัวอย่างเช่น อาจรัน eth_getLogs ที่ 1,000, 2,000, 4,000 และ 8,000 คำขอต่อวินาที จากนั้น Flood จะแสดงตารางและกราฟโดยสรุปว่าเมตริกประสิทธิภาพแตกต่างกันไปตามโหลดอย่างไร ผลลัพธ์มีลักษณะดังนี้:
วิธีเฉพาะในการที่เมตริกประสิทธิภาพลดลงภายใต้โหลดให้ข้อมูลเชิงลึกที่สามารถเปิดเผยคอขวดของระบบและความสามารถด้านประสิทธิภาพขั้นสูงสุด
นอกเหนือจากนั้น Flood ยังเสนอคุณสมบัติขั้นสูงเพื่อให้เหมาะกับผู้ใช้ระดับสูงทุกประเภท:
Flood สามารถใช้แผนการทดสอบโหลดที่แตกต่างกัน รวมถึง: "การทดสอบความเครียด" (ค่อยๆ เพิ่มโหลดเมื่อเวลาผ่านไป) "การทดสอบแบบพุ่งสูง" (การโหลดขนาดใหญ่อย่างฉับพลันตามด้วยโหลดขนาดเล็ก) และ "การทดสอบการแช่" (การโหลดที่ใช้เวลานาน)
Flood สามารถจัดการการทดสอบโหลดให้รันในโหมดเนทีฟบนโหนด RPC แต่ละโหนดเพื่อกำจัดสัญญาณรบกวนที่เกิดจากคอขวดของเครือข่าย
Flood มีโหมดทดสอบ "ความเท่าเทียมกัน" ที่ตรวจสอบว่าปลายทาง RPC แต่ละจุดส่งคืนการตอบสนองเดียวกัน
ทำไมต้องสร้างน้ำท่วม?
ที่ Paradigm เรากำลังพัฒนาการปรับใช้โหนดใหม่ที่เรียกว่า Reth และประสิทธิภาพเป็นหนึ่งในเป้าหมายหลัก เราพัฒนา Flood เพื่อให้รายละเอียดลักษณะการทำงานของ Reth เราใช้ Flood เพื่อเปิดเผยปัญหาคอขวดของประสิทธิภาพ Reth จำนวนมากภายใต้ภาระงานและการกำหนดค่าระบบต่างๆ จากนั้น แก้ไขปัญหาคอขวดเหล่านั้น ด้วย Flood เราได้สร้างวงจรป้อนกลับที่รัดกุมซึ่งช่วยให้นักพัฒนา Reth สามารถมองเห็นได้อย่างชัดเจนว่าการเปลี่ยนแปลงของโค้ดเบสใดๆ ส่งผลต่อประสิทธิภาพของระบบตั้งแต่ต้นทางถึงปลายทางอย่างไร
นอกจาก Reth แล้ว เราคิดว่า Flood จะสามารถช่วยแก้ปัญหาคำถามที่ยังไม่มีคำตอบที่เกี่ยวข้องกับโหนด RPC ได้:
ข้อมูลจำเพาะของฮาร์ดแวร์ใดที่สำคัญที่สุดเมื่อรันโหนด IO ที่เก็บข้อมูลมีความสำคัญเพียงใดเมื่อเทียบกับความเร็วของ RAM ความจุของ RAM และความเร็วของ CPU RAID คุ้มค่าหรือไม่
ขีดจำกัดอัตราที่มีผลบังคับใช้ต่อวิธี RPC ต่อผู้ให้บริการ RPC บุคคลที่สามคืออะไร
สรุปแล้ว
สรุปแล้ว
ในบทความนี้ เราจะแนะนำ Flood ซึ่งเป็นเครื่องมือทดสอบโหลดที่ให้มุมมองที่ไม่เคยมีมาก่อนเกี่ยวกับลักษณะการทำงานของโหนดบล็อกเชน แม้ว่าเดิมที Flood ถูกสร้างขึ้นเพื่อเพิ่มประสิทธิภาพการพัฒนา Reth แต่เราเชื่อว่ามันจะกลายเป็นเครื่องมือสำคัญสำหรับการพัฒนาโครงสร้างพื้นฐานสกุลเงินดิจิทัลที่มีประสิทธิภาพสูงประเภทอื่นๆ เราหวังว่าจะได้เห็นวิธีที่ผู้อื่นใช้ Flood เพื่อสร้างระบบที่มีประสิทธิภาพสูงและเชื่อถือได้ของตนเอง


