حامد خاکباز
Computer Specialist and Cloud Engineer

کاربرد EC چیست؟ بررسی مفهوم Erasure Code در Storage ها

منظور از EC در Storage چیست؟ Erasure Code چیست؟ Erasure Coding چه کاربردی دارد؟  در این مقاله به معرفی و بررسی Erasure-Code در ذخیره سازی خواهیم پرداخت. همچنین پیشنیاز این مقاله آشنایی با مفاهیمی از قبیل RAID و Software Defined Storage است.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

کاربرد EC چیست؟ بررسی مفهوم Erasure Code در Storage ها

همانطور که می دانید یکی از اجزای اصلی هر ذخیره سازی، تکنولوژی RAID آن است اما چه جایگزین های برای RAID در دیتاسنتر های بزرگ وجود دارد؟ به خصوص در دیتاسنترهای بزرگ که حجم بسیار زیادی در حال ذخیره سازی است، همواره این سوال پیش می آید که آیا استراتژی جایگزین دیگری نیز وجود دارد که کمتر از RAID فضا بخواهد و از طرفی هم بتواند به اندازه ی RAID از دیتا محافظت کند؟ در این مقاله با بررسی مفهوم Erasure Coding به این چالش پاسخ خواهیم داد.

ذخیره ساز ها و Data Storage ها برای ایجاد reliability و data availability از تکنیک های زیادی استفاده می کنند که مطرح ترین آنها RAID و Replication است. اما در این مقاله می خواهیم از تکنیک دیگری با عنوان erasure coding نام ببریم که همانند RAID و Replication مزایا و معایبی دارد که به بررسی آنها خواهیم پرداخت.

زمانی که از erasure code صحبت می کنیم برای درک جایگاه آن باید در نظر داشت که درون یک کلاستر ذخیره سازی؛ Pool type یک ذخیره ساز می تواند یا RAID ، یا Replication و یا Erasure-Coding باشد. به عبارت دیگر erasure coding یک سازوکار جدید برای ایجاد data protection در ذخیره سازی است. از erasure coding به اختصار با عنوان EC و همچنین ECS نیز نام برده می شود.

اما erasure code چه هدفی را دنبال می کند؟ و به کدام نیاز پاسخ می دهد؟ همانطور که عنوان شد؛ امروزه ذخیره سازها و بخصوص SDS های نوین سرشار از قابلیت های فراوانی هستند که یکی از آن ها erasure coding است. بدین ترتیب که SDS ها در ساختار خود جهت لحاظ کردن data reliability به جای استفاده ازRAID و Replication ، از قابلیت و تکنیک دیگری به نام  erasure coding هم می توانند استفاده کنند و می توان Pool type یک استوریج را erasure coding گذاشت.  

هدف اصلی erasure coding مقابله و جلوگیری از data loss است و تضمین می کند که اگر همزمان چندین دیسک از بین برود باز هم دیتا را از دست نمی دهد. همچنین در مقایسه با Replication و RAID بسته به نوع سناریو، این قابلیت می تواند rebuild time کمتری در هنگام ریکاوری داشته باشد.

از طرفی همانطور که می دانیم در دنیای امروزی یک ذخیره ساز سوای اینکه از کدام تکنیک استفاده می کند باید نشان دهد که می تواند بعد از یک Failure باز هم امکان و توان دسترسی به دیتا را ادامه داده و در اصطلاح continuity و availability داشته باشد.

اما availability چطور در erasure coding ایجاد می شود؟ به عنوان مثال در RAID از دیسک های دیگری برای ایجاد data availability استفاده می شود و یا در Replication از Replica استفاده می شود ولی در erasure coding از erasure-code ها استفاده می شود. در حقیقت erasure coding نقطه ی مقابل Replication یا RAID است یعنی یک Storage Pool برای ایجاد reliability و همچنین Data Availability می تواند به جای RAID و Replication از erasure coding استفاده کند.

همچنین شایان ذکر است که درون یک Storage Cluster می توان هر دو نوع تکنیک را در Pool های جداگانه در یک Cluster داشت، البته این موضوع باید توسط نرم افزار ذخیره سازی پشتیبانی بشود.

اما چه زمانی باید از erasure-coding استفاده کرد؟ و چه زمانی کاربرد دارد؟ یکی از کاربردهای erasure code زمانی است که می خواهیم از یک استوریج برای آرشیو فایل استفاده کنیم، در این حالت به صرفه نیست که از RAID یا Replication استفاده کنیم چراکه به دنبال سرعت بالای خواندن و نوشتن نیستیم و هدف این است که حجم زیادی از داده را در فضای کمتری جای بدهیم.

