ذخیره مقدار کم یا زیاد تصویر، ویدئو یا متن نیاز به این دارد که برنامه نویس راهکاری برای ذخیره و بازیابی محتوا، لاگها و 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 بحث کردیم. احتمالا کاربردهای پیچیده به هر دو نوع ذخیره سازی نیاز دارند تا تمام نیازها را پوشش دهند.