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