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

คอขวดและอุปสรรคในการพัฒนา Dapps บน Ethereum คืออะไร

区块链大本营
特邀专栏作者
บทความนี้มีประมาณ 3710 คำ การอ่านทั้งหมดใช้เวลาประมาณ 6 นาที
ปัญหาที่หลีกเลี่ยงไม่ได้ในการพัฒนา Dapp บน Ethereum คืออะไร?
สรุปโดย AI
ปัญหาที่หลีกเลี่ยงไม่ได้ในการพัฒนา Dapp บน Ethereum คืออะไร?

หมายเหตุบรรณาธิการ: บทความนี้มาจากค่ายบล็อคเชน (ID: blockchain_camp)หมายเหตุบรรณาธิการ: บทความนี้มาจาก

ค่ายบล็อคเชน (ID: blockchain_camp)

ค่ายบล็อคเชน (ID: blockchain_camp)

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

สิ่งที่ผู้บริโภคต้องการคือประสบการณ์การใช้งานที่ราบรื่นและเป็นผู้ใหญ่ และการบรรลุเป้าหมายนี้ก็เป็นอีกหนึ่งความท้าทายที่สำคัญสำหรับนักพัฒนา Ethereum Dapp

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

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

  • สถาปัตยกรรม Ethereum Dapp แบบคลาสสิก

  • โดยทั่วไปแล้ว Dapp บน Ethereum ประกอบด้วยสามส่วนหลัก:

โค้ดส่วนหน้าเขียนด้วยภาษาจาวา

แบ็กเอนด์ - โดยทั่วไปจะเป็นโหนด Ethereum blockchain มาตรฐาน การสื่อสารระหว่างส่วนหน้าและส่วนหลังโดยทั่วไปจะใช้ JSON-RPC หรือ GraphQL API ที่โหนดให้มา

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

โหนดแบ็กเอนด์ที่สร้างขึ้นเอง

ในยุคแรก ๆ ของ Ethereum นักพัฒนาต้องใช้งานโหนด Ethereum ของตนเอง หลังจากปล่อย Dapp แล้ว พวกเขาจะต้องดำเนินการโหนดระดับการผลิต (หรือคลัสเตอร์ของโหนด) ด้วย การใช้งานโหนดบล็อกเชนนั้นเป็นภาระงานหนักและยังเป็นภาระต่อประสิทธิภาพของนักพัฒนาอีกด้วย

โหนดเป็นผู้ให้บริการ (NaaS)

ความท้าทายดังกล่าวได้นำไปสู่การเพิ่มขึ้นของแพลตฟอร์ม "node-as-a-service" จากบริษัทต่างๆ เช่น Infura และบริษัทที่ค่อนข้างใหม่กว่า เช่น Nodesmith, Quiknode, Blockdaemon, Ethernode, Chainstack, Alchemy, CloudFlare และอื่นๆ

แพลตฟอร์มเหล่านี้ช่วยให้นักพัฒนามีโหนด Ethereum บนคลาวด์ ซึ่งช่วยนักพัฒนาไม่ต้องพยายามโหนดปฏิบัติการ โซลูชันสำหรับการพัฒนาและการผลิต แพลตฟอร์มเหล่านี้ลดภาระการจัดการระบบ เช่น แพตช์และการอัปเดตสำหรับระบบปฏิบัติการพื้นฐานและซอฟต์แวร์โหนดให้กับนักพัฒนา

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

ข้อ จำกัด โดยธรรมชาติของโหนด Ethereum

แม้ว่าบริการโหนดจะสามารถแทนที่นักพัฒนาในฐานะผู้ดูแลระบบได้สำเร็จ แต่ก็ไม่สามารถช่วยให้นักพัฒนาได้รับประสบการณ์ผู้ใช้ที่ดีขึ้นเพื่อสร้าง Dapp ที่ดีขึ้นได้ เนื่องจากสถาปัตยกรรมจากบริการโหนดและ JSON-RPC และข้อจำกัดโดยธรรมชาติของอินเทอร์เฟซ GraphQL

ข้อ จำกัด ที่สำคัญ ได้แก่ :

1. ข้อมูลสถานะที่สังเกตไม่สอดคล้องกัน

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

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

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

เมื่อส่วนหน้าสร้างคำขอมากกว่าโหนดส่วนหลังเดียวที่สามารถจัดการได้

เมื่อปัญหาเครือข่ายทำให้ส่วนหน้าตัดการเชื่อมต่อจากส่วนหลังและต้องเชื่อมต่อใหม่

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

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

  • 2. การค้นหาข้อมูลบนบล็อกเชนทำได้ช้าและจำกัด

  • Dapps มีข้อจำกัดในความสามารถในการค้นหาธุรกรรมหรือประวัติบนเครือข่าย เนื่องจากโหนด Ethereum มาตรฐานไม่เหมาะที่จะสนับสนุนการค้นหาที่แม่นยำหรือทำการกรองข้อมูลตามเวลาจริง ในการทำเช่นนี้อย่างมีประสิทธิภาพ เราจำเป็นต้องจัดทำดัชนีบล็อกและธุรกรรมหลายล้านรายการ แต่:

  • โหนด Ethereum จัดทำดัชนีเฉพาะบางฟิลด์ในบันทึกที่ส่งโดยการทำธุรกรรม (ฟิลด์ที่จะทำดัชนีจะต้องทำเครื่องหมายโดยผู้พัฒนาเมื่อปรับใช้สัญญา)

  • โหนด Ethereum ไม่จัดทำดัชนีข้อมูลสำหรับการทำธุรกรรมภายใน (ซึ่งเกิดขึ้นเมื่อสัญญาอัจฉริยะเรียกวิธีการของสัญญาอื่น)

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

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

