معرفی ذخیره سازی Vitastor
Vitastor یک سیستم ذخیرهسازی توزیعشده و کمتاخیر است که توسط توسعهدهندگان روسی ایجاد شده است. این سیستم با تمرکز بر عملکرد بالا و تاخیر پایین، بهویژه برای استفاده در محیطهایی مثل مجازیسازی و کانتینرسازی مانند Kubernetes توسعه یافته است. Vitastor در رقابت با سیستمهای ذخیرهسازی توزیعشده مانند Ceph طراحی شده و مزایایی مانند سهولت راهاندازی و عملکرد بهینه را ارائه میدهد.
Vitastor از پروتکل های QEMU، NBD، NFS، OpenStack، OpenNebula، Proxmox، Kubernetes پشتیبانی میکند. درایورهای بیشتری ممکن است به راحتی ایجاد شوند.
ویژگیهای اصلی Vitastor:
- عملکرد بالا و تاخیر پایین: Vitastor از معماری مبتنی بر object storage استفاده میکند، اما با تمرکز بر تاخیر کم و عملکرد بالا. این موضوع آن را برای کاربردهایی که نیاز به IOPS بالا دارند (مانند دیتابیسها و ماشینهای مجازی) بسیار مناسب میسازد.
- راحتی در راهاندازی: یکی از اهداف Vitastor کاهش پیچیدگی در تنظیم و مدیریت است. برخلاف برخی سیستمهای توزیعشده دیگر، Vitastor از یک پیکربندی سادهتر بهره میبرد که به کاربران کمک میکند تا آن را سریعتر و بدون نیاز به تخصص عمیق تنظیم کنند.
- استفاده از تکنیکهای کدگذاری XOR برای افزونگی دادهها: Vitastor از کدگذاری XOR برای حفاظت از دادهها استفاده نموده که به کاهش سربار افزونگی کمک میکند.
- پشتیبانی از همزمانی و قابلیت تحمل خطا: همانند Ceph، Vitastor هم به نحوی طراحی شده که دادهها بین چندین نود توزیع میشود تا از قابلیت تحمل خطا و دسترسیپذیری بالا برخوردار باشد.
- توسعهپذیری: این سیستم مقیاسپذیری بالایی دارد و میتواند به راحتی با افزایش نیازهای ذخیرهسازی، رشد کند.
مفاهیم اساسی
- OSD (Object Storage Daemon) فرآیندی است که دادهها را ذخیره میکند و درخواستهای خواندن/نوشتن را ارائه میدهد.
- PG (Placement Group) یک شارد(shard) از کلاستر، گروهی از داده های ذخیره شده در یک مجموعه از replica است.
- Pool کانتینری برای دادهها است که دارای طرح افزونگی و قوانین مکانیابی برابر است.
- Monitor یک دیمن جداگانه است که وضعیت کلاستر را تماشا و خرابیها را مدیریت میکند.
- Failure Domain گروهی از OSDها است که شما اجازه میدهید با شکست مواجه شوند. به طور پیش فرض host است.
- Placement Tree ، OSDها را در یک سلسله مراتب گروه بندی میکند تا بعدا آنها را به Failure Domains تقسیم کند.
شباهت به Ceph
- Vitastor هم دارای Pools، PGs، OSDs، Monitors، Failure Domains، Placement Tree است.
- Vitastor هم هر image data را در کل کلاستر توزیع میکند.
- Vitastor هم تراکنشی (transactional) است. حتی با وجود اینکه یک lazy fsync mode وجود دارد که به طور ضمنی هر عملیات را روی دیسک انجام نمیدهد، هر نوشتن در کلاستر atomic است.
- OSDها همچنین دارای journal و metadata هستند و همچنین می توان آنها را در درایوهای جداگانه قرار داد.
- درست مانند Ceph، کتابخانه کلاینت تلاش میکند تا از هر گونه خرابی کلاستری بازیابی (recover) کند، بنابراین میتوانید کل کلاستر را ریبوت کرده و فقط مشتریان خود را pause کنید، اما خراب (crash) نکنید.
تفاوت با Ceph
- تمرکز اصلی Vitastor روی SSD است: کلاسترهای SSD-only و SSD+HDD
- لایه اصلی Vitastor ذخیره سازی بلوک با بلوک های با اندازه ثابت است، نه ذخیره سازی اشیا با معنایی غنی مانند سف (RADOS).
- PGها در Vitastor زودگذر هستند. به این معنی که آنها در دیسک های داده ذخیره نمیشوند و فقط در زمانی که OSDها در حال اجرا هستند در حافظه وجود دارند.
- Vitastor OSD تک رشته ای است (و همیشه خواهد بود). اگر میخواهید بیش از 1 هسته را به هر درایو اختصاص دهید، باید چندین OSD را روی یک پارتیشن متفاوت از درایو اجرا کنید. اگرچه Vitastor برخلاف Ceph خورهی پردازنده (CPU-hungry) نیست، بنابراین 1 هسته در بسیاری از موارد کافی است.
- Metadata همیشه در حافظه نگهداری میشود که نیاز به خواندن دیسک اضافی را از بین میبرد. اندازه Metadata به طور خطی به ظرفیت درایو و اندازه بلوک ذخیره داده بستگی دارد که به طور پیش فرض 128 کیلوبایت است. با بلوکهای 128 کیلوبایتی، Metadata حدود 512 مگابایت در هر 1 ترابایت طول میکشد (که هنوز کمتر از چیزی است که Ceph میخواهد). Journal نیز به طور پیش فرض در حافظه نگهداری میشود، اما در کلاسترهای SSD فقط 32 مگابایت است و در کلاسترهای SSD+HDD، جایی که افزایش آن مفید است، inmemory_journal را می توان غیرفعال کرد.
- لایه ذخیره سازی Vitastor دارای copy-on-write یا redirect-write داخلی نیست. میدانم که شاید بتوان یک فضای ذخیرهسازی copy-on-write خوب ایجاد کرد، اما این کار بسیار سختتر است و عملکرد را قطعیتر میکند، بنابراین CoW در Vitastor استفاده نمیشود.
- یک حالت lazy fsync وجود دارد که اجازه میدهد تا نوشتهها را قبل از فلاش کردن روی دیسک دستهبندی کنید این حالت اجازه میدهد تا از Vitastor با SSDهای دسکتاپ استفاده کنید، اما همچنان به دلیل رفت و برگشتهای اضافی شبکه، کارایی را کاهش میدهد، بنابراین برای بهترین عملکرد از SSDهای سرور با محافظت از افت توان مبتنی بر خازن (محافظت از دست دادن توان پیشرفته) استفاده کنید.
- فرآیند بازیابی به ازای هر شی (در هر بلوک) است، نه برای هر PG. همچنین هیچ PGLOG وجود ندارد.
- Monitor دادهها را ذخیره نمیکنند. پیکربندی و حالت کلاستر در etcd در ساختارهای ساده JSON قابل خواندن توسط انسان ذخیره میشود. مانیتورها فقط وضعیت کلاستر را تماشا و حرکت دادهها را مدیریت میکنند. بنابراین مانیتور Vitastor جزء مهمی از سیستم نیست و بیشتر شبیه به مدیر Ceph است. Vitastor's Monitor در node.js پیاده سازی شده است.
- PG distribution بر اساس هش ثابت نیست. همه نگاشتهای PG در etcd ذخیره میشوند. تعادل مجدد PGها بین OSDها با بهینه سازی ریاضی انجام می شود - مسئله توزیع داده ها به یک مسئله برنامه ریزی خطی کاهش می یابد و با lp_solve حل می شود. این امکان تقریبا کامل (96-99٪ یکنواختی در مقایسه با 80-90٪) توزیع داده Ceph را فراهم می کند، توانایی نقشه برداری PG با دست بدون ایجاد تعادل مجدد منطقی، کاهش ارتباطات OSD نظیر به نظیر (به طور متوسط OSD ها دارای همتایان کمتر) و حرکت داده کمتر. احتمالا یک اشکال نیز دارد - این روش ممکن است در کلاسترهای بسیار بزرگ شکست بخورد، اما تا چند صد OSD کاملا خوب است. همچنین افزودن هشهای ثابت در آینده اگر چیزی ضرورت آنها را ثابت کند، آسان است.
- هیچ لایه CRUSH جداگانه ای وجود ندارد. شما طرح افزونگی استخر، ریشه قرارگیری، دامنه شکست و غیره را مستقیم در پیکربندی استخر انتخاب میکنید.
مقایسه Vitastor با Ceph:
پیچیدگی نصب و مدیریت:
Ceph یک سیستم ذخیرهسازی توزیعشده قدرتمند و با ویژگیهای گسترده است که قابلیت استفاده در انواع مختلف زیرساختهای ذخیرهسازی (object, block, file storage) را دارد. با این حال، پیادهسازی و مدیریت Ceph پیچیدهتر است و به تجربه و تخصص نیاز دارد.
Vitastor به طور خاص برای کاهش پیچیدگی نصب و مدیریت طراحی شده است. این سیستم نیاز به تنظیمات کمتری دارد و در مقایسه با Ceph نصب آن آسانتر است.
- Ceph به دلیل معماری چند منظورهاش، عملکرد خوبی در محیطهای گسترده دارد اما تاخیر آن به نسبت بالاست، به ویژه در کاربردهایی که نیاز به IOPS بالا دارند.
- Vitastor به طور خاص برای کاربردهای کمتاخیر طراحی شده و تاخیر کمتری نسبت به Ceph ارائه میدهد. این سیستم بیشتر برای محیطهایی که نیاز به سرعت بالا و تاخیر کم دارند مناسب است.
پشتیبانی از سیستمهای مختلف ذخیرهسازی:
- Ceph از چندین نوع ذخیرهسازی مانند block storage، object storage و file storage پشتیبانی میکند. این یکی از ویژگیهای اصلی و جذاب Ceph است.
- Vitastor بهطور خاص بر روی block storage تمرکز دارد و برای کاربردهای مربوط به I/O شدید بهینهسازی شده است. بنابراین، اگر نیاز به یک سیستم ذخیرهسازی چندمنظوره دارید، Ceph گزینه بهتری است.
تاخیر و کارایی در مقیاسهای بزرگ:
- در مقیاسهای بزرگ، Ceph میتواند عملکرد خوبی داشته باشد اما تاخیر بالا و سربار مدیریتی آن ممکن است در برخی کاربردها مشکلساز شود.
- Vitastor برای محیطهایی که تاخیر پایین اولویت دارد مناسبتر است و حتی در مقیاسهای بزرگ نیز عملکرد قابل قبولی را ارائه میدهد.
معماری و مدیریت دادهها:
- Ceph از معماری CRUSH استفاده میکند که یک الگوریتم پیچیده برای توزیع دادهها و مدیریت افزونگی است. این الگوریتم انعطافپذیری بالایی دارد اما ممکن است سربار مدیریتی ایجاد کند.
- Vitastor از روشهای سادهتری مانند کدگذاری XOR استفاده میکند که سربار کمتری دارد و به کاهش تاخیر کمک میکند.
خرید سرور مجازی در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
نتیجهگیری:
اگر به یک سیستم ذخیرهسازی گسترده و چندمنظوره نیاز دارید که بتواند هم object storage، هم block storage و هم file storage را مدیریت کند، Ceph یک گزینه قدرتمند و محبوب است.
اگر نیاز اصلی شما به block storage با تاخیر پایین و نصب ساده است، Vitastor انتخاب بهتری خواهد بود. همچنین برای محیطهایی که به سرعت بالا (مانند دیتابیسها یا مجازیسازی) نیاز دارند، این سیستم مناسبتر است.