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

چرخه عمر برنامه‌ها چیست؟

یک برنامه از زمان شکل‌گیری تا اجرا  از مراحل مشخصی عبور می‌کنه:

زمان ویرایش کردن یا edit time: زمانی که سورس کد برنامه در حال ویرایشه؛ یعنی هر گونه مشکلی رفع شده یا اصلاح مجدد میشه یا ممکنه ویژگی های جدیدی بهش اضافه بشه.

زمان کامپایل کردن یا compile time: زمانی‌که برنامه نوشته شده به زبان سطح بالا، توسط کامپایلر به زبان ماشین ترجمه می‌شه.  

زمان اتصال یا link شدن یا link time: زمانی‌که بخش‌های مختلف برنامه به برنامه‌ی اصلی متصل می‌شن و از کتابخونه‌های خارجی که برای این منظور پیاده‌سازی شدن استفاده می‌شه. دو نوع روش اتصال وجود داره:

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

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

زمان نصب یا installation time:‌ برنامه‌ی منتشر‌شده برای نصب بر روی رایانه‌ی کاربر آماده می‌شه.  

زمان بارگذاری یا load time:‌ زمانی که برای اجرای برنامه از حافظه یا فضای ذخیره‌سازی مثل هارد طول می‌کشه و این برنامه و اجزای اون در حافظه‌ی فعال یا ram به طور موقت ذخیره می‌شه تا برای پردازش در دسترس cpu قرار بگیره. 

زمان اجرا یا run time: زمانی که cpu یا واحد پردازشگر مرکزی داده‌های دستوری رو از ram‌ دریافت، کدگشایی، پردازش و اجرا می‌کنه. 

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

فایل Config 

همونطور که گفتیم توی این پست قراره با چرخه‌ی عمر برنامه‌ها در سکو آشنا بشیم. یعنی یک برنامه از چه state‌هایی تشکیل شده و در هر state چه اتفاق‌هایی رخ می‌ده.  

اما قبل این‌که چرخه عمر برنامه‌ها رو تو سکو بررسی کنیم باید ببینیم که فایل کانفیگ (config) چیه و چه کاری انجام می‌ده؟

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

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

چرخه‌ی عمر برنامه‌ ها در سکو

برنامه‌ها تو سکو از چرخه عمر ساده‌‌ای پیروی می‌کنن و این چرخه به طور اساسی از چهار وضعیت زیر تشکیل می‌شه: 

  • start
  • restart
  • stop
  • remove

هر وضعیت شامل چند مرحله است که در ادامه با هم بررسی می‌کنیم.

1-وضعیت Start

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

ماژول‌ها بخش‌هایی از یک برنامه هستن. در واقع یک یا چند ماژول توسعه یافته‌‌ی مستقل، برنامه‌های مختلف رو تشکیل می‌دن و در صورتی که به برنامه متصل بشن می‌تونن عملیات مختلفی رو انجام بدن. 

بعد از ایجاد ماژول، برنامه ایجاد می‌شه و با اتصال برنامه به ماژول‌ها، برنامه در حالت run قرار می‌گیره.    

2- وضعیت Restart  

برنامه‌ای که run شده، می‌تونه ری‌استارت بشه. اگه شما تغییری در برنامه‌تون داده باشین اون تغییرات بعد از ری‌ستارت در دسترس‌تون قرار ندارن و از بین می‌رن. البته برای این‌که به داده‌ها و تغییرات قبلی که در برنامه ایجاد شده دسترسی داشته باشین امکانی وجود داره به نام پشتیبان برنامه یا commit. 

می‌تونین از برنامه‌ی در حال اجرا commit بگیرین تا در هر لحظه، تغییرات در نمونه‌ی جدیدی ذخیره بشن. 

در شروع فرآیند ری‌استارت، اگر commitای وجود داشته باشه، باید کانفیگِ آپدیت شده، خونده بشه.

در مرحله‌بعدیِ این فرآیند، instance جدیدی از برنامه ساخته می‌شه و مشابه وضعیت استارت با اتصال برنامه به ماژول‌ها، برنامه می‌تونه در حالت run قرار بگیره. 

3- وضعیتStop 

برای توقف اجرای برنامه، سیگنال توقف به برنامه‌ای که تو حالت ready‌ قرار داره، فرستاده می‌شه. در نتیجه instance فعلی از این برنامه که در حال اجراست، حذف می‌شه و برنامه‌ای که توی سیستم ما در حال اجرا بوده، به وضعیت stop‌ منتقل میشه.

 البته زمانی که اجرای برنامه متوقف میشه، اتصال ماژول‌ها به برنامه هنوز برقراره و از بین نمیره. 

4- وضعیت Remove 

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

سر ماژول‌ها چه بلایی میاد؟

 ماژول‌های یک برنامه در واقع از سه نوع ماژول پایگاه داده (data base)، پروکسی (proxy) یا فضای ذخیره سازی (storage) تشکیل شدن.

بعد از این‌که کاربر برنامه رو remove کرد، این ماژول‌ها وجود دارن و از بین نمی‌رن تا زمانی‌که شارژ حساب کاربر کم می‌شه و به صفر می‌رسه. 

قاعدتا زمانی‌که شارژ حساب کاربر به صفر می‌رسه، باید ماژول‌ها رو متوقف‌کنیم و از بین ببریم. یعنی اگه ماژول پایگاه‌داده، proxy و ‌storage‌ای داشته، اون‌ها رو پاک کنیم؛ اما چون انجام این‌کار خطرناکه و ممکنه به هر دلیلی کاربر فرصت نکرده حساب‌شو شارژ کنه،  به اندازه‌ی x روز که lastcall اون ماژول میشه، به کاربر فرصت می‌دیم و اجازه می‌دیم ماژولا سرجاشون باقی بمونن.  

lastcall ‌یک پیش‌فرض داره اما ممکنه برای هر کاربر متفاوت باشه. مثلا ۱۴ روز به کاربر فرصت می‌دیم که داده‌ها و اطلاعاتش رو برداره و ماژول‌هاشو پاک کنه.حالا تو این ۱۴ روز یا داده‌هاش رو برمی‌داره یا این‌که حساب‌ خودش رو مجددا شارژ می‌کنه که دوباره وضعیت عادی میشه ولی اگه این‌کار انجام نشه ماژول‌های برنامه هم پاک می‌شن.     

در آخر:

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