شاردینگ چیست؟ اگر جزو علاقهمندان شبکه بلاک چین اتریوم هستید، حتما نام Sharding را شنیدهاید. به گفته ویتالیک بوترین، شاردینگ بهترین روش برای افزایش مقیاسپذیری در شبکههای بلاکچین است. در این مقاله از صرافی سیمیا زیرمجموعه هلدینگ سیمیا همراه باشید تا، به صورت کامل این مفهوم را معرفی خواهیم کرد.
فهرست محتوا
چرا باید بدانیم که شاردینگ (Sharding) چیست؟
شاردینگ یکی از پارامترهای مهم در آیندهی شبکه اتریوم است. مفهومی که به واقع پیچیده بوده و بسیاری از افراد فعال در این حوزه نیز به خوبی با آن آشنا نیستند. Sharding به دنبال حل مسئله مقیاسپذیری در حوزه بلاکچین است. برای اینکه بدانیم شاردینگ چیست ابتدا باید یک گام به عقب برداشته و مفهوم مقیاس پذیری را درک کنیم.
بلاک چین چیست؟ همه چیز درباره فناوری بلاکچین به زبان ساده
مقیاسپذیری به زبان ساده به این معناست که کارایی و عملکرد یک سیستم با افزایش تعداد کاربرانی که از آن استفاده میکنند، چقدر تغییر خواهد کرد؟ فرض کنید در یک روز ۱۰۰ تراکنش به یک شبکه بلاکچین ارسال شود و هر تراکنش به طور میانگین در ۲ دقیقه پردازش، تایید و انجام شود.
حال اگر فردای آن روز، ۱۰۰ هزار تراکنش به همین شبکه ارسال شود، باز هم هر تراکنش به طور میانگین در ۲ دقیقه تایید خواهد شد؟ اگر بله، پس این شبکه مقیاسپذیر است؛ یعنی افزایش تعداد تراکنش در عملکرد این شبکه تاثیری ندارد. اما اگر جواب منفی است و زمان میانگین برای تایید تراکنشها افزایش یابد، پس این شبکه مقیاسپذیر نیست.
این یکی از مسائل مهم برای تمام شبکههای بلاک چین است. بسیاری از شبکهها برای رفع این مشکل، راهکارهایی را ارائه دادهاند که در ادامه با آن آشنا خواهیم شد.
چالش سهگانهی مقیاسپذیری
بهترین راه برای پاسخ به سوال شاردینگ چیست؟ آشنایی با “سهگانهی مقیاسپذیری” است؛ مقیاسپذیری، امنیت و غیرمتمرکز ماندن. هر شبکهی بلاکچین دوست دارد این سه ویژگی را به صورت همزمان داشته باشد. اما برای داشتن همزمان این سه ویژگی با مشکل مواجه میشود؛ به تصویر زیر توجه کنید:
تصویر بالا سه ویژگی مهم یک شبکه بلاک چین را نشان میدهد که تمام شبکهها تلاش میکنند تا این سه ویژگی را همزمان تامین کنند. اما مسئله اینجاست که یک شبکه همزمان نمیتواند هر سه ضلع این مثلث را در بلاک چین خود داشته باشد و حتما یکی از اضلاع را از دست خواهند داد.
- Scalability یا مقیاسپذیری: این ویژگی به شبکهها این امکان را میدهد تا تعداد تراکنش بیشتری را مدیریت کنند و سرعت انجام تراکنش در شبکه را افزایش دهند.
- Decentralization یا غیر متمرکزسازی : شبکه بدون وابستگی به نهادی متمرکز یا گروهی متمرکز از افراد، بتواند به کار خود ادامه دهد.
- امنیت: شبکه در مقابل تهدیدهای امنیتی و در برابر اقدامات خرابکارانه که امنیت شبکه را به چالش میکشد (مثل حمله ۵۱ درصدی) مقاوم باشد.
بر اساس این سه ویژگی مهم، شبکههایی که در حال حاضر فعالیت دارند را دستهبندی میکنیم:
- شبکههای بلاک چین سنتی یا نسل اول مثل بیت کوین، لایت کوین و شبکه فعلی اتریوم را میتوان دسته اول نامید. این شبکههای بلاک چین عمومی هستند و تمام افراد برای مشارکت در این شبکهها نیازی به مجوز نداشته و به راحتی میتوانند نود این شبکه باشند. پس رکن غیر متمرکز بودن و امنیت بالا را تامین کردهاند، اما این شبکههای مقیاسپذیر نیستند.
- دسته دوم شبکههایی هستند که با شعار افزایش تعداد تراکنش در هر ثانیه (TPS بالا) شبکههای دسته اول را به چالش کشیده و وارد این حوزه شدهاند. این شبکههای برای بالا بردن سرعت انجام تراکنش، تعداد نودها را کاهش دادهاند (عموما بین ۱۰ تا ۱۰۰ نود دارند). این نودهای انتخابی، اجماع در شبکه را فراهم میکنند. این شبکههای هم مقیاسپذیرند و هم امنیت دارند (با فرض اعتماد به نودهای انتخاب شده) اما دیگر یک شبکه غیر متمرکز نیستند. مثلا شبکه بایننس، تنها ۲۱ نود انتخابی دارد که توسط خود بایننس تعیین شدهاند. اما در مورد بیت کوین ما چنین انتخابی نداریم و همه میتوانند در شبکه به عنوان نود مشارکت کنند.
- دسته سوم، اکوسیستمهای چندزنجیرهای یا مالتی-چینها هستند. پولکادات نمونهی موفق این دسته سوم از شبکههای بلاکچین است. این شبکهها، غیرمتمرکز هستند و به دلیل ایجاد بستری برای ارتباط میان زنجیرهای، مقیاسپذیر نیز هستند؛ اما رکن مهم امنیت را قربانی کردهاند. امنیت در این دسته از شبکهها، با چالشهای جدی همراه است. مثلا شبکه پولکادات از ۱۰۰ پاراچین پشتیبانی خواهد کرد. برای حمله ۵۱ درصدی به این اکوسیستم، تنها کافی است ۰.۵ درصد از قدرت اجماع یکی از این پاراچینها در اختیار یک گروه خرابکار بیافتد، در نتیجه امنیت کل اکوسیستم به خطر خواهد افتاد. در نتیجه به جای در دست گرفتن کنترل ۵۱ درصد کل اکوسیستم، با هزینه بسیار کمتر میتوان به این شبکهها حمله کرد.
مسئله اصلی این است: چه راهکاری وجود دارد که یک شبکه بلاک چین هر سه رکن امنیت، مقیاسپذیری و غیرمتمرکز بودن را همزمان داشته باشد؟
شاردینگ تکنیکی است که هر سه ویژگی را تامین خواهد کرد.
اکنون که مسئله را شناختیم و راهحل مسئله را نیز دانستیم، زمان آن است که به این سوال پاسخ دهیم که ایده شاردینگ چیست؟
Sharding چیست؟
کلمه Shard به معنی جزء کوچکی از یک مجموعه بزرگتر است. Sharding به معنی تقسیم کردن یک مجموعه بزرگ به اجزای کوچکتر است. این روش برای بهبود عملکرد مراکز ذخیره دادهها یا DataBase از طریق تقسیم بندی دیتابیس است که به آن پارتیشن بندی افقی نیز میگویند.
به عبارتی، شاردینگ یک الگوی معماری مراکز داده است که به صورت افقی و در عرض، دیتابیس را به تکههای کوچکتر تقسیم بندی میکند. به هر بخش در این ساختار معماری، شارد گفته میشود. اطلاعات ذخیره شده در هر شارد، منحصر به همان شارد بوده و همینطور مستقل از دادههایی است که در سایر شاردها ذخیره میشود. در ادامه برای درک بهتر این موضوع مثالی میزنیم.
یک دانشگاه را در نظر بگیرید که از ابتدای تاسیس تا به امروز ۱ میلیون دانشجو در آن تحصیل کردهاند. کارنامهی تمام این دانشجویان در “یک دیتابیس” بزرگ نگهداری میشود. فرض کنید بخواهیم کارنامهی یک دانشجوی خاص را بیابیم. برای این کار باید تمام ۱ میلیون کارنامه را بررسی کنیم تا به کارنامه فرد مورد نظر خود برسیم.
اکنون بیاید دیتابیس این دانشگاه را با تکنیک شاردینگ، منظمتر کنیم. برای اینکار، بر اساس سال فارغالتحصیل شدن دانشجویان، کارنامههای آنها را مرتب کنیم. در واقع ما با این کار، دیتابیس دانشگاه را بر اساس سال فارغالتحصیلی دانشجویان به شاردهای کوچکتر تقسیم کردهایم.
این کار را میتوان بازهم ادامه داد؛ اینبار، براساس رشته تحصیلی دانشجویان، و حرف اول فامیلی دانشجویان، شاردها را بازهم دقیقتر خواهیم کرد. در چنین ساختاری یافتن کارنامه یک دانشجوی خاص بسیار راحتتر از قبل است.
مزایای استفاده از شاردینگ چیست؟
با استفاده از شاردینگ، دیتابیس به اجزای کوچکتری تقسیم میشود. در نتیجه مدیریت دادهها آسانتر خواهد شد. زمانی که یک دیتابیس به شاردهای کوچکتر تقسیم میشود، سرعت پردازش و تراکنش در این شاردهای کوچک، سریعتر خواهد بود. این مورد به بهبود عملکرد کلی سیستم کمک زیادی میکند.
مزیت دیگر شاردینگ، کاهش هزینهها است. سیستمی که از ساختار شاردینگ استفاده میکند، در مقایسه با سیستمهای دارای پایگاه داده یکتا، به مراتب ارزانتر است.
معایب شاردینگ Sharding چیست؟
هرچند تکنیک شاردینگ بسیاری از مشکلات ما را حل کرده اما هیچ سیستمی بدون ایراد نیست. یکی از مشکلات شاردینگ، نحوه پیادهسازی آن از منظر تکنیکال و فنی است. هرچند ما در این مقاله به سادگی آن را توضیح میدهیم، اما اجرای چنین سیستمی، پیچیدگیهای فراوانی دارد. در صورتی که این تکنیک به درستی اجرا نشود، ممکن است کل دادهها را از دست بدهیم.
یکی دیگر از مشکلات، ایجاد تعادل میان اندازهی دادههای ذخیره شده در هر شارد است. مثلا فرض کنید که ما قصد داریم، اسامی ۱ میلیون دانشجوی مثال قبل را صرفا بر اساس حروف الفبا تقسیم بندی کنیم. مثلا از حرف الف تا ط در شارد اول و از حرف ظ تا ی را در شارد دوم قرار دهیم.
ممکن است تعداد افراد ذخیره شده در شارد اول بسیار بیشتر از شارد دوم باشد. لذا بار تحمیلی به شارد یک بسیار بالاتر از شارد دو است. مسئله اصلی اینجاست که باید نحوه توزیع دادهها میان شاردهای مختلف را به گونهای انجام دهیم که متعادلترین حالت، برای کل سیستم رعایت شود. این مدیریت دادهها، زمانی که تعداد تراکنشها بسیار بالاست، واقعا کار دشواری است.
مشکل بعدی، مشکلات سخت افزاری است. ماشینهای پردازش دیتا که با ساختار شاردینگ منطبق باشند متفاوت از سایر پردازشگرها هستند. اینطور نیست که ما بتوانیم با استفاده از سختافزارهای فعلی، دیتابیس شارد شده را مدیریت کنیم. این مورد نیز مسئله ساز خواهد بود.
در بخش مزایا و معایب ما مدعی نیستیم که تمام موارد را اشاره کردهایم، حتما موارد دیگری نیز وجود دارد که ما در این مقاله به دنبال آن نیستیم. در بخش بعد به سراغ استفاده از تکنیک شاردینگ در دنیای بلاک چین میرویم.
کاربرد Sharding در بلاک چین چیست؟
بلاک چین بستری برای ذخیره سازی اطلاعات است. در نتیجه شاردینگ در بلاکچین نیز فرآیند مشابه آنچه در بالا گفتیم دارد. یک شبکه بلاک چین به الگوریتم اجماع گواه اثبات سهام را در نظر بگیرید.
این شبکه فرضا ۱۰,۰۰۰ نود دارد. این نودها وظیفه ایجاد بلاکهای جدید در این شبکه بلاک چین را دارند. مثلا این نودها باید ۱۰۰ بلاک را تولید و تایید کنند. در ساختار فعلی شبکههای بلاکچین، این ۱۰۰ بلاک باید به ترتیب و پشت سر هم تولید شوند. تا زمانی که بلاک شماره یک تولید نشود، ما نمیتوانیم بلاک شماره دو را ایجاد کنیم.
اکنون تکنیک شاردینگ را در این شبکه استفاده میکنیم. لذا با تقسیم کار، تایید و ایجاد این بلاکها را توزیع میکنیم. ما این ۱۰,۰۰۰ نود را به صورت تصادفی به دستههای ۱۰۰ تایی تقسیم میکنیم. و وظیفه تایید و ایجاد بلاک شماره یک را به این دسته محول میکنیم.
به دسته ۱۰۰ تایی دوم، وظیفه ایجاد بلاک دوم را میدهیم و این روند را به همین ترتیب ادامه میدهیم. در این ساختار به هریک از این دستههای ۱۰۰ تایی (عدد ۱۰۰ نود به عنوان مثال ذکر شده)، کمیته یا Committee میگوییم. که هر کمیته وظیفه تایید بلاکها را به صورت مستقل بر عهده دارد. در این مثال، ما ۱۰۰ کمیته داریم که در هر یک از آن ۱۰۰ نود حضور دارند. تصویر زیر همین ساختار را نمایش میدهد.
زمانی که یک نود در یک کمیته، بلاک جدیدی را ایجاد کرد، به جای انتشار آن بلاک، امضایی را در شبکه منتشر میکند که نشان میدهد او موفق شده یک بلاک جدید را ایجاد کند. اکنون کل شبکه، به جای آنکه صحت ۱۰۰ بلاک جدید را بررسی کنند، ۱۰,۰۰۰ امضا را مورد بررسی قرار میدهند. بررسی صحت ۱۰,۰۰۰ امضا به مراتب آسانتر از بررسی صحت ۱۰۰ بلاک خواهد بود.
هدف نهایی در شاردینگ این است که تمام نودها، تمام تراکنشها را بررسی نکنند. این اتفاق، حجم کار نودها را به مراتب کاهش خواهد داد. بار تحمیل شده به شبکه میان نودهای آن توزیع شده و در نتیجه عملکرد کلی شبکه، بهبود مییابد.
شاردینگ در شبکه اتریوم
ساختار فعلی شبکه اتریوم، همانند شبکه بیت کوین، از الگوریتم اجماع گواه اثبات کار استفاده میکند. در چنین ساختاری، نودها برای مشارکت در شبکه بایستی دستگاه ماینر برای تولید هش ریت متناسب برای ایجاد بلوکهای جدید را فراهم کنند. اما در شبکه اتریوم ۲ این ساختار به گواه اثبات سهام تغییر خواهد کرد.
همانطور که در ابتدای مقاله اشاره شد، شاردینگ یکی از المانهای اساسی در آینده شبکه اتریوم، موسوم به اتریوم ۲، است. اتریوم از ۶۴ شارد مختلف استفاده خواهد کرد. در شبکه اتریوم شارد شده، تراکم شبکه کاهش یافته و سرعت پردازش تراکنشها در هر ثانیه افزایش خواهد یافت.
ویژگیهای شاردینگ اتریوم چیست؟
شاردینگ ایده بهتری برای مقیاسپذیری یک شبکهی بلاک چین در مقایسه با افزایش سایز دیتابیس کنونی است. در اتریوم شارد شده، هر کس میتوان به نود شبکه تبدیل شود. هزینه مورد نیاز برای راهاندازی نود در شبکه اتریوم شارد شده بسیار کمتر از شبکه اتریوم فعلی است.
برای راهاندازی نود در چنین شبکهای، نیازی به دستگاه قدرتمند از نظر قدرت پردازشی نیست و افراد با استفاده از لپ تاپ و حتی تلفن همراه خود نیز میتوانند به نود شبکه تبدیل شوند. اتفاقی که اکنون قابل تصور نیست. این ویژگی باعث غیرمتمرکزتر شدن شبکه و همچنین افزایش امنیت آن خواهد شد.
بیکن چین اتریوم
اتریوم به کمک زنجیره بیکن یا Beacon Chain به دنبال اجرای ایده شاردینگ در شبکه اتریوم ۲ است. مسئله اصلی در زمان استفاده از شاردینگ، تامین امنیت در شاردهای مختلف است. در یک شبکه شارد شده، نودهای شبکه در شارهای مختلف توزیع میشوند. زمانی که یک بازیگر خرابکار به دنبال آسیب به یک شارد است، چگونه امنیت کل شبکه آسیب نخواهد دید؟ اتریوم برای حل این مشکل راهکاری را ارائه داده است.
نودهای اختصاص یافته به هر شارد یا به هر کمیته، به صورت تصادفی انتخاب میشوند. در چنین حالتی، به صورت آماری در صورتی که یک بازیگر مخرب باید کنترل بیش از ۳۳ درصد کل شبکه را در اختیار بگیرد تا بتواند به یک شارد حمله کند. در شبکه اتریوم در هر ۱۲ ثانیه، ۶۴ بلاک از ۶۴ شارد و یک بلاک بیکن چین تولید خواهد شد.
بیکن چین نقش هماهنگکنندهی میان شاردها و قلب این اکوسیستم عمل میکند. در این بین اگر حتی یک بلاک از یک شارد محل اختلاف بوده و به شیوه نادرست استخراج شده باشد، به سرعت از شبکه خارج شده و وارد بیکن چین نخواهد شد. در واقع به دلیل حضور بیکن چین، هر ۶۴ بلوک ایجاد شده در کل شبکه، به عنوان چک پوینت تعریف شده تا به صورت مداوم اطلاعات و تراکنشهای هر شارد، در بیکن چین به اشتراک گذاشته شود.
مقایسه شاردینگ و سایر راهکارهای مقیاس پذیری
علاوه بر شاردینگ چندین راهکار مقیاس پذیری دیگر برای ارزهای دیجیتال نظیر بیت کوین و اتریوم معرفی شده است. این راهکارهای مقیاس پذیری شامل شبکه لایتنینگ و SegWit۲x هستند. شبکه لایتنینگ یک راهکار مقیاس پذیری خارج از زنجیره است که انجام تراکنشها خارج از زنجیره را امکان پذیر میسازد.
شبکه لایتنینگ با ایجاد کانالهای پرداختی این امر را محقق میکند. این کانالها به کاربران امکان میدهند تا بدون آنکه نیازی به تایید تراکنشها توسط نودهای شبکه اصلی را داشته باشند، تراکنشهایی را میان یکدیگر ارسال کنند. از بلاک چین در این روش فقط برای باز و بستن کانالهای پرداخت استفاده میشود.
شبکه لایتنینگ پتانسیل این را دارد که میلیاردها تراکنش در ثانیه پردازش کند. در صورت کامل شدن و پیاده سازی این شبکه، پیشرفت مثال زدنی در زمینه مقیاس پذیری ایجاد خواهد شد. اگر شبکه لایتنینگ طبق برنامه عمل کند، دیگر هیچکس درباره مقیاس پذیری شکایت نخواهد کرد.
شبکه رایدن نیز راهکار مقیاس پذیری دیگری است که تقریبا مشابه با شبکه لایتنینگ است. هرچند شبکه رایدن چندین ویژگی متفاوت دیگر نیز دارد. شبکه رایدن مشخصا برای اتریوم طراحی شده است برخلاف شبکه لایتنینگ علاوه بر تسهیل پرداختها، وظایف دیگری نیز انجام میدهد. شبکه رایدن قرار است که از قراردادهای هوشمند و برنامههای غیرمتمرکز پشتیبانی کند و انتقال توکن های ERC-۲۰ را امکان پذیر سازد. بنابراین شبکه رایدن بسیار شبیه شبکه لایتنینگ بوده اما پتانسیل بیشتری دارد؛ زیرا ویژگیهای بیشتری نسبت به شبکه لایتنینگ ارائه میدهد.
سگویت نیز برای بیت کوین معرفی شده است و حجم بلاکهای تراکنش را از یک مگابایت به دو مگابایت افزایش خواهد داد. اگرچه این راهکار میتواند تا حدودی به مقیاس پذیری بیت کوین کمک کند، اما پروپوزال سگویت به طور کل به هیجان انگیزی یا سودمند بودن شبکه لایتنینگ نبود. عرضه سگویت برای پاییز ۲۰۱۷ برنامه ریزی شده بود اما به دلیل عدم پشتیبانی از جانب جامعه بیت کوین نتوانست طبق برنامه پیش برود.
پرسش و پاسخ
- آیا بیت کوین هم میتواند از شاردینگ برای بهبود مقیاسپذیری خود استفاده کند؟
خیر؛ در شبکههای مبتنی بر الگوریتم گواه اثبات کار، از آنجا که تمام تراکنشها توسط تمام نودها بررسی میشود، نمیتوانیم شاردینگ را استفاده کنیم. شاردینگ تنها در روش گواه اثبات سهام قابل اجرا است.
- زمان اجرای شاردینگ در شبکه اتریوم مشخص است؟
به طور تقریبی در سال ۲۰۲۲ شبکه اتریوم، تکنیک شاردینگ را عملی خواهد کرد.
سخن پایانی
شاردینگ یکی از بهترین روشهای ارائه شده برای حل مسئله مقیاس پذیری شبکههای بلاک چین است. شبکه اتریوم در آپدیت اتریوم ۲ نیز از تکنیک Sharding استفاده خواهد کرد.
در این تکنیک، زنجیره بلوکی به زنجیرههای کوچکتر تقسیم خواهد شد که به هر یک از آنها شارد گفته میشود. در چنین ساختاری، تمام تراکنشهای ارسال شده به شبکه میان شاردهای مختلف تقسیم شده و به این شکل بار کل تحمیل شده به شبکه میان نودها توزیع میشود.