BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

ห้าคำถามเกี่ยวกับ Ethereum: ปัญหาความหลากหลายของลูกค้ามาจากไหน?

以太坊爱好者
特邀专栏作者
บทความนี้มีประมาณ 3055 คำ การอ่านทั้งหมดใช้เวลาประมาณ 5 นาที
เหตุใดจึงยากที่จะบรรลุความหลากหลายในไคลเอนต์เครือข่าย Ethereum
สรุปโดย AI
เหตุใดจึงยากที่จะบรรลุความหลากหลายในไคลเอนต์เครือข่าย Ethereum

หมายเหตุบรรณาธิการ: บทความนี้มาจากผู้ที่ชื่นชอบ Ethereum (ID: ethfans)หมายเหตุบรรณาธิการ: บทความนี้มาจาก

ผู้ที่ชื่นชอบ Ethereum (ID: ethfans)

ผู้ที่ชื่นชอบ Ethereum (ID: ethfans)

การประชุมผู้พัฒนาหลักครั้งที่ 90 ล่าสุดนั้นทุ่มเทให้กับปัญหาเดียวเกือบตลอดเวลา ฉันขอแนะนำให้ทุกคนฟังเซสชั่นนี้ด้วยตัวเอง

ในเซสชันนี้ Alexey ได้กล่าวถึงปัญหาที่นักพัฒนาไคลเอ็นต์โอเวอร์โหลด แม้ว่าฉันคิดว่าการสนทนานี้เป็นการเริ่มต้นที่สำคัญ แต่เราก็กระตือรือร้นที่จะหาทางออกเพื่อทำความเข้าใจปัญหาอย่างถ่องแท้ เป็นสิ่งสำคัญที่เราใช้เวลาสักครู่เพื่อวิเคราะห์ปัญหา ในการวิเคราะห์ความหมายแฝงของคำถาม "Five Whys" เป็นหนึ่งในวิธีที่ง่ายและมีประสิทธิภาพที่สุด

เพื่อไม่ให้เป็นการเสียเวลา เรามาดูกันว่าคำถามแรกคืออะไร

  • Geth: 75%

  • Parity & OpenEthereum: 20%

  • Nethermind: 1%

ชื่อเรื่องรอง

คำถามแรก: เหตุใดทีมพัฒนาของ Geth จึงกดดันมาก ถึงขั้นโอเวอร์โหลด

ด้วย etherscan เราสามารถดูสถิติของความจุที่ติดตั้งของไคลเอ็นต์แต่ละรายได้ดังนี้:

ส่วนที่เหลืออีก 4% ประกอบด้วยลูกค้าบางรายที่มีส่วนแบ่งตลาดน้อยกว่า 1% ดังนั้นจึงถูกละเว้น

ที่สำคัญ พลังการประมวลผลมากกว่า 51% มุ่งไปที่ไคลเอนต์ Geth สมมติว่าใน Berlin hard fork ที่กำลังจะมาถึง Geth มีข้อผิดพลาดในการดำเนินการหนึ่งใน EIPs (Ethereum Improvement Proposals) แม้ว่าจะไม่มีข้อบกพร่องในการใช้งานอื่น ๆ ของไคลเอนต์นี้ ตราบใดที่บล็อกพบข้อบกพร่องนี้ มันจะทำให้เครือข่าย Ethereum แยก ตามเหตุผลแล้ว การบล็อกนี้ไม่ถูกต้อง และไคลเอ็นต์อื่นๆ จะถือว่าบล็อกนี้เป็นการบล็อกที่ไม่ถูกต้อง อย่างไรก็ตาม มากกว่า 51% ของโหนดการขุดกำลังเรียกใช้ไคลเอนต์ Geth ดังนั้นเครือข่ายทั้งหมดจะถูกนำไปยังห่วงโซ่แยกที่ไม่ถูกต้อง

ดังนั้น คำตอบสำหรับคำถามแรกคือ:

เนื่องจากลูกค้าของเครือข่าย Ethereum ไม่มีความหลากหลายเพียงพอ

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

ชื่อเรื่องรอง

คำถามที่สอง: เหตุใดเครือข่าย Ethereum จึงขาดความหลากหลายของไคลเอนต์

เมื่อ Ethereum mainnet เปิดใช้งาน เรามีลูกค้าหลายราย สองคนหลักคือ Geth และ CPPEthereum จากนั้น Parity ก็มาถึงและ CPPEthereum ก็ถูกกำจัด