ไวยากรณ์การค้นหาที่มีอยู่จำกัดมาก - สนับสนุนเฉพาะการเลือกพื้นฐานและการแทนที่อย่างง่ายเท่านั้น

การดึงผลการค้นหาทำได้ช้า การค้นหาในบล็อกขนาดใหญ่อาจใช้เวลาหลายชั่วโมง

JSON-RPC เป็นการสิ้นเปลืองแบนด์วิธอย่างมาก - ส่งคืนข้อมูลมากกว่าที่คุณต้องการจริงๆ อินเทอร์เฟซ GraphQL ใช้แบนด์วิดท์น้อยกว่า แต่ไม่มีความสามารถในการสตรีม (ส่วนหน้าต้องทำแบบสำรวจความคิดเห็นสำหรับการอัปเดต)

3. ขาดปรมาณู

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

4. โหนดเป็นแบบพาสซีฟ

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

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

ทบทวนโครงสร้างพื้นฐานของ Dapp

สิ่งที่ dfuse มีให้คือแพลตฟอร์มสำหรับ blockchain APIs ระดับสูงที่ทำให้พวกเขาทำงานได้ง่ายขึ้นกว่า API ดั้งเดิมที่จัดทำโดยโหนด blockchain ได้รับการออกแบบบนพื้นฐานของการมอบฟังก์ชันที่จำเป็นสำหรับนักพัฒนา Dapp ในการสร้างแอปพลิเคชันบล็อกเชนที่ทันสมัยผ่านอินเทอร์เฟซที่รวดเร็วและราบรื่น จึงมอบประสบการณ์ผู้ใช้ที่ยอดเยี่ยม

หวังว่าผ่านแพลตฟอร์ม ข้อจำกัดทั้งหมดที่กล่าวถึงข้างต้นสามารถแก้ไขได้ และข้อจำกัดของโหนด Ethereum แบบดั้งเดิมสามารถถูกทำลายได้

1. มุมมองที่สอดคล้องกัน

dfuse เป็นแพลตฟอร์มข้อมูลแบบไฮเปอร์สเกลแบบบูรณาการ ไม่ใช่ชุดของโหนด Ethereum หลายโหนดบนโหลดบาลานเซอร์ แพลตฟอร์ม dfuse ให้ข้อมูลสถานะลูกโซ่ในการเชื่อมต่อทั้งหมดและทุกจุดในเวลา ไม่ว่าจะเห็นบล็อก (ตรวจพบทั้ง chain fork และการจัดโครงสร้างใหม่) หรือไม่รายงานบล็อกเลย (ในกรณีของบล็อกที่อยู่ระหว่างการปรับโครงสร้างใหม่อย่างรวดเร็วและไม่ได้เดินทางไกล)

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

  • 2. การค้นหาแบบละเอียดด้วยความเร็วสูง

  • ช่วยให้นักพัฒนา Dapp สามารถค้นหาบันทึกประวัติของบล็อกเชนด้วยความละเอียดที่ละเอียดมาก ความเร็ว และประสิทธิภาพที่ไม่ธรรมดา นอกจากนี้ ยังสามารถใช้การกรองตามเวลาจริงและการอ่านแบบสตรีมผ่านอินเทอร์เฟซ GraphQL, gRPC และ Websocket

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

  • การจัดทำดัชนีธุรกรรมภายในทั้งหมด (ผู้ส่ง ผู้รับ ค่า วิธีการ พารามิเตอร์อินพุต) อย่างครบถ้วน จึงติดตามการดำเนินการของสัญญาในโครงสร้างแบบต้นไม้ของการโทรทั้งหมดได้อย่างสมบูรณ์

  • การจัดทำดัชนีไม่มีค่าใช้จ่ายเพิ่มเติมสำหรับผู้ใช้ของคุณ - การจัดทำดัชนีของ dfuse เป็นคุณลักษณะแบบบูรณาการของแพลตฟอร์ม dfuse และไม่เพิ่มต้นทุนทรัพยากรของการดำเนินการตามสัญญา

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

  • ให้ภาษาคิวรีที่มีโครงสร้างคล้ายกับภาษาคิวรีของ Kibana หรือ GitHub พร้อมการดำเนินการบูลีนที่สมบูรณ์และความสามารถในการเจาะลึกโดยตรงไปยังธุรกรรมหรือคำสั่งเฉพาะที่คุณต้องการ

ให้ประสิทธิภาพที่ยอดเยี่ยม - ในเวลาน้อยกว่าหนึ่งวินาทีตามเกณฑ์การค้นหาที่ระบุ ค้นหาประวัติเชนทั้งหมดเพื่อค้นหาชุดของการจับคู่ที่ตรงทั้งหมด

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

ประสิทธิภาพนั้นสอดคล้องกันโดยไม่คำนึงถึงทราฟฟิกบนเครือข่าย Ethereum

3. ปฏิบัติการปรมาณู

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

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

  • เร็ว

  • 5. แพลตฟอร์มที่ทันสมัยที่สร้างขึ้นสำหรับ Dapps ที่ล้ำสมัย

  • dfuse มีชั้นโครงสร้างพื้นฐานที่ทันสมัยสำหรับ Dapp ของคุณ ได้แก่:

  • เร็ว

  • ปรับขนาดได้

  • ให้การเข้าถึงเหตุการณ์ blockchain แบบเรียลไทม์ที่มีความแม่นยำสูงและละเอียด

รองรับการโทรกลับในรูปแบบของ Webhooks

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