ویرگول
ورودثبت نام
جاوید مومنی
جاوید مومنیذره‌ای از باده‌های آسمان...
جاوید مومنی
جاوید مومنی
خواندن ۲ دقیقه·۱۰ روز پیش

احمقانه‌ترین کار تاریخ برنامه‌نویسی

وقتی اینترنت کاملاً قطع شد و ما مجبور شدیم pub.dev خودمان را بسازیم، با کپی از پوشه .pub-cache !

داکر در بیابان نعمت است !
داکر در بیابان نعمت است !

قطع اینترنت معمولاً به معنای کند شدن کار است، نه توقف کامل آن. اما این‌بار مسئله چیز دیگری بود. اینترنت نه فیلتر شد، نه ناپایدار شد؛ کاملاً قطع شد. هیچ VPNای وصل نمی‌شد و هیچ مسیر جایگزینی هم وجود نداشت. در چنین وضعیتی، توسعه‌ی Flutter به‌طور کامل متوقف شد، چون اکوسیستم آن بدون دسترسی به pub.dev عملاً کار نمی‌کند. اجرای ساده‌ی flutter pub get انجام نمی‌شد و حتی پروژه‌هایی که ماه‌ها بدون تغییر مانده بودند، دیگر قابل build نبودند. مسئله از جنس اختلال نبود؛ از جنس انسداد کامل بود.


راه‌حل‌های معمول جواب ندادند

در شرایط عادی، توسعه‌دهندگان با VPN یا کش‌های محلی این مشکل را دور می‌زنند، اما وقتی دسترسی خارجی به‌طور کامل صفر است، این راه‌حل‌ها بیشتر شبیه مُسکن عمل می‌کنند. نگه داشتن کش روی سیستم هر توسعه‌دهنده، نه هماهنگی تیم را تضمین می‌کند و نه CI/CD را نجات می‌دهد. هر سیستم وضعیت خودش را دارد و کوچک‌ترین تغییر در وابستگی‌ها می‌تواند کل پروژه را نابود کند. در این نقطه، تیم توسعه به یک منبع مرکزی، پایدار و داخلی نیاز داشت؛ چیزی که وجود نداشت و باید ساخته می‌شد.

تصمیم غیرمنطقی اما عملی

اینجا بود که تصمیمی گرفته شد که روی کاغذ احمقانه به نظر می‌رسد: ساختن یک میرور داخلی برای پکیج‌های Flutter. نه برای بازسازی کامل pub.dev و نه برای ارائه‌ی یک راه‌حل استاندارد، بلکه صرفاً برای ادامه‌ی کار.
منبع این میرور اینترنت نبود، بلکه کش‌ها بودند؛ کش پکیج‌ها روی سیستم‌های توسعه‌دهندگان، کش ایمیج‌های Docker که قبلاً pull شده بودند، و سرویس‌های قدیمی و رهاشده‌ی pub mirror که سال‌ها توسعه نیافته بودند. این سرویس‌ها بازنویسی و ساده‌سازی شدند و از روی همان کش‌های Docker، روی سرور داخلی بالا آمدند تا فقط یک کار انجام دهند: سرو کردن پکیج‌ها.

جمع‌بندی، قضاوت و نتیجه

Docker امکان اجرای کامل این سیستم بدون وابستگی خارجی را فراهم کرد و GitLab داخلی که همروش به نام Hamgit راه اندازی کرده، به نقطه‌ی مرکزی نگهداری و تکرارپذیری تبدیل شد. در این مسیر، وجود میرورهای عمومی داخل کشور نقش حیاتی داشت و لازم است از همروش (Hamravesh) و همچنین HamGit تشکر شود که با عمومی‌کردن زیرساخت‌ها و میرورهای مرتبط با Docker و GitLab، امکان اجرای چنین راه‌حل‌هایی را در شرایط بسته فراهم کرده‌اند.

این کار نه ایده‌آل است و نه قابل توصیه به‌عنوان الگو؛ بدهی فنی ایجاد می‌کند و نیازمند نگهداری است.

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

flutterفلاترگیتهم‌روش
۰
۱
جاوید مومنی
جاوید مومنی
ذره‌ای از باده‌های آسمان...
شاید از این پست‌ها خوشتان بیاید