یکی دیگر از کاربردهای مهم erasure coding در Cloud Storage ها، Object Storage ها و فضاهای ابری مثل Amazon S3 است که در بطن خود برای ذخیره سازی از این تکنیک استفاده می کنند. چراکه بدین ترتیب می توانند هم مصرف دیسک را تا 40 درصد کاهش دهند و هم تا نزدیک به 99.999999  درصد durability و دوام پس از Disaster داشته باشند. همچنین Software Defined Storage ها و همچنین Hyper-converged Storage های زیادی از erasure coding استفاده می کنند که از مطرح ترین آنها می توان به VxRail ، VMware vSAN و CEPH اشاره کرد.

 برای مثال؛ VMware vSAN از erasure coding برای ایجاد availability در سناریو All Flash خود پشتیبانی می کند، همچنین Ceph نیز از erasure coding پشتیبانی می کند و به هنگام ساخت یک Pool در Ceph می توان تعیین کرد که آیا این Pool از erasure coding استفاده بکند یا خیر. ولی باید در نظر داشت که در هیچ ذخیره سازی نمی توان بر روی یک Pool واحد همزمان از erasure coding در کنار RAID و یا Replication استفاده کرد.

کاربرد EC چیست؟ بررسی مفهوم Erasure Code در Storage ها

اما سازوکار این تکنیک به چه شکل است؟ در حقیقت erasure coding دیتا را به chunk ها و تیکه های کوچکی خرد کرده سپس chunk ها و تیکه های کوچک را encode کرده و در نقاط پراکنده ای از Pool (طبق الگوریتمی که availability را تضمن کند) ذخیره می کند. همین مکانیسم کاری erasure coding باعث شده که Storage Pool هایی که از erasure coding استفاده می کنند فضای ذخیره سازی کمتری مصرف کنند. یعنی erasure coding به نسبت RAID و Replication دیسک کمتری نیاز دارد. به عنوان مثال erasure coding به اندازه RAID1 برای داده Protection ایجاد می کند ولی در مقایسه با RAID1 فضا و storage capacity کمتری نیاز دارد. چراکه erasure coding الگوریتم محاسباتی ای دارد که می تواند سایز اصلی دیتا را از یک سایز کوچک شده، ریکاور و regenerate کند.
اما یکی از معایب این راهکار این است که؛ erasure coding باعث می شود که ذخیره ساز نیاز به CPU و پردازشگر بسیار قوی تری داشته باشد چرا که محاسباتی که باعث کاهش حجم ذخیره سازی می شود بار پردازشی زیادی ایجاد می کند. به عبارت دیگر Erasure coding یا EC یک فرآیند CPU-intensive است که در مواقع Disaster و در حین فرآیند ریکاوری باعث می شود دیتای corrupt شده از نو محاسبه شده و مجدد احیا شود.

به همین دلیل استفاده از erasure coding بیشتر در مواقعی توصیه می شود که یک حجم بسیار زیادی از دیتا را می خواهیم ذخیره کنیم و به جای اینکه دغدغه Performance I/O داشته باشیم دغدغه ی اول و ارجح تر،  کم کردن حجم و تعداد دیسک مصرفی است. به عنوان نمونه زمانی که قصد جای دادن چند Petabyte دیتا را داریم (به عنوان مثال برای  4 PB ) اگر از مکانیسمی غیر از erasure coding استفاده کنیم برای تامین Availability و Data Protection باید حداقل 2 برابر آن فضا مصرف کنیم ( باید 8 PB فضا در نظر بگیریم ) ولی زمانی که از erasure coding استفاده می کنیم هرچند سرعت I/O آهسته و کندتر می شود

ولی دیگردر محاسبه فضا، همه چیز ضربدر دو نمی شود و (برای داده های غیر I/O Intensive) در مجموع TCO بهتری بدست می آید ، چرا که برآورد می شود erasure coding تا چهل درصد هزینه را کاهش می دهد. همچنین erasure coding تضمین می کند که Data های موجود را پس از خرد کردن  تحت قالب Data Chunk های کوچک شده در Failure Zone های جداگانه ای از Pool ذخیره می کنند.

محاسبات ریاضی erasure coding به نحوی است که یک دیتا پس ازذخیره شدن در Pool به پنج بخش پراکنده تقسیم شده است که این پنج بخش در مجموع و روی هم رفته فضایی کمتر از دو برابر دیتای اصلی مصرف می کنند و از طرفی اگر Disaster ای رخ بدهد استوریج می تواند از دست دادن حداکثر تا دو بخش را تحمل کند و به هنگام ریکاوری erasure coding می تواند با دسترسی به حداقل سه بخش باقی مانده، کل دیتای اصلی را ریکاور کند. همچنین به عنوان نکته ی آخر باید در نظر داشت که erasure coding به معنای compression نیست و باهم تفاوت دارند.


حامد خاکباز
حامد خاکباز

Computer Specialist and Cloud Engineer

a significant focus on Storage Virtualization, Replication, Software Defined Storage

نظرات