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