مقایسه Object Storage با Block Storage

مقدمه
ذخیره قابل انعطاف و قابل توسعۀ دیتا یک نیاز ضروری برای بیشتر کاربردها و سرویس هایی است که با تکنیک ها و ابزارهای مدرن توسعه می یابند.

 

Object Storage vs Block Storage Services

ذخیره مقدار کم یا زیاد تصویر، ویدئو یا متن نیاز به این دارد که برنامه نویس راهکاری برای ذخیره و بازیابی محتوا، لاگ ها و Backupهایی که توسط کاربر تولید شده اند، بیابد.
امروزه با پیاده سازی ها و Containerهای پیچیده و زیرساخت های کوتاه مدت، دیگر زمان آن گذشته است که فایل را فقط بر روی یک سرور ذخیره کنیم.
ارائه دهندگان سرویس کلود، برای تامین نیازهای نوین ذخیره سازی در پیاده سازی نرم افزارها، تدابیری اندیشیده اند.
این راهکارها معمولا به دو دسته تقسیم می شوند: Object Storage و Block Storage.

بیایید درباره هر دو مورد بحث کرده و مزایا و معایب و موارد استفاده هر یک از آنها را بیان کنیم.

Block Storage چیست؟
سرویس های Block Storage نسبتا ساده و آشنا هستند. این سرویس ها یک دستگاه Block Storage مثل هارد درایو بر روی شبکه ارائه می کنند. ارائه دهندگان کلود معمولا محصولاتی دارند که دستگاه های Block Storage در حجم های مختلف در آن ارائه می شود و می توانید آن را به ماشین مجازی خود متصل کنید.
از طریق این ماشین مجازی شما می توانید با این دیسک به صورت یک دیسک معمولی رفتار کنید. می توانید آن را با یک فایل‌سیستم فرمت کرده و فایل ها را بر روی آن ذخیره کنید، چند دستگاه را به صورت یک آرایه RAID درآورید یا دستگاه را طوری پیکربندی کنید که مستقیما بر روی دستگاهِ Block بنویسید و از Overhead مربوط به فایل سیستم خلاص شوید. به علاوه، دستگاه های Block Storage متصل به شبکه معمولا مزایای منحصربه فردی نسبت به هارد درایوهای معمولی دارند:
• می توانید Snapshotهای زنده از کل دستگاه بگیرید تا برای Backup از آن استفاده کنید.
• دستگاه های Block Storage را می توان تغییر حجم داد تا با نیازهای متغیر با حجم منطبق باشند.
• به راحتی می توانید دستگاه های Block Storage را جدا کرده و بین ماشین های مجازی انتقال دهید.
این ابزار قابلیت انعطاف زیادی داشته و می توان آن را تقریبا برای هر کاربردی استفاده کرد.
برخی مزایا و معایب این فناوری:
برخی مزایای Block Storage عبارتند از:
• Block Storage نمونه آشنایی برای ماست. کاربران با فایل ها و فایل سیستم ها از قبل آشنایی دارند و نرم افزارها نیز آنها را می شناسند و از آنها پشتیبانی میکنند.
• دستگاه های Block Storage به خوبی پشتیبانی می شوند. هر زبان برنامه نویسی به راحتی می تواند بر روی آنها فایل بنویسد و بخواند.
• با Permissionهای فایل‌سیستم و کنترل دسترسی کاملا آشنایی داریم.
• دستگاه های Block Storage تاخیر بسیار کمی در ورودی و خروجی دارند و در نتیجه می توان از آنها در Database استفاده کرد.
برخی معایب Block Storage عبارتند از:
• هر Storage در هر زمانی فقط به یک سرور مرتبط است.
• Blockها و فایل‌سیستم ها فرادادۀ کمی در مورد اطلاعاتی که ذخیره می کنند دارند (زمان ایجاد، مالک، حجم). هر اطلاعات دیگری در مورد چیزی که ذخیره میکنید، باید در سطح نرم افزار یا Database انجام شود و این یعنی پیچیدگی کار برای برنامه نویس بیشتر می شود.
• باید تمام فضای Block Storage را که تخصیص داده اید در نظر بگیرید، حتی اگر از آن استفاده نمی کنید.
• فقط از طریق یک سرور روشن می توانید به Block Storage دسترسی یابید.
• Block Storage نسبت به Object Storage نیاز به کارهای دستی بیشتری دارد (انتخاب فایل سیستم، Permissionها، Backup ،Versioningها و …)
چون سرعت IO در سرویس های Block Storage بالاست، برای ذخیره دیتا در Databaseهای معمولی مناسب هستند. به علاوه، بسیاری از نرم افزارهای قدیمی که نیاز به ذخیره معمولی دارند باید با Block Storage به کار گرفته شوند.
اگر ارائه دهنده کلود شما سرویس Block Storage ارائه نمی دهد، می توانید با استفاده از Ceph ،OpenStack Cinder یا یک سرویس داخلی iSCSI که بر روی بسیاری از دستگاه های NAS در دسترس است سرویس Block Storage خود را راه اندازی کنید.

