"Ctrl+S" همیشه یکی از مهمترین کارهایی بود که باید موقع کدزنی یادمون می‌موند که انجام بدیم. چون اگر یادمون می‌رفت و یهو برنامه به هر دلیلی بسته می‌شد، تمام زحماتمون به باد می‌رفت.

حالا بیاین یه‌ذره سطح کار رو بیاریم بالا و مقیاس برنامه رو بزرگتر کنیم. شما برای توسعه‌ی برنامه‌تون روی محیط‌هایی مثل کانتینرها، نیاز دارین، یه‌جوری از داده‌هاتون محافظت کنین که اگر یه موقع به هر دلیلی اون برنامه بسته شد، تمام زحماتتون از بین نره.

به صورت پیش‌فرض، برنامه وقتی روی یک کانتینر در حال توسعه است، اگر به هر دلیلی Re-Start بشه، تمام داده‌هاش از بین می‌ره. مگر اینکه از اون‌ها Back-up گرفته شده باشه!

توی این پست می‌خوایم در مورد پشتیبان (Back-up) گرفتن توی دنیای کانتینری سکو باهاتون صحبت کنیم و به شما بگیم چطور می‌تونین از داده‌ها و برنامه‌هاتون در سکو محافظت و نگه‌داری کنین.

پشتیبان‌گیری در سکو

هر برنامه در سکو داده‌های مختلفی داره که نیاز به نگه‌داری و پشتیبانی دارن. سکو روش‌های مختلفی رو برای نگه‌داری و پشتیبانی از داده‌ها در اختیارتون قرار می‌ده:

۱- ذخیره‌سازی پایدار: در سکو شما می‌تونین داده‌ها و دایرکتوری‌های برنامه‌ی خودتون رو در یک فضای ذخیره‌سازی پایدار نگه‌داری کنین و در صورت نیاز از اون‌ها پشتیبان بگیرین.

۲- پشتیبان‌گیری یا Commit برنامه: برای اینکه بتونین تغییراتی که توی برنامتون ایجاد کردین رو حفظ کنین و اون‌ها رو پایدار نگه دارین، می‌تونین از برنامتون Commit بگیرین.

۳- پایگاه‌داده به عنوان یک سرویس: در سکو به راحتی می‌تونین داده‌های برنامتون رو توی پایگاه‌داده Import و یا اون‌ها رو از پایگاه داده Export کنین.

روش‌های مختلف پشتیبان‌گیری

در ادامه‌ی این پست با ما همراه باشین تا هر کدوم از این روش‌ها رو به طور مفصل بررسی کنیم و توضیح بدیم که توی سکو چه‌جوری می‌تونین برای پشتیبان‌گیری ازشون استفاده کنین.

1- ذخیره‌سازی پایدار یا Persistent Volume

کانتینر‌ها نیاز به یک فضای ذخیره‌سازی پایدار دارن تا بتونن از اطلاعات و داده‌ها در طول چرخه‌ی عمر یک برنامه محافظت کنن. 

به همین دلیل، سکو قسمتی از برنامه‌ی شما رو به عنوان فضای ذخیره‌سازی یا Storage as a Service در نظر می‌گیره که این فضا Volume می‌شه. یعنی اطلاعات موجود توی این فضا به صورت Persist یا پایدار ذخیره میشن و شما می‌تونین از اون داده‌ها در آینده یا توسط بقیه‌ی برنامه‌ها و کانتینرها استفاده کنین.

در واقع وقتی شما برنامه‌ای رو اجرا می‌کنین، این برنامه، داده‌ها و دایرکتوری‌هایی داره که می‌تونین اون‌ها رو توی سکو به صورت پایدار ذخیره‌سازی کنین.

ذخیره‌سازی پایدار در سکو

 مثلا دایرکتوری به نام user/share/nginx/html رو در نظر بگیرین. وقتی یک برنامه‌ی NginX رو بالا میارید، داده‌هایی که می‌خواین توی وب‌سایتتون نمایش داده بشه، تو این دایرکتوری قرار داده می‌شه.

تو سکو می‌تونین این دایرکتوری رو Volume‌ کنین تا داده‌هاش Persist‌ باقی بمونه.

یعنی شما می‌تونین یک Volume داشته باشین و داده‌هاتون رو در اون ذخیره کنین و یا دایرکتوری‌های برنامتون رو بهش متصل کنین. حالا اگر حتی برنامه Re-start بشه هم برای این Volume اتقاقی رخ نمی‌ده و داده‌های شما توی این فضای مجزا نگه‌داری می‌شن. 

اگر دوست دارین اطلاعات بیشتری در مورد داده‌های پایدار داشته باشین، می‌تونین به این پست سکو سر بزنین.

