بررسی سیستم distributed storage شرکت storpool

مقدمه

استورج های کامپیوتری یکی از بخش های اصلی تمام سیستم های انفورماتیکی امروز ما هستند، از یک سرور ساده که یک دیتابیس ساده را در خود نگه داری میکند، تا مجموعه دیتاسنترهای به هم متصل گوگل، همه نیازمند فضایی هستند که اطلاعاتی که باید پردازش کنند روی آن نگهداری کنند، فضایی که ما آنرا استورج می نامیم و یکی از گرانترین، و پر دغدغه ترین بخش های صنعت انفورماتیک محصوب می شود.

اما چرا پر دغدغه ترین و گرانترین؟ چون بر خلاف بسیاری از بخش های مختلف یک سیستم آی تی، مانند زیرساخت سوییچ و شبکه،  که با یک تنظیم اولیه با نگهداری کمی می توانند با پایداری بالا مدت زیادی کار کنند، یک سیستم استورج نیاز به مراقبت دائمی دارد. تقریبا تمامی بار کاری سیستم های استورج online دنیا روی انواع دیسک (هارد دیسک و ssd) است و روزی نیست که مدیر سیستم با از کار افتادن یکی از المان های این سیستم، مانند دیسک های آن، و تهدید از بین رفتن اطلاعات سر و کار نداشته باشد.

برای جلوگیری از بین رفتن اطلاعات و افزایش performance آن سیستم های مختلفی، مانند انواع راید، تکنولوژی های ساخت مختلفی مانند انواع دیسک های enterprise و تکنولوژی های ارتباطی مختلفی مانند شبکه های SAN و مانند این به وجود آمده است، اما مشکل اینجاست که خود این تکنولوژی ها به قیمت سرسام آور یک سیستم استورج منتهی شده اند.

اما مشکل کجاست؟

مشکل اصلی اینجاست که با پیچیده شدن سیستم های استورج، قیمت خرید و نگهداری آنها به طرز گزافی بالا می رود. به عنوان مثال یک سیستم دیسک SAN قدیمی مانند سری S2A از شرکت دیتادایرکت، از دو عدد کنترلر که هر کدام آنها هم dual هستند استفاده می کند، و برای دستیابی به پایداری بالا، از هارد دیسک های FC استفاده میکند که قیمت هر کدام چندین برابر معادل حجمی آن در هاردهای  SAS و چند ده برابر مدلهای عادی  است. قیمت کنترلر و هاردها در این سیستم بسیار بالاست و از آن بدتر اینکه، تمام قطعات این سیستم، از خود کنترلر و تجهیزات جانبی آن مانند پاور تا هاردها و سوییچ FC به قدری خاص هستند که در صورت بروز هر مشکلی برای آنها، تامین آن به غیر از طریق فروشنده اصلی، آن هم به قیمتی که خود او مشخص می کند ممکن نیست! این مشکل به قدری جدی است که در بسیاری موارد حتی اینترفیسی برای تست هارد FC خارج از سیستم وجود ندارد. حتی در سیستم های جدیدتر این شرکت که بر مبنای هاردهای SAS است ارتباط شبکه بر مبنای FC یا infiniband است که تجهیزات بسیار گران قیمت، و ناموجود در بازار تجهیزات متعارف را می طلبد.

اما آیا غولهای دنیای IT مانند گوگل یا facebook هم از همین روش استفاده میکنند؟

راه حل گوگل: عقلت را به کار بگیر!

در سال 2006 سه نفر از محققین گوگل مقاله ای را منتشر کردند که اصول پایه فایل سیستم گوگل، که کل اطلاعات گوگل در آن نگهداری میشود را توضیح می داد. این راه حل بر مبنای استفاده از commodity hardware، یا همان تجهیزات عمومی موجود در بازار بود، تجهیزاتی مثل هاردهای ساتا عادی، سوییچ های شبکه 100 و 1000 و سخت افزار سرور عمومی.

