در قسمت اول مقاله سیستم ذخیرهساز هوشمند در مورد اجزای یک سیستم ذخیرهساز هوشمند صحبت کردیم و در مورد Command Queuing یک تکنیک بکار رفته در Controllerهای Front-End است که ترتیب اجرای فرمانهای دریافتی را مشخص نموده و میتواند جابجاییهای غیر لازم Drive Head را کاهش داده و عملکرد Disk را افزایش دهد بحث نمودیم.
پیادهسازی Cache
Cache میتواند هم بصورت اختصاصی و هم بصورت سراسری پیادهسازی شود که در حالت اختصاصی چندین مجموعه از موقعیتهای حافظه برای Readها و Writeها درنظر گرفته میشود و در حالت سراسری نیز هم Readها و هم Writeها میتوانند از هر آدرس حافظه قابل دسترس استفاده کنند. مدیریت Cache در حالت سراسری به صرفهتر است زیرا تنها یک مجموعه از آدرسهای سراسری باید مدیریت شوند. Cache سراسری به کاربران این امکان را میدهد تا در مدیریت آن بتوانند درصد Cache قابل دسترس برای Read و Write را تنظیم کنند. بطور معمول، Read Cache کم است اما اگر برنامه کاربردی مورد استفاده نسبت به Read حساس باشد باید افزایش یابد. در سایر پیادهسازیهای Cache سراسری، نسبت Cache قابل دسترس Read به Write بصورت پویا و بر اساس Workloadها تنظیم میشود.
مدیریت Cache
Cache یک منبع محدود و با ارزش بوده که نیازمند مدیریت درست است و حتی با وجود اینکه سیستمهای ذخیرهساز هوشمند میتوانند با Cache زیاد پیکربندی شوند، زمانی که تمامی صفحات Cache پر میشود، برخی از صفحات باید خالی شوند تا دادههای جدید را جا داده و از تضعیف عملکرد جلوگیری نمود. الگوریتمهای مختلف مدیریت Cache در سیستم ذخیرهساز هوشمند که میتوانند در مواقع لزوم خالی شوند را آماده داشته باشد:
برای مشاوره رایگان و یا پیاده سازی راهکارهای پشتیبان گیری و ذخیره سازی با کارشناسان شرکت APK تماس بگیرید. |
- Least Recently Used یا LRU: یک الگوریتم که بطور مداوم دسترسی به دادهها را در Cache مانیتور نموده و آن دسته صفحات Cache که برای مدت طولانی به آنها دسترسی صورت نگرفته را شناسایی میکند. LRU یا این صفحات را خالی نموده یا آنها را برای استفاده مجدد نشانهگذاری میکند. این الگوریتم بر اساس این فرض که دادههایی که برای مدت طولانی به آنها دسترسی صورت نگرفته از سوی Host درخواست نمیشوند کار میکند. با این حال، اگر یک صفحه شامل دادههای Write باشد که هنوز به Disk سپرده نشدهاند، دادهها ابتدا در دیسک Write میشوند پیش از آنکه صفحه دوباره مورد استفاده قرار گیرد.
- Most Recently Used یا MRU: یک الگوریتم که عکس LRU عمل میکند و در آن صفحاتی که اخیرا بیشتر مورد دسترسی قرار گرفتند تخلیه شده یا برای استفاده مجدد علامتگذاری میشوند. این الگوریتم براساس این فرض عمل میکند که دادههایی که اخیرا مود دسترسی قرار گرفتند شاید برای مدتی لازم نباشند.
با پر شدن Cache، سیستم ذخیرهساز باید صفحات پر دادههایی که Writeشدن آنها به Cache انجام شده اما به Disk خیر، را جهت مدیریت دسترسی پاک کند و این تخلیه فرآیند سپردن دادهها از Cache به Disk است. براساس الگو و نرخ دسترسی I/O، سطوح بالا و پایین با نام Watermarkها در Cache تنظیم میشوند تا فرآیند تخلیه را مدیریت نمایند. Low Watermark یا LWM نقطهای است که در آن سیستم ذخیرهساز تخلیه اضطراری یا تخلیه سریع را متوقف نموده و آن را غیر فعال میکند. میزان استفاده از Cache همانطور که در شکل زیر نشان داده شده است، نوع تخلیه لازم را مشخص میکند:
- تخلیه غیرفعال: زمانی که میزان استفاده از Cache بین Watermark بالا و پایین باشد بطور دائم و ملایم رخ میدهد.
- تخلیه با Watermark بالا: زمانی که مصرف Cache به Watermark بالا میرسد فعال میگردد و سیستم ذخیرهساز منابع مضاعفی برای تخلیه اختصاص میدهد. این نوع از تخلیه کمترین تاثیر را بر پردازش I/O Host دارد.
- تخلیه اضطراری: به هنگام مواجهه با حجم بالای I/O صورت میگیرد یعنی زمانی که Cache به 100 درصد ظرفیت خود میرسد و زمان واکنش I/O را به میزان زیادی تحت تاثیر قرار میدهد. در تخلیه اضطراری، صفحات پر با اعمال فشار به Disk تخلیه میشوند.
انواع تخلیه
محافظت از دادههای Cache
Cache حافظه فرار است بنابراین قطع برق یا خرابی Cache باعث از دست رفتن دادههایی میشود که هنوز به Disk سپرده نشدهاند اما این مشکل با Cache Mirroring و Cache Vaulting قابل پیشگیری است:
- Cache Mirroring: هر عمل write به Cache در دو موقعیت حافظه مختلف در دو کارت حافظه مستقل صورت میگیرد. درصورت خرابی Cache، دادههای Write همچنان در موقعیت Mirror شده ایمن باقی میمانند و میتوانند به Disk سپرده شوند. Readها از Disk به Cache ،Stage میشوند، بنابراین در صورت خرابی Cache، دادهها همچنان از Disk قابل دسترسی هستند. از آنجایی که تنها Writeها Mirror میشوند این روش باعث استفاده بهتر از Cache قابل دسترس میشوند.
در رویکردهای Cache Mirroring، مشکل حفظ انسجام Cache به میان میآید. انسجام Cache به معنای آن است که دادههای دو Cache با موقعیت مختلف باید در هر زمانی یکسان باشند و این وظیفه محیط عملیاتی Array است تا این انسجام را حفظ کند.
بیشتر بخوانید: نگاهی به پيشرفتهای RAID-5/6 Erasure Coding در vSAN 7 U2
- Cache Vaulting: در صورت قطعی برق، Cache در معرض خطر از دست دادن دادههای سپرده نشده قرار میگیرد. این مشکل به طرق مختلف قابل رسیدگی است: تغذیه حافظه با یک باتری تا زمانی که جریان برق متناوب بازیابی شود یا استفاده از توان باتری برای Write کردن محتوای Cache به Disk. درصورت وقوع قطعی برق طولانی استفاده از باتریها گزینه بادوامی نیست زیرا در سیستمهای هوشمند ذخیرهساز، حجم زیادی از دادهها به تعداد بالایی از Diskها سپرده میشوند و شاید باتریها نتوانند برای مدت زمان لازم جهت Writeکردن دادهها به Disk مورد نظر توان کافی را فراهم کنند. بنابراین Vendor های ذخیرهساز از یک مجموعه Disk فیزیکی برای تخلیه محتوای Cache در طی قطعی برق استفاده میکنند. این عمل Cache Vaulting نام دارد و نام Diskها Vault Drive است. زمانی که توان بازیابی شود دادههای این Diskها به Write Cache بازگردانده شده و سپس به Diskهای مورد نظر Write میشوند.
Back End
Back End یک رابط کاربری میان Cache و Disk فیزیکی فراهم میکند که شامل دو قسمت است: Back-End Portها و Back End Controllerها. Back End انتقال دادهها میان Cache و Diskهای فیزیکی را کنترل میکند. دادهها از Cache به Back End ارسال شده و سپس به Disk مقصد Route میگردند. Diskهای فیزیکی به Portها در Back End متصل میشوند و Controllerهای Back End به هنگام اجرای Readها و Writeها با Diskها ارتباط برقرار میکند و همچنین ذخیرهسازهای مضاعف اما محدود و موقت را برای دادهها فراهم میسازد. الگوریتمهای پیادهسازی شده در Controllerهای Back End در کنار عملکرد RAID، شناسایی و اصلاح خطاها را نیز انجام میدهند.
برای دسترسی و حفاظت بالای دادهها، سیستمهای ذخیرهساز با دو Controller و چندین Port پیکربندی میشوند که در صورت خرابی Port یا Controller یک مسیر جایگزین به Diskهای فیزیکی فراهم میسازد. اگر Diskها نیز دارای دو Port باشند این قابلیت عملکرد بهتری نیز خواهد داشت که در آن صورت، هر Port از Disk میتوانند به یک Controller جداگانه وصل شود. همچنین Controllerهای چندگانه نیز Load Balancing را تقویت میکنند.
Disk فیزیکی
Driveهای فیزیکی یا گروهی از Driveهای محافظت شده RAID میتوانند بصورت منطقی به Volumeهای شناخته شده به عنوان Volumeهای منطقی جدا شوند که بطور کلی از آنها با عنوان Logical Unit Numberها یا LUNها یاد میشود که بکارگیری آنها باعث بهبود استفاده از Disk میشود. به عنوان مثال بدون استفاده از LUNها، یک Host که تنها به 200GB نیاز دارد مشمول دریافت یک Disk فیزیکی یک ترابایتی میشود اما درصورت استفاده از LUN، تنها همان 200GB مورد نیاز به Host اختصاص مییابد که اجازه میدهد آن 800BG باقیمانده به سایر Hostها اختصاص پیدا کند.
درصورت استفاده از Driveهای محافظت شده RAID، این واحدهای منطقی قسمتهای مجموعههای RAID هستند و در تمامی Diskهای فیزیکی متعلق به آن مجموعه پخش میشوند. این واحدهای منطقی همچنین میتوانند به عنوان بخشبندیهای منطقی یک مجموعه RAID که به عنوان یک Disk فیزیکی به یک Host ارسال شده دیده شوند. به عنوان مثال، شکل زیر یک مجموعه RAID را نشان میدهد که شامل پنج Disk است که برای چندین LUN بخشبندی یا تکهتکه شدهاند. LUNهای 0 و 1 در این شکل نمایش داده شدهاند.
تعداد واحد منطقی سیستم ذخیرهساز هوشمند
باید به چگونگی استقرار هر LUN در هر Disk فیزیکی در مجموعه RAID توجه نمود. LUNهای 0 و 1 به ترتیب به عنوان Volumeهای فیزیکی جهت ذخیره و بازیابی دادهها به Hostهای 1 و 2 اهدا شدهاند. ظرفیت قابل استفاده Volumeهای فیزیکی توسط نوع RAID مجموعه تعیین میشود و با جمعآوری و الحاق سایر LUNها به آن قابل افزایش است. نتیجه این الحاق ظرفیت بیشتر LUN است که با عنوان MetaLUN شناخته میشود. Mapکردن LUNها به موقعیتهای فیزیکی خود در این Driveها توسط محیط عملیاتی یک سیستم هوشمند ذخیرهساز مدیریت میگردد.
LUN Making
LUN Masking فرآیندی است که با تعریف LUNهای قابل دسترس برای یک Host کنترل دسترسی به دادهها را ممکن میسازد. عملکرد این فرآیند معمولا در Front End Controller پیادهسازی میشود و این امر اطمینان میدهد که دسترسی سرورها به Volume به درستی کنترل میشود و از استفاده بدون حق دسترسی یا استفاده تصادفی در یک محیط توزیعی جلوگیری میکند. به عنوان مثال میتوان یک Array ذخیرهساز را با دو LUN درنظر گرفت که دادههای فروش و دپارتمان مالی را ذخیره میکنند. بدون LUN Masking، هردو دپارتمان میتوانند به سادگی دادههای یکدیگر را ببینند و اصلاح کنند که یکپارچگی و امنیت دادهها را به خطر میاندازد. با LUN Masking، LUNها تنها برای Hostهای اختصاص داده شده قابل دسترسی هستند.