فهرست مطالب
Toggle
پیش از ظهور شاردینگ، تصور بر این بود که هیچوقت نمیتوان سه ویژگی «تمرکززدایی»، «مقیاسپذیری» و «امنیت» را در یک پروژه بلاک چینی جمع کرد و همیشه باید یکی از آنها را قربانی سایرین کرد. این سه ویژگی در کنار یکدیگر مفهومی به نام سهگانه مقیاسپذیری را میسازند که اولین بار ویتالیک بوترین آن را مطرح کرد؛ این مفهوم میگوید اگر پروژهای میخواهد مقیاسپذیری بالایی داشته باشد، باید تمرکززدایی و در پی آن، امنیت را قربانی کند و اگر پروژهای قصد دارد به ویژگی تمرکززدایی پایبند بماند، باید از مقیاسپذیری بگذرد.
شاردینگ (Sharding) یکی از راهکارهای بالقوه مقیاسپذیری در بلاک چین است که برای افزایش سرعت و ظرفیت شبکه، بار محاسباتی و ذخیره داده را به قسمتهای کوچکتر تقسیم میکند. این راهکار بهرغم چالشهای مهمی که در پیادهسازی آن وجود دارد، توانایی فائقآمدن بر چالش «سهگانه مقیاسپذیری» را دارد
با تولد شاردینگ، گویی راهی پیش روی توسعهدهندگان بلاک چینی باز شد تا در عین حفظ امنیت و تمرکززدایی، مقیاسپذیری پروژههای خود را نیز افزایش دهند.
در این مطلب که بهکمک مقالهای از سایت بلاک ریسرچ گردآوری شده.
تاریخچه و مفهوم شاردینگ را بررسی میکنیم و نگاهی به کاربردهای این نوآوری در پروژههای بلاک چینی خواهیم داشت
شاردینگ چیست؟
به بیان ساده، شاردینگ یعنی تقسیم یک پردازش بزرگ به پردازشهای کوچکتر؛ فرض کنید قصد تکمیل یک جورچین ۱,۰۰۰ تکه را دارید. به جای آن که تمام ۱,۰۰۰ تکه را روی میز بریزید و شروع به چیدن آنها کنید، میتوانید آنها را بر اساس رنگ تکهها جدا کنید و سپس کار تکمیلش را انجام دهید. این دستهبندی باعث میشود بررسی تکههایی که برای بخش خاصی هستند، آسانتر و سریعتر باشد.
شاردینگ راهکاری است که بار پردازش را به قسمتهای کوچکتر تقسیم میکند و به این طریق، ظرفیت و سرعت شبکه را افزایش میدهد. شاردینگ بهعنوان راهکاری ارائه شده است که بهلحاظ تئوری میتواند با کمترین هزینه، به چالشهای مقیاسپذیری بلاک چین غلبه کند.
واژه شارد (Shard) بهمعنای تکه یا قطعه است و شاردینگ از لحاظ واژگانی به تکهتکه یا قطعهقطعه کردن یک چیز گفته میشود.
شاردینگ در ارزهای دیجیتال
با توجه به تعریف شاردینگ و برقراری ارتباط میان این تعریف و مشکلات مقیاسپذیری بلاک چین، احتمالاً متوجه شدهاید که این تکنیک تا چه حد میتواند در دنیای بلاک چین و ارزهای دیجیتال کاربردی باشد. بهطور کلی، در حوزه بلاک چین، شاردینگ بهمعنای تقسیمبندی یک مجموعه داده به چند قسمت و ذخیره آن در چندین پایگاه داده است.
شبکههای بلاک چینی در حقیقت پایگاههای دادهای هستند که هر نود (Node) یا گره در آنها بهعنوان سرور مجزایی در شبکه کار میکند. اگر شاردینگ را در بلاک چین اجرا کنیم، در واقع شبکه را به اجزای کوچکتری که «شارد» نام دارند تقسیم کردهایم. هر شارد مجموعه منحصربهفردی از قراردادهای هوشمند و موجودی حسابها را نگهداری خواهد کرد. بهطور کلی، در حوزه بلاک چین، شاردینگ بهمعنای تقسیمبندی یک مجموعه داده به چند قسمت و ذخیره آن در چندین پایگاه داده است
نودها در شاردهای مجزایی قرار میگیرند تا تراکنشها و عملیات خاصی را تأیید کنند.
بهعبارتی نودها در شاردینگ، دیگر مسئول تأیید اعتبار تمامی تراکنشهای شبکه نخواهند بود. برای توضیح بهتر شاردینگ میتوانیم از مثال بلاک چین اتریوم استفاده کنیم.
بلاک چین اتریوم از هزاران کامپیوتر تحت عنوان نودها تشکیل شده است. هر کدام از نودها میزان مشخصی قدرت هش در اختیار شبکه میگذارند تا ماشین مجازی اتریوم (EVM) از پس اجرای وظایف خود مانند اجرای قراردادهای هوشمند و برنامههای غیرمتمرکز برآید.
در حال حاضر اتریوم بر پایه اجرای ترتیبی یا خطی کار میکند که در آن، هر نود باید تمامی عملیات و تراکنشها را پردازش کند. به همین دلیل است که عبور تراکنشها از این فرایند زمان زیادی به طول میانجامد. در حال حاضر اتریوم میتواند حدود ۱۳ تراکنش را در ثانیه پردازش کند؛ اما برای نمونه، سیستم پرداخت ویزا قادر به پردازش ۲۴,۰۰۰ تراکنش در ثانیه است.
شاردینگ در واقع مدل اجرای خطی را که در آن هر نود تمامی فعالیتها را پردازش میکند، به مدل اجرای موازی تغییر میدهد که در آن هر نود تنها مسئول پردازش تعداد مشخصی از تراکنشها خواهد بود. در این صورت پردازش تراکنشها بهصورت موازی و در خطوط چندگانه پیش خواهد رفت.
یک بلاک چین به شاردهای مختلف (زیردامنه یا باکت) تقسیم میشود.
نودها نیز برای تأیید تراکنشها، تنها باید بخشی از دفترکل را که به آنها اختصاص یافته اجرا کنند و دیگر نیازی به نگهداری و بهروزرسانی کل تراکنشها نخواهد بود. به همین دلیل است که به شاردینگ، قسمتبندی افقی (Horizontal Partitioning) نیز میگویند که جایگزینی برای قسمتبندی عمودی (Vertical Partitioning) است.
در قسمتبندی افقی، دادههای کاربران مختلف در شاردهای متفاوت ذخیره میشود. این در حالی است که در قسمتبندی عمودی، هر یک از مشخصات کاربران در یک شارد جداگانه ذخیره خواهد شد. بهعنوان مثال، موجودی حساب در یک شارد و آدرس کیف پول در یک شارد دیگر قرار خواهد گرفت.
در فناوری بلاک چین، قسمتبندی افقی مزایای بیشتری دارد؛ چراکه مقیاسپذیری در آن با کارایی بیشتری قابلپیادهسازی است. در شبکههایی که به روش افقی قسمتبندی شدهاند.
وقتی تعداد بیشتری از کاربران یا نودها وارد شبکه میشوند، بهراحتی میتوان یک شارد جدید برای ذخیره اطلاعات آنها ایجاد کرد.
یعنی با افزایش تعداد کاربران، تعداد شاردها نیز افزایش مییابد و مشکلی برای مقیاسپذیری پیش نخواهد آمد.
اما در قسمتبندی عمودی، از آنجا که تعداد شاردها بر اساس گروهبندی اطلاعات تعیین شده و ثابت است، باز هم با مشکل مقیاسپذیری مواجه میشویم. در این روش، برخی شاردها مانند شاردی که برای ذخیره آدرس کیف پول کاربران در نظر گرفته شده، در نهایت با همان مشکل مقیاسپذیری مواجه خواهند شد که بلاک چینهای عادی با افزایش شمار کاربران درگیر آن میشوند.
بلاک چینی که بهصورت کامل شاردینگ را پیادهسازی کند، میتواند به قابلیتهای زیر دست یابد:
- با اجرای تراکنشهای بیشتر در چندین شارد که بهصورت موازی عمل میکنند، ظرفیت انجام تراکنشها افزایش مییابد؛
- با توجه به اینکه نودهای جدید نیاز به ذخیره کل تاریخچه تراکنشها ندارند، موانع ورود نودهای جدید بهشکل دیتابیسهای شاردشده کاهش مییابد و در نتیجه، دامنه تمرکززدایی گسترش پیدا میکند؛
- امنیت در بلاک چینهای شاردشده برخلاف اکوسیستمهای چندزنجیرهای بالاتر است؛ چراکه در سیستمهای شاردشده تراکنشها باید در سراسر شبکه تأیید شوند. این در حالی است که در اکوسیستمهای چندزنجیرهای، تراکنشهای یک زنجیره فقط در همان زنجیره تأیید میشوند.
با این حال، شاردینگ خالی از مشکل هم نیست و با چالشهای خاص خود همراه است. در ادامه برخی از چالشها و محدودیتهای شاردینگ را بررسی میکنیم.
چالشها و محدودیتهای شاردینگ
دو چالش اصلی پیش روی شاردینگ قرار دارد: تصرف شارد و ارتباطات میانشاردی.
تصرف شارد
تصرف شارد (Shard Takeover) مشابه حمله ۵۱ درصد در بلاک چین است و زمانی اتفاق میافتد که فرد یا نهادی کنترل یک شارد را به دست گرفته و تراکنشهای مدنظر خود را بهشکل مخربی بر شارد اعمال کند.
یک شبکه بلاک چین مانند تصویر زیر را در نظر بگیرید که ۱۰۰ نود با قدرت هش برابر دارد. در یک بلاک چین عادی، یک بازیگر مخرب اگر بخواهد کنترل شبکه را به دست بگیرد، یا بهعبارتی حمله ۵۱ درصد انجام دهد، باید ۵۱ درصد شبکه (در این تصویر ۵۱ نود) را در اختیار بگیرد؛ اما در یک شبکه شاردشده (که در این نمونه ۵ شارد را مشاهده میکنید)، این بازیگر مخرب فقط کافی است ۱۱ درصد شبکه (یعنی ۱۱ گره) را در اختیار بگیرد تا بتواند کنترل خود را بر یک شارد اعمال کند
این کار مثل انجام یک حمله ۵۱ درصد در درون یک شارد است. بهاینترتیب، تصرف یک شارد مثل تصرف یک زنجیره در اکوسیستم چندزنجیرهای، بسیار آسانتر از حمله به کل شبکه است. بهبیان سادهتر، با تقسیم شبکه به اجزای کوچکتر، کار هکرها و مهاجمان برای کنترلیافتن بر یک شارد راحتتر میشود.
از این رو، یکی از چالشهای شاردینگ این است که احتمال حمله مخرب به یک شارد باید به حداقل برسد. برای این کار باید توزیع قدرت رأیدهی در میان همه شاردهای موجود بهصورت اتفاقی و کاملاً برابر انجام شود یا اینکه تدابیری برای جلوگیری از تمرکز مخرب قدرت هش در یک شارد اندیشیده شود.
ارتباطات میانشاردی
چالش دیگر که ارتباطات میانشاردی (Cross-shard Communication) نام دارد، مربوط به زمانی است که یک تراکنش نیازمند تغییر در وضعیت یا فراخوانی یک تابع از یک شارد به شارد دیگر باشد. شبکهای را که پیشتر مثال آن را عنوان کردیم و ۵ شارد داشت در نظر بگیرید و فرض کنید که کاربر A در شارد یک میخواهد یک تراکنش را به کاربر یا قرارداد B در شارد ۲ ارسال کند. نحوه برقراری این ارتباط خود چالشی بزرگ به حساب میآید که هر یک از شبکهها، بهنوعی آن را حل کردهاند.
درباره تراکنشهای میانشاردی ملاحظات متعددی وجود دارد که از نهاییسازی (Finality) تا تجزیهناپذیری (Atomicity) را در بر میگیرد. برای نمونه، وقتی کاربر A تراکنشی را به کاربر یا قرارداد B ارسال میکند، این تراکنش را در وضعیت موجودی حساب کاربر A و کاربر یا قرارداد B ایجاد میکند.
به این ترتیب، نودهایی که مسئول ضبط تغییرات وضعیت هستند، باید در چندین شارد این تغییرات را اعمال کنند یا اینکه الگوریتمی پیدا کنند که از تطابق وضعیت در شاردها اطمینان حاصل کند.
از آن مهمتر، تراکنش میانشاردی مستلزم آن است که استخراجکننده تراکنش بتواند تغییرات وضعیت را در چندین شارد ارائه کند. این مسئله باعث پیچیدهترشدن شاردینگ میشود؛ چراکه هر نود معمولاً فقط برای شاردی که متعلق به آن است اقدام به ذخیره داده و پیشنهاد تراکنش میکند. این مشکل فقط از طریق معماری شبکه رفعشدنی است؛ یعنی یک شبکه شاردشده باید از اساس ساخت درستی داشته باشد.
محدودیتها
شاردینگ نیز مانند دیگر راهکارها، محدودیتهای خاص خود را دارد. در پروتکلهایی مانند زیلیکا که از شاردینگ شبکه استفاده میکنند، سهگانه مقیاسپذیری بهطور کامل حل نمیشود.
چراکه نودهای زیلیکا همچنان مجبور هستند وضعیت کل شبکه بلاک چین را ذخیره کنند.
از سوی دیگر، تصویر روشنی از پروتکلهایی مانند نیِر که از روش شاردینگ وضعیت استفاده میکنند نیز در دسترس نیست. الگوریتم نایتشید (Nightshade) که شاردینگ وضعیت نیِر را مدیریت میکند.
در حال حاضر کمتر از دو سال عمر دارد؛ از این رو، هنوز زود است که بخواهیم درباره آسیبپذیریهای نیِر حرفی بزنیم.
مهمترین مسئله این است که پروتکلهای شاردشده برای مقیاسپذیری نیازمند افزایش تعداد نودها هستند و این یعنی موفقیت آنها به افزایش استقبال و پذیرش وابسته است. بسیاری این مسئله را یکی از قابلیتهای شاردینگ میدانند؛ یعنی از نگاه آنان افزایش پذیرش یک پروتکل به افزایش تعداد نودها منجر خواهد شد. این در حالی است که چنین فرضی نادرست است؛ چراکه تعداد نودها مستقل از تعداد کاربران یا تراکنشهاست.
اگر پس از یک دوره زمانی، تعداد نودهای یک بلاک چین با هدف کاهش تعداد شاردها بهطور قابلتوجهی کم شود، این امر باعث افت توان عملیاتی شبکه در انجام تراکنشها خواهد شد.
در چنین وضعیتی، اگر شمار کاربرانی که در این دوره زمانی اقدام به انجام تراکنش میکنند ناگهان افزایش یابد.
کارمزدها بالا رفته یا زمان انتظار طولانی میشود که برای کاربران نامطلوب است.
خوشبختانه چنین اتفاقی تاکنون نیفتاده است، اما همین مسئله خود حاکی از آن است که نمیتوان پیامدهای چنین سناریویی را با دقت پیشبینی کرد.
با این حال، درک امکان وقوع سناریوی مزبور و ایجاد مشوقهای مناسب برای نودها بهمنظور جلوگیری از آن از اهمیت بسزایی برخوردار است.
آیا راهکار جایگزینی برای شاردینگ وجود دارد؟
یکی از راهکارهایی که گاهی برای افزایش مقیاسپذیری پیشنهاد میشود، افزایش سایز بلاکهاست.
با این تفکر که هرچه بلاکها بزرگتر باشند، تراکنشهای بیشتری در آنها جا میگیرند.
بر همین اساس، تعداد تراکنشهایی که در ثانیه میتوانند انجام شوند هم افزایش مییابد.
هرچند این راهکار میتواند عملی شود، اما باید در نظر داشت که بزرگتر شدن بلاکها به معنی نیاز به قدرت محاسباتی بیشتر برای تأیید آنهاست.
اگر سایز بلاک قرار بود به طور نامحدودی افزایش یابد، تنها تجهیزات و سختافزارهای بسیار تخصصی از عهده مدیریت پردازش تراکنشها بهعنوان نود برمیآمدند و تعداد نودهای شبکه بهطور قابلتوجهی کاهش مییافت.
هزینهبر بودن تهیه این تجهیزات بهمعنای متمرکزشدن نودها و افزایش خطر حمله ۵۱ درصدی است. همچنین افزایش سایز بلاک نیازمند هاردفورک است که خطر ایجاد دوگانگی در جامعهٔ پروژه را به دنبال دارد.
اگر همه افراد بلاک چین خود را به نسخه جدید بهروزرسانی نکنند، دو زنجیره جدا با کوینهای مجزا ایجاد خواهد شد.
به همین خاطر، افزایش سایز بلاک تنها یک راهکار موقتی است.
شاردینگ چیست؟
به بیان ساده، شاردینگ یعنی تقسیم یک پردازش بزرگ به پردازشهای کوچکتر؛ فرض کنید قصد تکمیل یک جورچین ۱,۰۰۰ تکه را دارید. به جای آن که تمام ۱,۰۰۰ تکه را روی میز بریزید و شروع به چیدن آنها کنید، میتوانید آنها را بر اساس رنگ تکهها جدا کنید و سپس کار تکمیلش را انجام دهید. این دستهبندی باعث میشود بررسی تکههایی که برای بخش خاصی هستند، آسانتر و سریعتر باشد.