اگرچه پرداختن به جزئیات فایل سیستم گوگل خود مقاله مجزایی می خواهد، اما به صورت کلی فایل سیستم گوگل از طریق تقسیم کردن اطلاعات به صورت بلوک های کوچک (که object نامیده میشوند)، و نگهداری آن روی هارددیسک های سرورهای مختلف به همراه نگهداری متادیتای آن روی یک سرور متادیتا کار می کند. اگرچه این مفهوم جدید نیست و در فایل سیستم هایی مانند Lustre قبل از آن پیاده سازی شده بود، اما این گوگل بود که برای اولین بار این راه حل را در ابعاد حیرت انگیزی پیاده کرد و نشان داد که در دنیای عملی و با استفاده از سخت افزار متعارف این راه حل واقعا قابل دسترسی است. ابعاد این راه حل به قدری بزرگ است که تحقیقی که گوگل در مورد پایداری بخشی از هاردهای های خود انجام داده است شامل 500 هزار عدد دیسک میشود. (که فقط بخشی از هاردهای استفاده شده توسط گوگل است)

دلیل اصلی توسعه این راه حل این بود که برای گوگل منطقی نبود که در چنین ابعادی، پول بابت سخت افزار خاصی که شرکت های سازنده استورج مانند EMC یا بقیه می سازند بپردازد و خود را به آنها وابسته کند. البته گوگل این سیستم استورج را به عنوان محصول بیرون نداد، چون بصورت مشخص این یکی از مزایای رقابتی گوگل نسبت به سایر رقبا است. البته facebook و بقیه هم از سیستم های مشابهی مانند hadoop fs استفاده می کنند.

معرفی سیستم storpool

بعد از ارائه مقاله گوگل، مشخص بود که خیلی ها دست به کار ساخت سیستم مشابهی بصورت تجاری خواهند شد. یکی از این محصولات، سیستم storpool است که در واقع ساخت کشور بلغارستان است.

استورپول در واقع یک سیستم commodity hardware block level distributed storage system است. block level بودن این سیستم به این معنی است که سیستم عامل دقیقا مشابه یک دیسک با دسترسی بلوک می تواند به آن دسترسی پیدا کند و بنابراین برای کاربردهایی مانند دیتابیس و دیسک VM و مانند این قابل استفاده است. commodity hardware به این معنی است که این سیستم از سخت افزارهای عمومی، مانند شبکه 10GbE و هاردهای SAS معمولی و سخت افزار سرور معمولی استفاده می کند و سخت افزار خاصی که مربوط به یک شرکت خاص باشد برای آن لازم نیست. distributed storage به این معنی است که اطلاعات روی چندین سرور و دیسک های آن تقسیم شده و از آن فراخوانی می شوند.

این سیستم برای کاربردهای VM, bulk storage, containers و اینها طراحی شده است و به گفته طراحان آن می تواند بصورت مستقیم جایگزین دیسک SAN در شبکه شود. یک نکته مهم که اینجا وجود دارد این است که مثل یک دیسک SAN که برای share کردن آن در شبکه باید مجزا فکر کرد، و آنرا از طریق فایل سیستم شبکه مثل smb/cifs و یا sanergy به اشتراک گذاشت،  برای استورپول هم همین دغدغه وجود دارد.

ساختار طراحی سیستم بصورت shared nothing architecture است، به عبارت دیگر یک سرور مجزا برای متادیتا وجود ندارد و لازم نیست و به همین خاطر سیستم را از نظر تئوری با اضافه کردن نودهای جدید تا ظرفیتهای بسیار بالا ارتقا داد.

ارتباط بین نودها از طریق 10 GbE (اترنت 10 گیگ) است. از آنجا که سرعت و تاخیر آن در نوشته شدن و خوانده شدن اطلاعات خیلی مهم است استفاده از GbE اصلا توصیه نمی شود و تاکید روی 10 GbE یا حتی infiniband است.

