مقدمه‌ای بر Min.io: یک Object Storage قدرتمند

با توجه به افزایش سالانه‌ی حجم فایل‌های تحت مدیریت شرکت‌ها، نرم‌افزارها و وب‌سایت‌ها، این روزها مدیریت فایل‌‌ بخش جدایی‌ناپذیری از چالش‌های پروژه‌های نرم‌افزاری شده است. با افزایش تنوع فایل‌ها و بالا رفتن حجم کلی سیستم، مدیریت فایل‌ها به سادگی می‌تواند گلوگاه و پاشنه‌ی آشیل تمام سیستم‌های نرم‌افزاری موجود باشد. در فضای نرم‌افزاری سیستم‌های مدیریت فایل با نام Object Storage شناخته می‌شوند.

برای حل مشکل مدیریت فایل‌ها برخی از شرکت‌ها سراغ گزینه‌های آماده شرکت‌های بزرگ از جمله Amazon S3 یا Azure Blob storage میروند. اما به خاطر مباحث امنیتی، نداشتن کنترل کامل در این سیستم‌ها و ایجاد ساختار هماهنگ در کل پروژه [و یا حتی تحریم در ایران] برخی دیگر از شرکت‌ها یا به تنهایی مسئولیت تهیه و توسعه یک Object Storage داخلی را می‌پذیرند و یا به سراغ نرم‌افزارهای آماده مدیریت فایل موجود در بازار می‌روند. این نرم‌افزارهای قابلیت نصب بر روی سرورهای داخلی سازمان -به صورت on promise- را دارا می‌باشند.

به صورت اختصاصی Min.io برای کار در محیط ابری طراحی شده است
به صورت اختصاصی Min.io برای کار در محیط ابری طراحی شده است


از بهترین Object Storageهای بازار که قابلیت نصب به صورت on-promise را دارا می‌باشند میتوان به Ceph Swift و Min.io اشاره کرد. در ابتدا به مقایسه این سه ابزار با هم می‌پردازیم.

مقایسه Ceph، Swift و Min.io

نرم‌افزار Ceph: توسعه دهنده‌های نرم‌افزار Ceph محصول‌شون رو به صورت "یک نرم‌افزار آزاد برای بستر ذخیره سازی" معرفی می‌کنند. Ceph علاوه بر مدیریت اشیا، امکان مدیریت بلاک‌ها و مدیریت فایل سیستم رو هم داره. به خاطر این موضوع Ceph میتونه در دسته‌ی File Storage ها هم قرار بگیره. DigitalOcean و Runtastic از جمله مشتریان نرم‌افزار Ceph هستند. این نرم‌افزار تحت لیسانس LGPL 2.1 به بازار عرضه شده.

نرم‌افزار Openstack Swift: پروژه object storage شرکت Openstack با نام Swift شناخته میشه. Swift رو میشه یک object/blob store با دسترس‌پذیری بالا و توزیع شده دونست. این نرم‌افزار با اهمیت دادن به دسترس‌پذیری بالا از تکنیک در نهایت سازگار -eventually consistent- استفاده میکنه. شرکت‌های Vimtastic و Datto از جمله مشتریان Swift هستند. Swift برای ذخیره‌سازی داده‌های غیرساخت‌یافته با رشد و دسترسی‌پذیری بالا مناسبه.

نرم‌افزار Min.io: به عنوان اصلی‌ترین جایگزین متن باز Amazon S3 شناخته میشه. این نرم‌افزار برای داشتن کارایی بالا با زبان Go نوشته شده و تحت لیسانس Apache 2.0 عرضه شده. همچنین APIهای دسترسی به Min.io برای تطبیق بیشتر مبتنی بر استاندارد Amazon S3 تهیه و تولید شده. این نرم‌افزار بیشتر 21 هزار ستاره در گیت‌هاب دریافت کرده و همچنین نسخه‌ی داکری اون بیشتر از 355 میلیون بار Pull شده. این نرم‌افزار در دسته‌ی Cloud Storage ها قرار داره. کدهای Min.io رو می‌تونید در این آدرس مشاهده کنید. کمپانی‌هایی مثل Github، AgFlow و codebeat از جمله مشتریان Min.io هستند. در اصل به گفته‌ی سایت اصلی شرکت بیش از نیمی از 500 شرکت برتر آمریکا از نرم‌افزار Min.io استفاده میکنند. از دیگر قابلیت‌های Min.io قابلیت اتصال به نرم‌افزارها و سیستم‌های متنوع دیگه‌ای مانند آپاچی کافکا، پرومتئوس، آپاچی فلینک، آپاچی اسپارک می‌باشد. لیست طولانی تمامی این نرم‌افزارها رو می‌تونید در این آدرس مشاهده کنید.

بین این سه گزینه Ceph و Swift برای مدیریت دیتاسنترهای یک شرکت خدمات‌دهنده‌ی ابری استفاده می‌شوند در حالی که هدف Min.io جایگزینی برای خدمات Amazon S3 می‌باشد. به همین دلیل شرکت DigitalOcean از Ceph و شرکت گیت‌هاب از Min.io استفاده می‌کند. در مجموع برای مدیریت فایل‌های یک شرکت نرم‌افزار Min.io گزینه‌ی مناسب‌تری می‌باشد.