از طرفی می‌تونین از این Volumeها پشتیبان بگیرین؛ به این صورت که هر x ساعتی که خودتون تعیین ‌می‌کنین از این Volume یک فایل زیپ تهیه و در پاد‌اسپیس آپلود و ذخیره می‌شه.

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

2- Commit کردن برنامه

ممکنه برنامه‌ی شما با تهدیدات زیادی مواجه بشه که قابل پیش‌بینی هم نیستن؛ اما در سکو این امکان وجود داره که بتونین در صورت بروز هر اتفاق غیر‌منتظره‌ای با تهیه‌ی نسخه پشتیبان، از داده‌ها و اطلاعاتتون محافظت کنین. 

همونطور که میدونین کانتینرها برای میزبانی از برنامه‌های کاربر استفاده می‌شن.

 داده‌های مرتبط با این برنامه‌ها در سکو به دو بخش دسته‌بندی می‌شن: 

  1.  Container Data: همون‌طور که در بخش قبلی گفتیم این داده‌ها برای این‌که Persist بمونن، در Volume‌ها ذخیره می‌شن.
  1.   ‌Imageها: Imageها در کانتینرها اجرا می‌شن و حاوی اطلاعاتی از بخش‌های مختلف برنامه هستن. اگر برنامه Re-Start بشه، لازمه که از اون‌ها پشتیبان تهیه بشه؛ یعنی وضعیت فعلی اون، Commit و به عنوان Image ذخیره بشه.   
ommit کردن برنامه

چطوری از برنامه بک‌آپ بگیریم؟

اگر برنامه‌ای که در حال اجراست، Re-Start بشه هر تغییری که توی برنامه‌تون داده باشین از بین می‌ره. چون یک نمونه از این برنامه بالاست و با شروع مجدد برنامه، از بین می‌ره و یک نمونه‌ی جدید ساخته می‌شه.

برای این‌که این نمونه جدید هم تغییرات رو داشته باشه، باید از نمونه قبلی پشتیبان بگیریم تا دفعه‌ی بعدی که قراره برنامه دوباره نصب و Run بشه تغییرات روی این نمونه‌ی جدیدمون هم وجود داشته باشه.

در سکو شما می‌تونین با Commit کردن ‌Imageها و دایرکتوری‌هایی که قبلا اون‌ها رو Persist نکردین، ازشون پشتیبان‌گیری کنین.

در نتیجه اگر نیاز به بازیابی داده‌ها یا وضعیت کانتینر داشته باشین، می‌تونین از این نسخه‌های پشتیبان استفاده کنین.  

3- پایگاه‌داده به عنوان سرویس (DBaaS)

با داشتن پایگاه داده به عنوان سرویس، صاحبان برنامه مجبور نیستن، خودشون پایگاه داده رو نصب و نگهداری کنند. در عوض، ارائه‌دهنده‌ی سرویس‌، مسئولیت نصب و نگهداری پایگاه داده رو بر عهده می‌گیره و صاحبان برنامه با توجه به میزان استفاده از این سرویس هزینه پرداخت می‌کنند. 

در سکو هم همین اتفاق میفته و پایگاه‌داده به عنوان یک سرویس به شما ارائه میشه. همچنین از پایگاه‌ داده‌ها نسخه‌ی پشتیبان تهیه می‌شه تا اطمینان حاصل بشه که همیشه داده‌های شما در امنیت کامل هستن و در صورت بروز خرابی این امکان برای شما وجود داره که بتونین از نرم‌افزار، پیکربندی‌ها و پایگاه داده‌ی برنامه‌ی خودتون محافظت کنین.

مثلا وقتی داده‌ای رو از یک یا چند جدول پایگاه‌داده به اشتباه حذف کنین، با داشتن یک نسخه از بانک اطلاعاتی می‌تونین داده‌هاتون رو بازیابی کنین، و بعد داده‌های از دست رفته رو بدون متوقف کردن پایگاه داده اصلی به جایی که می‌خواین منتقل کنین.

پایگاه‌داده به عنوان سرویس

توی این روش، داده‌های برنامه‌ی شما در یک پایگاه‌داده نگه‌داری می‌شن. حالا اگه برنامه‌تون Re-Start یا متوقف بشه می‌تونین دوباره از این پایگاه‌داده بخونین و هر زمانی که خواستین Import/Export کنین.

در آخر

ما سعی کردیم در سکو روش‌های مختلفی رو برای محافظت از برنامه‌ها و داده‌های شما ارائه بدیم. 

شما می‌تونین برای پشتیبان‌گیری، ترکیب‌های مختلفی از این سه روش رو مورد استفاده قرار بدین و با تهیه‌ی نسخه‌ی پشتیبان در صورت بروز خرابی، از نرم‌افزار، پیکربندی یا پایگاه داده‌ی برنامه‌تون محافظت کنین.