مکانیزم حفاظت اطلاعات در سیستم به دو صورت است. اول اینکه برای هر سکتور دیتا یک چک سام 64 بیتی تولید می شود که بعدا سیستم می تواند سالم بودن هر سکتور را با آن چک کند، و علاوه بر این برای حفاظت دیتا از replication استفاده می شود. یعنی از هر سکتور دیتا حداقل یک کپی، و بصورت معمول دو کپی روی دو نود دیگر نگهداری می شود. در اینحالت با فرض از بین رفتن دیتا روی یک دیسک، از روی یک یا دو رپلیکا دیگر آن، می توان به سرعت دیتا را بازیابی کرد.

نرم افزار storage حدود 10 تا 15 درصد cpu /ram هر نود را اشغال میکند و بنابراین روی هر نود می توان اپلیکیشن های دیگر هم اجرا کرد. (مثلا دیتابیس، یا VM یا اپلیکیشن های دیگر). این امر امکان می دهد تا از هر نود بتوان به عنوان سیستم application server یا مانند این هم استفاده کرد.

سیستم مدیریت استورپول فقط command line و یا json api است و gui یا واسط گرافیکی مدیریت ندارد. به عبارت دیگر فقط از طریق دستورات لینوکسی خاص خود آن می توان سیستم را مدیریت کرد. فایل سیستم استورپول مثل یک فایل سیستم لینوکسی عادی مونت می شود و بعد می توان از آن برای کاربردهای مختلف استفاده کرد.

ظاهرا هر نود یک یا دو  SSD و یکسری هارد دیسک دارد که SSD ها برای افزایش performance سیستم استفاده می شوند. هر کلاینت فقط به یک ولوم وصل می شود attach و فایل سیستم مشترک ندارد، که البته به خاطر ماهیت شبیه SAN سیستم این امر عادی است.

از نظر پرفورمانس با 6 تا نود سرور که 12 تا ssd و 30 تا دیسک داشته و با 10GbE به هم متصل بوده است تا 2700 مگابایت بر ثانیه sequential read و 1500 MByte/s سکوئنشیال رایت گرفته اند و Random 4k reads 170,000 IOPS و 66,000 IOPS on writes گرفته اند. از این 6 تا نود در مجموع 12 تا core سی پی یو و 48 گیگابایت رم استفاده شده است.

این سیستم قابلیت های دیگری مانند snapshot, clone, thin provisioning و synchronous replication هم دارد.

سیستم storpool روی لینوکس کار می کند و برخلاف خیلی سیستم های لینوکسی دیگر نیاز به کرنل خاص کامپایل شده ندارد، اما به هر حال مثل یک استورج عادی نمی توان آنرا به یک سیستم ویندوزی وصل کرد.

سیستم برای کار حداقل سه نود لازم دارد که البته توصیه خود آنها 5 نود است. به ازای هر نود حداقل ۳۲ گیگابایت رم و سی پی یو x86-64 و یک کارت شبکه 10GbE می خواهد. نودها را می توان بدون down کردن سیستم به آن اضافه کرد.

دیسک ها باید توسط سیستم بصورت جدا جدا دیده شوند و در حالت jbod باشند و در حالت raid این سیستم کار نمی کند.

recommended آن برای کار حداقل ۵ نود با ارتباط infiniband QDR/FDR است که هر نود حداقل ۵ تا هارد برای استورج و دو تا SSD برای سیستم عامل داشته باشد. استورپول گفته درایوها می تواند از نظر سایز متفاوت باشد،‌ ولی این اختلاف اندازه باید کم باشد و توصیه می کند درایوها یک اندازه باشند.

اضافه کردن هر دیسک ظرفیت را اضافه می کند و مثل RAID و ZFS و بقیه نیست که ساختار آنرا بعدا نتوان تغییر داد. با اضافه کردن دیسک ها و نودها IOPS و ظرفیت را با هم اضافه می کند.

قیمت سیستم storpool و نحوه ارزیابی آن

استورپول دو نوع مکانیزم قیمت گذاری برای سیستم خود دارد. مکانیزم قیمت گذاری ماهانه و مکانیزم قیمت گذاری lifetime.

