05 · پیامرسان داخلی برای زمان قطعی
MRM
وقتی اینترنت قطع شد، ابزاری را ساختم که شرکت برای ادامه کار به آن نیاز داشت.
MRM یک پیامرسان داخلی و خودمیزبان است که همان روزهای قطعی تعریف، طراحی، ساخته و راهاندازی کردم. حدود ۴۰ نفر تا برگشت اینترنت از آن استفاده کردند.

این محصول چرا ساخته شد
داستان پروژه
در روزهای اول جنگ، اینترنت عادی از دسترس خارج شد و ابزارهای ارتباطی شرکت هم دیگر کار نمیکردند. مشکل فقط قطع یک سرویس نبود؛ خود هماهنگی تیم متوقف شده بود.
مسئله اصلی
تیم یک پیامرسان تازه و پر از قابلیت نمیخواست. ابزاری آشنا لازم داشت که سریع روی زیرساخت خود شرکت بالا بیاید و برای اجرا به CDN، سرویس ابری یا دانلود از خارج وابسته نباشد.
برای چه کسانی
کارکنان و مدیرانی که برای ادامه کار به پیام مستقیم و گروهی، فایل، وضعیت حضور و برگشت مطمئن پیام بعد از قطعی نیاز داشتند.
نتیجهای که دنبالش بودم
اگر تیم بتواند در زمان قطعی همچنان با هم هماهنگ بماند، محصول کارش را انجام داده است.
چه چیزی کار را سخت میکرد
دسترسی ناپایدار به اینترنت بینالملل
نمیشد روی package registryها، فایلهای CDN یا پلتفرمهای ابری حساب کرد.
استفاده فوری
فرصتی برای آموزش نبود؛ لازم بود اعضای تیم از همان نگاه اول ابزار را بفهمند و با آن احساس آشنایی کنند.
اتصال مقطعی
قطعووصل کوتاه نباید باعث میشد گفتوگوها از بین بروند یا وضعیت پیامهای خروجی نامعلوم بماند.
راهاندازی ساده
برنامه و دیتابیس باید روی زیرساخت خود شرکت و بدون وابستگی به پلتفرم ابری یا ابزارهای نصبشده از اینترنت اجرا میشدند.
اول چه چیزی را ساختم و چرا
- 1اجراشده
فقط مسیرهای ضروری
پیام مستقیم و گروهی، ارسال فایل، وضعیت تحویل، حضور کاربران و تأیید مدیر را در اولویت گذاشتم و شخصیسازیهای فرعی را کنار گذاشتم.
- 2فعال
حذف وابستگی به سرویسهای خارجی
کتابخانههای مرورگر محلی سرو میشوند، وابستگیهای production همراه پروژهاند و راهانداز میتواند mirror در دسترس Ubuntu را انتخاب کند.
- 3فعال
بازیابی بعد از قطعووصل
IndexedDB گفتوگوها را نگه میدارد، پیامهای خروجی در صف محلی میمانند و بعد از اتصال دوباره همگام میشوند.
- 4اجراشده
راهاندازی برای استفاده واقعی
سیستم را روی زیرساخت داخلی راه انداختم و حدود ۴۰ نفر تا برگشت اینترنت عادی با آن کار کردند.
تصمیمهای اصلی من
استفاده از الگوی آشنای پیامرسانها
رابط را بر اساس الگوی پیامرسانهای آشنا طراحی کردم تا اعضای تیم بدون آموزش بتوانند از آن استفاده کنند.
یک استک ساده و خودمیزبان
Node، Express، Socket.IO، MongoDB، Nginx و systemd باعث شدند اجرای سیستم روی زیرساخت شرکت ساده و قابل بازیابی بماند.
پشتیبانی از قطعووصل کوتاه
کش محلی و صف پیام، قطعووصل کوتاه را پوشش میدهند. ارتباط لحظهای همچنان به یک مسیر در دسترس در شبکه داخلی نیاز دارد.
محدوده استقرار خصوصی
MRM برای زیرساخت داخلی شرکت ساخته شده است. پیش از هر دسترسی عمومی، به بررسی امنیتی مستقل نیاز دارد.
سیستم چطور کار میکند
مرورگر و PWA
کلاینت بدون فریمورک، کتابخانههای محلی، IndexedDB، service worker و اعلان.
شبکه محلی
ارتباط HTTPS و WebSocket از طریق Nginx بدون وابستگی به SaaS عمومی.
برنامه
سرویس Node و Express، REST APIها را ارائه میدهد و Socket.IO رویدادهای لحظهای را مدیریت میکند.
ذخیرهسازی
MongoDB خودمیزبان اطلاعات را نگه میدارد و فایلها و رسانهها در فضای محلی ذخیره میشوند.
عملیات
Systemd، وابستگیهای همراه پروژه، انتخاب mirror و Nginx راهاندازی دوباره سیستم را ساده نگه میدارند.
کارهایی که خودم انجام دادم
- تعریف مسئله در شرایط اضطراری، اولویتبندی، طراحی تعامل و پیادهسازی
- پیام لحظهای، حضور کاربران، وضعیت تحویل و خواندن، واکنش، پاسخ، فایل و گروه
- صف آفلاین، کش محلی، همگامسازی بعد از اتصال، PWA و اعلان
- استقرار خودمیزبان، راهاندازی متناسب با وضعیت شبکه، تأیید مدیر و پشتیبانی کاربران
چیزهایی که میشود بررسی کرد
استفاده در زمان اختلال
حدود ۴۰ نفر در دوره قطعی، تا زمان برگشت اینترنت عادی از MRM برای هماهنگی کار استفاده کردند.
تابآوری واقعاً در کد پیاده شده
وابستگیهای همراه پروژه، فایلهای محلی، تست mirror، systemd، صف آفلاین، IndexedDB و رفتار اتصال دوباره همگی در مخزن قابل بررسیاند.
محدودیتهای فنی مستندشده
در مستندات مشخص شده سیستم در چه شرایطی تابآور است و در چه بخشهایی به شبکه داخلی در دسترس و بررسی امنیتی مستقل نیاز دارد.
امروز پروژه کجاست
MRM در دوره قطعی امکان هماهنگی ضروری یک شرکت حدود ۴۰ نفره را فراهم کرد و تا زمان برگشت اینترنت عادی مورد استفاده بود.
چیزی که یاد گرفتم
- 01
در بحران، بهترین نقشه راه کوتاهترین مسیر برای برگشتن به کار ضروری است.
- 02
محدودیت زیرساخت بخشی از کشف محصول است، نه فقط کار DevOps.
- 03
پذیرش زیر فشار به آشنایی رابط و سادگی عملیات وابسته است.