محمد علی پور
محمد علی پور
خواندن ۳ دقیقه·۳ ماه پیش

انجیر معابد / رویکردی مدرن به بازنویسی یک سیستم نرم‌افزاری

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

انجیر معابد

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


شروع یک تغییر با رویکردی به سبک انجیر معابد

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

  1. ادامه کار با سیستم موجود: راهکاری کم‌هزینه در کوتاه‌مدت که معمولاً توسط مدیران پیشنهاد می‌شود.
  2. بازسازی نسخه فعلی: به‌روزرسانی بخش‌های مشکل‌دار برای بهبود عملکرد.
  3. بازنویسی کامل یا تدریجی: ایجاد یک سیستم جدید با معماری و فناوری مدرن.


روش‌های بازنویسی سیستم‌های نرم‌افزاری:

1. بازنویسی تدریجی (Incremental Rewrite)

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

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


2. بازنویسی کامل (Big Bang Rewrite)

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

  • مزایا: آزادی کامل در طراحی و حذف محدودیت‌های قدیمی.
  • معایب: ریسک بالا، هزینه زیاد، و احتمال اختلال در تجربه کاربران.


3. توسعه سیستم موازی (Parallel Systems)

سیستم جدید در کنار سیستم قدیمی توسعه یافته و کاربران به‌تدریج به آن منتقل می‌شوند. Facebook هنگام بازنویسی اپلیکیشن خود از HTML5 به Native از این روش استفاده کرد.

  • مزایا: تأثیر کم بر کاربران و امکان تست بهتر.
  • معایب: نیازمند منابع بیشتر و مدیریت پیچیده.


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

ادامه دارد ...

refactoring
Software Engineer
شاید از این پست‌ها خوشتان بیاید