Object Storage چیست؟
در دنیای نوین رایانش ابری، Object Storage در واقع ذخیره دیتا و متادیتای ساختارنایافته (Unstructured) با استفاده از یک HTTP API است. به جای آن که فایل ها را به بلاک های مختلف تقسیم کنیم تا آن را با استفاده از فایل سیستم روی دیسک ذخیره کنیم، با Objectهای کاملی سر و کار داریم که بر روی شبکه ذخیره شده اند. این Object می تواند یک فایل تصویری، لاگ، فایل HTML، یا مجموعه ای از دیتای Self-Contained باشد (وابسته به دیتای دیگری نباشد). آنها Unstructured هستند چون نیاز ندارند از طرح خاص یا فرمت خاصی پیروی کنند.
Object Storage از این نظر برتری دارد که کار برنامه نویسان را ساده کرده است. چون API دارای HTTP Requestهای استاندارد است، کتابخانه های آن خیلی سریع برای بیشتر زبان های برنامه نویسی ایجاد شد. ذخیره دیتا در آن به آسانیِ HTTP PUT Request به Object Store است. بازیابی فایل و فراداده، یک GET Request عادی است. به علاوه، بیشتر سرویس های Object Storage می توانند فایل ها را به طور عمومی در دسترس کاربران قرار دهند و نیازی به وب سرور برای هاستینگ دیتای استاتیک ندارند.
از همه مهم تر این که هزینه سرویس های Object Storage فقط شامل آن مقدار فضایی می شود که استفاده می شود (برخی از آنها برای HTTP Request نیز هزینه ای دریافت می کنند و همچنین برای پهنای باند انتقال). این برای کسانی که در مقیاس کوچک برنامه‌نویسی می کنند، نقطه مثبت بزرگی به شمار می رود و می توانند ذخیره سازی با استانداردهای جهانی داشته باشند و هاستی داشته باشند که هزینه آن با استفاده آنها مطابقت دارد.
این را هم باید در نظر داشت که Object Storage برای همه کاربردها مناسب نیست. بیایید نگاهی به مزایا و معایب آن بیندازیم.
برخی مزایای Object Storage:
• یک HTTP API ساده با کلاینت هایی که برای بیشتر سیستم عامل ها و زبان های برنامه نویسی در دسترسند.
• فقط برای مقدار فضایی که از آن استفاده می کنید هزینه می کنید و نه بیشتر.
• سرویس‌دهی عمومی داخلی به این معنی است که می توانید سرورهای کمتری داشته باشید.
• برخی Object Storageها، CDN داخلی هم ارائه می دهند که ترافیک شما را در سراسر دنیا توزیع می کند تا دانلودها و لود صفحات وب را برای کاربران تسریع کند.
• با Versioning اختیاری می توانید نسخه های قدیمی Objectها را بازیابی کنید تا Overwriteهای تصادفی مشکلی برای شما ایجاد نکنند.
• می توانید سرویس های Object Storage را به راحتی از مصارف معمولی به مصارف بسیار بزرگ مقیاس‌دهی کنید و توسعه دهید بدون این که مجبور باشید منابع بیشتری را به کار گرفته یا معماری سیستم را تغییر دهید.
• با استفاده از سرویس Object Storage دیگر نیازی به نگهداری هارد درایو ها و RAIDها ندارید، چون ارائه دهنده سرویس همه این کارها را انجام می دهد.
• می توانید تکه هایی از فراداده را در کنار داده های خود ذخیره کنید و در نتیجه معماری نرم افزار نیز ساده تر می شود.
برخی معایب Object Storage:
• نمی توانید از Object Storage برای Backup گرفتن از یک Database متداول استفاده کنید چون این سرویس تاخیر زیادی دارد.
• در Object Storage این امکان وجود ندارد که فقط بخشی از دیتا را تغییر دهید. باید کل یک Object را بارها بخوانید یا بنویسید. واضح است که این مساله بر روی کارایی تاثیر می گذارد. مثلا بر روی فایل سیستم به راحتی می توانید یک تک خط در انتهای یک لاگ اضافه کنید. در یک سیستم Object Storage باید Object را بازیابی کنید، خط جدیدی اضافه کنید و سپس کل Object را بنویسید. این مساله باعث می شود که Object Storage برای دیتایی که به تعداد دفعات زیادی تغییر می کند گزینه مناسبی نباشد.
• سیستم عامل نمی تواند با Object Store به صورت یک دیسک معمولی رفتار کند. ابزارهای واسطی وجود دارند که این مشکل را حل می کنند، ولی به طور کلی استفاده از Object Store و رفتن در فولدرهای مختلف بر روی یک File Browser نیست.
به دلیل این ویژگی ها، Object Storage بیشتر مناسب هاستینگ دیتای استاتیک است و همچنین ذخیره محتوای تولید شده توسط کاربر مثل تصویر و فیلم، ذخیره فایل های Backup و لاگ ها.
برخی راهکارهای Object Storage وجود دارد که Self-Hosted هستند و در نتیجه دیگر نیازی به انجام برخی کارهای هاستینگ ندارید (مثلا نیاز نیست نگران هارد درایوها یا Scale کردن باشید). می توانید Minio را امتحان کنید که یک سرور Object Storage است که به زبان Go نوشته شده است یا Ceph یا OpenStack Swift را امتحان کنید.
نتیجه گیری
انتخاب راهکاری برای ذخیره سازی می تواند انتخاب سختی باشد. در این مقاله در مورد مزایا و معایب Object Storage و Block Storage بحث کردیم. احتمالا کاربردهای پیچیده به هر دو نوع ذخیره سازی نیاز دارند تا تمام نیازها را پوشش دهند.

*منبع

برچسب ها: Object Storage, Overhead, OpenStack, HTTP API, Block Storage, RAID, iSCSI, Backup, Snapshot, ذخیره سازی