بارگذاری فایل های حجیم

چگونه می توانیم زمانی که فایل های بزرگ را در سرویس ذخیره سازی شیء مانند S3 بارگذاری می کنیم، عملکرد را بهینه کنیم؟

قبل از پاسخ به این سوال، بیایید ببینیم چرا نیاز داریم این فرآیند را بهینه کنیم. برخی از فایل ها ممکن است بزرگتر از چند گیگابایت باشند. امکان بارگذاری مستقیم چنین شیء بزرگی وجود دارد، اما ممکن است زمان زیادی طول بکشد. اگر در میانه بارگذاری، اتصال شبکه قطع شود، باید از ابتدا شروع کنیم. راه حل بهتری این است که شیء بزرگ را به قطعات کوچکتر تقسیم کنیم و آنها را به صورت مستقل بارگذاری کنیم. پس از بارگذاری تمام قطعات، ذخیره‌گاه شیء(object store) تمامی اشیاء(objects) را دوباره جمع می کند. این فرآیند بارگذاری چندبخشی(multipart upload) نامیده می شود

نمودار زیر نشان می دهد که بارگذاری چندبخشی چگونه کار می کند:


  1. کلاینت با object storage ارتباط می گیرد تا یک بارگذاری چندبخشی را آغاز کند.
  2. ذخیره‌گاه داده یک uploadID بازمی گرداند که بارگذاری را به طور منحصر به فرد شناسایی می کند.
  3. کلاینت فایل بزرگ را به شیءهای کوچکتر تقسیم می کند و شروع به بارگذاری می کند. فرض کنید اندازه فایل 1.6 گیگابایت است و کلاینت آن را به 8 قسمت تقسیم می کند، بنابراین هر قسمت 200 مگابایت است. کلاینت قسمت اول را همراه با uploadID دریافتی در مرحله 2 به ذخیره‌گاه داده بارگذاری می کند.
  4. هنگامی که یک قسمت بارگذاری می شود، ذخیره‌گاه داده یک ETag بازمی گرداند که در واقع md5 checksum آن قسمت است. این برای تأیید بارگذاری های چندبخشی استفاده می شود.
  5. پس از بارگذاری تمام قطعات، کلاینت یک درخواست تکمیل بارگذاری چندبخشی را ارسال می کند که شامل uploadID، شماره قطعات و ETag ها می باشد.
  6. ذخیره‌گاه داده object را از قطعات آن بر اساس شماره قطعه دوباره جمع می کند. از آنجایی که object واقعاً بزرگ است، این فرآیند ممکن است چند دقیقه طول بکشد. پس از تکمیل جمع آوری، یک پیام موفقیت را به کلاینت باز می گرداند.