ตั้งแต่นั้นมา ไม่มีลูกค้ารายใดนอกจาก Parity ที่ได้รับส่วนแบ่งการตลาดที่สำคัญ เมื่อปีที่แล้ว Nethermind กลายเป็นดาวรุ่ง แต่ปัจจุบันถือหุ้นเพียง 1% ของตลาด เมื่อเร็ว ๆ นี้ ส่วนแบ่งการตลาดของ Parity ได้ลดลงอย่างมากเนื่องจากการขึ้น ๆ ลง ๆ และอนาคตที่มืดมนของ Parity เราเชื่อว่าตามหลักการแล้ว เครือข่าย Ethereum จำเป็นต้องมีไคลเอ็นต์ตั้งแต่ 3 เครื่องขึ้นไป และส่วนแบ่งไคลเอนต์ของไคลเอนต์แต่ละเครื่องไม่ควรสูงเกินไป และไม่มีไคลเอ็นต์ใดสามารถครอบครองส่วนแบ่งการตลาดได้มากกว่า 51% ในขณะที่การกระจายลูกค้าในอุดมคติควรบรรลุผลสำเร็จ แต่เราคุ้นเคยกับความเป็นเจ้าโลกของลูกค้า

เหตุใดเราจึงต้องการลูกค้าหลายราย

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

ฉันคิดว่าควรเน้นที่ความซับซ้อนแทน

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

ชื่อเรื่องรอง

ตอนนี้เราเข้าใกล้ต้นตอของปัญหามากขึ้น

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

เครื่องมือเครือข่ายบางอย่างระบุสถาปัตยกรรมที่ไม่ได้รับการปรับแต่งและกำหนดให้ไคลเอนต์ Ethereum เรียกใช้ฟังก์ชันที่ไม่จำเป็น นักพัฒนาไคลเอนต์จำเป็นต้องทำงานภายใต้ข้อจำกัดเหล่านี้

  • ชื่อเรื่องรอง

  • คำถามที่ 4: เหตุใดโปรโตคอลการเชื่อมต่อเครือข่ายจึงเพิ่มความยากในการติดตั้งไคลเอนต์

ฉันเชื่อว่าคำตอบสำหรับคำถามนี้สามารถแบ่งออกเป็นสองส่วนโดยทั่วไป

การจัดการของรัฐ

ข้อกำหนดการเชื่อมต่อเครือข่ายโดยรวม

  • เท่าที่เกี่ยวข้องกับการจัดการสถานะ ไคลเอนต์ Ethereum จะต้องสามารถซิงโครไนซ์สถานะทั้งหมดบนเครือข่ายและเก็บรักษาสำเนาในเครื่องของสถานะนั้น ทำยากทั้งคู่ สถานะการซิงโครไนซ์ต้องการคำขอนับล้านสำหรับไคลเอนต์และเซิร์ฟเวอร์ที่อ่านและประมวลผลคำขอสถานะ และสามารถทำให้ I/O ของดิสก์อิ่มตัวได้ สถานะที่ซิงโครไนซ์ใหม่จำเป็นต้องได้รับการบำรุงรักษาและตัดออกเพื่อให้ฐานข้อมูลสามารถดำเนินการบล็อกใหม่ได้เร็วพอ จากมุมมองทางวิศวกรรม นี่เป็นความท้าทายอย่างยิ่ง!

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

จัดการคำขอ GetNodeData เพื่อเข้าถึงสถานะที่สร้างโดยบล็อกล่าสุด

จัดการคำขอเพื่อเข้าถึงประวัติของข้อมูลบนเครือข่าย รวมถึงส่วนหัวของบล็อก เนื้อความของบล็อก และใบเสร็จรับเงิน

คำถามที่ 5: ทำไม...

สารละลาย

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

ชื่อเรื่องรอง

สารละลาย

ฉันติดตามคำถามนี้มาตลอดปีที่ผ่านมา ทำให้ฉันประหลาดใจว่าต้นตอของปัญหามากมายบน Ethereum สามารถสืบย้อนไปถึงเลเยอร์เครือข่ายได้

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

ในการแก้ไขปัญหานี้ เราจำเป็นต้องยกเครื่องส่วนต่าง ๆ ของเลเยอร์ฉันทามติของ Ethereum เช่นเดียวกับเลเยอร์เครือข่าย ปัจจุบันได้เริ่มงานซ่อมบำรุง มีการทำงานมากมายภายใต้ชื่อ "Stateless Ethereum" ที่ Alexey และฉันทำงานร่วมกันเป็นเวลา 8 เดือน อย่างน้อยงานบางอย่างที่เราทำก็ช่วยลดภาระของทีม Geth เนื่องจากพวกเขาใช้โปรโตคอลการซิงโครไนซ์ SNAP ที่พวกเขาพัฒนาขึ้นในช่วงหลายปีที่ผ่านมา ยังมีงานอีกส่วนหนึ่งที่ต้องดำเนินการโดยคนเก่งที่เข้าใจปัญหาอย่างลึกซึ้งและคิดหาทางออกที่เป็นไปได้

ในปัจจุบัน โปรโตคอล DevP2P ETH ขนาดใหญ่ดังกล่าวยังไม่ได้รับการแยกส่วนอย่างสมบูรณ์ เรามีความเข้าใจพื้นฐานเกี่ยวกับวิธีการแยกเครือข่ายนี้ออกเป็นสามเครือข่ายส่วนตัวที่แยกจากกัน แต่ยังไม่มีใครทำโดยตรง

开发者
ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
คลังบทความของผู้เขียน
以太坊爱好者
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android