ویژگی‌های Min.io

  • پیاده‌سازی شده با زبان Go
  • مبتنی بر Cloud و داشتن هماهنگی کامل با داکر و Kubernetes
  • قابلیت خواندن دیتا با سرعت بیش از 180 گیگابایت بر ثانیه و نوشتن دیتا با سرعت بیش از 170 گیگابایت بر ثانیه
  • کاملا و به صورت صد در صد Open Source
  • داشتن API های مبتنی بر استاندارد S3 آمازون
  • داشتن SDK های متنوع برای زبان‌های گوناگون از جمله جاوا اسکریپت، سی شارپ، پایتون، جاوا، ...
  • جلوگیری از دست رفتن دیتا با استفاده از highwayhash
  • پشتیبانی از رمزنگاری فایل‌ها با استفاده از الگوریتم‌های متنوع از جمله AES-256-GCM، ChaCha20-Poly1305، AES-CBC
  • پشتیبانی از رمزنگاری با کلید متفاوت به ازای هر فایل و استفاده از Master key برای دسترسی به کلیدها
  • قابلیت احراز هویت با استفاده از سیستم‌های مبتنی بر OpenID
  • قابلیت ایجاد Replication های همزمان و پیوسته
  • قابلیت اجرا در بسترهای متفاوت و ایجاد یک مدیریت یکپارچه
  • پشتیبانی از معماری چند مستاجری


دلایل استفاده از Min.ioبه جای پیاده‌سازی سیستم مدیریت فایل

چه در سطح ملی و چه در سطح شرکت‌ها و افراد همیشه میل زیادی به پیاده‌سازی نرم‌افزارها و سیستم‌ها به صورت بومی و شخصی بوده است. در سطح ملی پروژه‌هایی مانند سیستم‌عامل‌ ملی، موتور جستجوی ‌ملی، زبان‌برنامه‌نویسی ملی چند نمونه از ده‌ها پروژه‌ی شکست خورده در این زمینه هستند. در سطح شرکت‌ها نیز بارها شاید پیاده‌سازی ORM بومی و جایگزینی برای Entity Framework و همچنین داشتن CMS بومی برای مقابله با Wordpress بوده‌ام.

در اصل منابع انسانی و مالی دولت‌ها و شرکت‌ها محدود و برای هیچکدام پیاده‌سازی تمام نرم‌افزارها به صورت بومی امکان‌پذیر نمی‌باشد. به طور مثال ممکن است که شش ماه اول یک پروژه صرف پیاده‌سازی یک ORM بهینه به نسب ORM های بهینه‌ی موجود در یک شرکت شود اما در انتها زمانی که می‌توانست به توسعه‌ی نرم‌افزار اصلی پرداخته شود، صرف محصولی شده است که معمولا در نهایت کارایی مناسبی به نسبت رقیب خود ندارد. علاوه بر این به طور معمول ابزارها و سیستم‌ها توسط تیم‌های قدرتمند و به طور دائمی در حال توسعه هستند و بعد از مدتی فاصله‌ی بین ابزار پیاده شده و ابزار دنیا بیرون بیشتر و بیشتر می‌شود. به طور مثال سیستم مدیریت فایل Min.io ده‌ها قابلیت متفاوت و کارگشا دارد که پیاده‌سازی هر کدام مدت‌های طولانی برای یک شرکت زمان و هزینه می‌برد. در حال حاضر برای توسعه‌ی کدهای این پروژه بیش از 200 نفر نقش داشته‌اند و بیش از 6 هزار بار بر روی این پروژه commit صورت گرفته است.

از طرف دیگر شرکت‌ها دغدغه‌‌ی کنترل بیشتر ابزارهای مورد استفاده را دارند و از طرف دیگر نگران عدم توسعه‌ی نرم‌افزار آماده از طرف شرکت اصلی هستند. برای حل مشکل انتخاب نرم‌افزارهای آزاد یک تصمیم منطقی به نظر می‌رسد. به طور مثال پروژه‌ی Min.io بیشتر از 2 هزار بار در گیت‌هاب Fork گرفته شده است و تیم‌های متفاوتی با توجه به نیاز خود اقدام به توسعه و بروزرسانی این نرم‌افزار در مسیر متفاوتی از نرم‌افزار اصلی کرده‌اند. Slack این پروژه نیز برای عموم در دسترس است و می‌توان از سمت و سوی آینده پروژه با خبر شد و در جریان کامل فرآیند توسعه‌ی این ابزار قرار گرفت.


گستره‌ی کاربرد

نرم‌افزار Min.io سریع‌ترین رشد را در مارکت Object Storage ها در دنیا دارد و به طور روز افرون مورد استفاده‌ی شرکت‌های بیشتری قرار میگیرد.

پوشش سراسری استفاده از Min.io
پوشش سراسری استفاده از Min.io


برای شروع کار با Min.io می‌تونید به این آدرس مراجعه کنید.