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

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