تیم‌های مهندسی Grab در حال حاضر بیش از 250+ مایکروسرویس را اداره و مدیریت می‌کنند. با توجه به مسائل تجاری که هر تیم با آن روبرو می‌شود، اکوسیستم توسعه ما از Golang، جاوا و همه چیز در بین آنها متنوع است.

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

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

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

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

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

در Grab، هر دو تیم پلتفرم و تیم های مهندسی اصلی به معماری کانتینریزیشن منتقل شدند تا به اهداف زیر دست یابند:

    پشتیبانی از ساخت و روان رساندن تصاویر کانتینر در طول فرآیند CI.ایجاد یک تصویر ماشین مجازی استاندارد قابل اجرا برای اجرای بار کاری کانتینر. AMI توسط یک تیم مرکزی نگهداری می‌شود و شامل اجزای زیرساخت مانند (DataDog، Filebeat، Vault، و غیره) است.تجربه استقرار که به سرویس های موجود اجازه می دهد به امنیت بار کاری کانتینر با اجرای همزمان هر دو نوع بار کاری در ابتدا منتقل شوند.

تیم های مهندسی اصلی به بار کاری کانتینریزیشن روی تجربه های زیر تمایل داشتند:

    یک نسخه کانتینریزه از سرویس که بدون وابستگی به ابزار داخلی (زمان اجرا) Grab می تواند به طور محلی و در ارائه دهنده های ابری مختلف اجرا شود.استفاده مجدد از ابزارهای مشترک مانند Chronograf در پروژه های مختلف با اجرای نسخه بدون وابستگی از ابزارها برای اولین بار هنگام نیاز می شود.اجرای چندین قابلیت جدید در محیط استقرار / dev / shadow از طریق استفاده همزمان از انواع بار کاری.

پذیرش کانتینریزیشن

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

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

زمانی که ما شروع به استفاده از کانتینرها کردیم، متوجه شدیم که ساخت کانتینرهای کوچک برخی مزایا دارد نسبت به کانتینرهای بزرگ. به عنوان مثال، کانتینرهای کوچک:

    در طول فرآیند کانتینرسازی برنامه های خود، متوجه شدیم که برخی از باینری های سرویس با اندازه بزرگتر (~110 مگابایت) نسبت به اندازه باینری باینری Golang بزرگتر هستند. برای یک برنامه ساخته شده به صورت استاتیک بازپیوند شده Golang، اندازه 110 مگابایت بزرگ است! پس چگونه می توانیم متوجه شویم چه چیزی اندازه باینری ما را بزرگ می کند؟

    ابزار بصری اندازه گیری اندازه گیری باینری GO

    در حین جستجو در ابزارهایی برای تجزیه و تحلیل سمبل ها در یک باینری Golang، ما ابزار go-binsize-viz را بر اساس این مقاله پیدا کردیم. به خصوص، ما این ابزار را دوست داشتیم زیرا از ابزارلاین Golang موجود (به ویژه Go tool nm) برای تجزیه و تحلیل واردات استفاده می کند و یک مکانیزم ساده برای عبور از نمادهای موجود از طریق treemap ارائه می دهد. ما به طور خلاصه مراحلی که برای تجزیه و تحلیل یک باینری Golang انجام دادیم، را در اینجا شرح خواهیم داد.




        -5729