درمکانیزم قیمت گذاری ماهیانه، کاربر به ازای هر ماه استفاده از سیستم مقداری را به شرکت می پردازد. این اجازه می دهد کاربر مکانیزم pay as you grow را پیاده سازی کند. یعنی با افزایش نیازهای خود، حجم استورج بیشتری را خریداری کند و در ضمن هر موقعی که نخواست دیگر از استورج استفاده نکند.

در مکانیزم قیمت گذاری lifetime، کاربر یکبار هزینه استورج خود را می پردازد و لیسانس آنرا خریداری می کند، و برای سال های بعد، لازم نیست هزینه دیگری بپردازد (البته به غیر از هزینه پشتیبانی که مجزا محاسبه می شود)

در ضمن قیمت گذاری استورپول به حجم و تعداد دیسک وابسته است، که تاثیر تعداد دیسک در قیمت بیشتر است، بنابراین مقرون به صرفه است که از دیسک های با ظرفیت بالاتر استفاده کرد تا هزینه کلی کمتر شود.

قیمتی که ما در مهر 93 برای این سیستم گرفتیم، برای 300 ترابایت حجم قابل استفاده (یعنی 600 ترابایت با استفاده از replica x2، دیتا دو جای مختلف همزمان کپی شود)، تقریبا 99 هزار دلار برای لیسانس 630 دیسک 1 ترابایت و 70 هزار دلار برای لیسانس 158 دیسک 4 ترابایت بود. باید توجه داشت که این فقط قیمت لیسانس نرم افزار است و سخت افزار مورد نظر باید با توجه به recommendation شرکت storpool خریداری شود.

همینطور که دیده می شود در صورت استفاده از دیسک های 4 ترابایت چون تعداد دیسک مورد نیاز کمتر می شود، هزینه لیسانس هم کمتر می شود، اما باید به خاطر داشت که با کاهش تعداد دیسک (و همزمان کاهش تعداد نود) پرفورمانس مجموع استورج هم پایین تر می آید، که بسته به بازدهی مورد نیاز باید در مورد آن تصمیم گیری کرد. هزینه پشتیبانی سالیانه هم بیست درصد ارزش خرید سیستم است.

استورپول دو امکان برای ارزیابی سیستم فراهم می کند. امکان اول دسترسی به کلاستر دموی داخلی سیستم استورپول است که کاربر می توان بدون خرید سخت افزار خودش با سیستم استورپول کار کند و آنرا ارزیابی کند. امکان دوم نصب دموی استورپول روی سخت افزار خود کاربر بصورت محدود است، که البته در این حالت باید کاربر سخت افزار را در محل خودش تهیه کند.

نتیجه گیری کلی

بصورت خلاصه می توان دید که استورپول مزایای منحصر به فردی ارائه می کند که بصورت خلاصه بصورت زیر است:

  • دسترسی block based و قابلیت استفاده به جای دیسک SAN.
  • عدم نیاز و وابستگی به سخت افزار خاص.
  • قابلیت اضافه کردن ظرفیت به صورت دلخواه بدون نیاز به تغییر config سیستم.
  • قیمت نسبتا ارزانتر نسبت به سیستم های شرکت های خاص.

اما باید در نظر داشت که در مورد این سیستم، هیچ اشاره ای در مورد مسائل سیستم های distributed، مانند حالت split brain (وقتی که ارتباط شبکه بین دو مجموعه نود قطع می شود) یا redundancy شبکه بین نودها نشده است. علاوه بر این خیلی از ادعاهای شرکت در مورد فایل سیستم باید در عمل تست شود. علاوه بر این طراحی استورپول شباهت زیادی به نمونه های سورس باز مشابه مانند OrangeFS یا Lustre ، ولی با پشتیبانی تجاری دارد که خرید آنرا با سوالات بیشتری مواجه می کند. علاوه بر این سیستم استورپول در حالت عادی فقط از طریق لینوکس قابل دسترسی است، و بنابراین امکان اتصال آن بصورت مستقیم به سایر سیستم عامل ها، مانند windows server بدون واسطه وجود ندارد.