مقالات

مهندسی پنهان در پشت ساخت تصاویر نرم افزاری عظیم


سلام ،
شما بچه ها من را می شناسید ، من سعی می کنم همیشه کار جدیدی انجام دهم ، بنابراین به زودی ، وقتی برای اولین بار به درخت AOSP خیره شدم و اندازه بارگیری را دیدم ، تصمیم گرفتم که کسی از من ستایش کند. صدها گیگ؟ هزاران تغییر مجدد؟ چگونه کسی عاقلانه می تواند ساخت و ساز که در لپ تاپ ، حتی اگر هسته بیشتری نسبت به راکتور هسته ای وجود داشته باشد؟ حقیقت من را به یک سوراخ خرگوش که انتظار نداشتم از آن پایین آورد – کسی که به معنای “نرم افزار نوشتن” بازنویسی می کند.

بگذارید شما را به یک فیلم کوتاه در مورد چگونگی تبدیل یک قطعه کد به یک تصویر عظیم ، امضا شده ، آزمایش شده و بدون توجه به اینکه آیا این تصویر به روزرسانی سیستم تلفن شما ، نسخه ویندوز یا بازی AAA یک میلیارد دلار است ، برسانم. این فقط برای کامپایلرها نیست و make؛ این در مورد ارکستراسیون ، مقیاس ، افراد و ماشین هایی است که با هم در رقص کار می کنند که بیشتر کاربران هرگز نمی بینند.


من می خواهم دو صحنه را تصور کنم.

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

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

چرا شکاف بین این دو صحنه؟ چرا نمی توانیم فقط “کد را کامپایل کنیم” و باشیم؟

با مقیاس شروع می شود. سیستم عامل های مدرن و برنامه های پیشرو چندین هزار پرونده نیستند که به هم دوخته شده اند. آنها ارکستر مؤلفه ها هستند: هسته ها ، درایورها ، پرونده های تأمین کننده باینری ، موتورهای عملکردی ، کتابخانه های رسانه ای ، رابط های کاربر ، خدمات ، برنامه ها ، بسته های محلی سازی و هرگونه مهار آزمایشی که می توانید تصور کنید. هنگامی که یک پروژه کوچک ساخته شده می تواند در هزاران خط اندازه گیری شود ، ویندوز و اندروید در رژیم ده ها میلیون خط زندگی می کنند. موتورهای Chrome ، Android و Game دارای یک کد محلی عظیم ، جاوا یا زمان مدیریت شده و خطوط لوله دارایی غول پیکر هستند. هر یک از این قطعات مراحل ، انتظارات و عجیب و غریب خود را برای ساخت دارند.

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

  • کدهای راه اندازی و ژنراتور بازگرداندن ،
  • تولید پرونده های باینری خاص معماری (x86_64 ، arm64 و غیره) ،
  • پیوند پرونده های باینری عظیم (بهینه سازی زمان تماس و بهینه سازی توسط حساب می تواند بسیار سازگار و سنگین باشد)
  • منابع بسته (محلی سازی ، تصاویر ، سایه بان های از پیش استفاده شده) ،
  • مصنوعات را با کلیدهای ایمن فشرده و امضا می کند ،
  • و سپس آنها را در هزاران تست سخت افزار واقعی واقعی قرار دهید.

همه اینها تأخیر را معرفی می کند و موازی بودن ساده لوحانه را ناکافی می کند. حتی در یک دستگاه 64 درجه ، دیسک IO ، اتصال و مراحل بسته بندی سریالی ، بی پروا می شوند. اولین ساخت و ساز کامل ، “ساخت پاک” ، لزوماً همه چیز را لمس می کند: ده ها هزار پرونده ، تالیف ، اتصال ، بسته را بخوانید. این به موقع و در انرژی گران است.

که من را به یک نتیجه دوم و غالباً غفلت می رساند: هزینه های زیست محیطی. هنگام ضرب تالیفات کامل توسط ده ها توسعه دهنده ، تصاویر شبانه ، اعتبارسنجی درخواست و گردش خون مداوم ، چاپ انرژی غیرقانونی می شود. شرکت هایی که تصاویر شبانه و ماتریس های بزرگ CI را مدیریت می کنند ، به طور مؤثر در مراکز داده کوچک کار می کنند. این واقعیت تیم ها را به سمت بهینه سازی دو چیز سوق داده است: کاهش کار اضافی و کاهش زباله. ذخیره سازی (CCACHE ، حافظه نهان اکشن از راه دور) ، ساخت و ساز تدریجی و ارکستراسیون CI باهوش تر فقط امکانات برای توسعه دهندگان نیست – آنها بهینه سازی کربن هستند.

بنابراین ، تیم ها چگونه با آن رفتار می کنند؟ چگونه هر سازمان مهندسی سالم به هیچ وجه چیزی ارسال می کند؟

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

سیستم های ساختمانی توزیع شده در قلب این رویکرد قرار دارند. Google Goma (در سال 2025 به Reclient مهاجرت می کند) و اجرای از راه دور ، اجرای از راه دور Bazel ، Microsoft’s BuildXL و فن آوری های مشابه امکان رشد ، حافظه پنهان و استفاده مجدد را فراهم می کند. به جای پردازش همان کار سخت ، پرونده های شیء ذخیره شده در کار و ساخت و ساز دوباره استفاده می شوند. نتیجه: تأخیر تکرار فردی از ساعت به دقیقه کاهش می یابد و ساخت و سازهای سنگین به صورت کنترل شده و متمرکز رخ می دهد.

اما تالیفات توزیع شده تنها بخشی از تاریخ هستند. همچنین یک لایه ارکستراسیون شگفت آور وجود دارد: انواع مصنوعات و بسته بندی. یک پایه کد می تواند ده ها – حتی صدها مصنوعات را تولید کند. به عنوان مثال ، AOSP یک تصویر ایجاد نمی کند. این تصاویر سیستم را برای چندین خانواده از دستگاه ها ، انواع مختلفی با خدمات مختلف Google یا سفارشی سازی OEM ، تصاویر شارژ ، تصاویر تهیه کننده و موارد دیگر ایجاد می کند. ویندوز به طور مشابه بسیاری از SKU ها ، تصاویر بومی سازی شده و بسته های خاص پلتفرم را تولید می کند. بازی ها برای کنسول های متعدد ، تنظیمات رایانه و نصب کننده های بسته بندی شده ، ساخت و ساز تولید می کنند. هر نوع میزان کار و تعداد آزمایشات را ضرب می کند.

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

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

برای من ، یکی از جذاب ترین داستان ها تضاد بین دوران است. در دهه 1980 و 90 ، ساخت یک محور چیزی بود که می توانید در یک ایستگاه کاری به آن فکر کنید. مهندسان به خانه می رفتند و به آنها اجازه می دادند شب کار کنند. امروز ، ساخت ویندوز یا عنوان AAA نزدیک به مدیریت یک فیلم برای ارائه فیلم است: دارایی هایی که در ترابایت ها اندازه گیری می شوند ، سایه بان های از پیش استفاده شده ، وسایل روشنایی جهانی پخته شده و خطوط لوله برای تأیید این سیستم عامل. عناوین مدرن AAA دارای دارایی برای دارایی هایی هستند که بخشی از ساخت و ساز هستند – با مزارع توزیع شده خود – مانند خود مجموعه کد. محصول به ندرت “کد” است. این ماتریس سازگاری زمان دارایی زمان کد است.

ویندوز نمونه بارز است. پایه کد آن چندین دهه کد ، زبانهای بی شماری ، رابط های ارثی و اکوسیستم های عظیم درایور را جمع کرده است. رویکرد مایکروسافت حک کردن یک یکپارچه در مؤلفه ها است. مهندسان به صورت محلی در زیر سیستم های هدف می چرخند و تغییرات را فشار می دهند. یک مزرعه متمرکز ، مسلح به ارکستر نفیس ، سپس ساختارهای کامل و آپارتمان های رگرسیون را مدیریت می کند. برای ویندوز ، مشکل انسانی “کد را بنویسید” نیست. “اطمینان حاصل کنید که کد با ده ها هزار مجوز سخت افزاری و سالها سازگاری به خوبی بازی می کند.” زیرساخت های ساخت و ساز مایکروسافت برای مدیریت این پیچیدگی ساخته شده است – نه برای ساخت ساختمان بی اهمیت ، بلکه تحویل و پیش بینی آن را امکان پذیر می کند.

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

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

  • مستندات باسلا و فلسفه ساخت و سازهای هوایی را بخوانید.
  • نگاهی به اسناد Google و پست های وبلاگ Goma / اجرای از راه دور (آنها توضیح می دهند که چرا سوالات تدوین توزیع شده).
  • به دنبال BuildXL (مایکروسافت) و تکامل سیستم Fille Virtual Fille (GVFS) باشید تا با امکانات ذخیره سازی عظیم کار کنید.
  • به دنبال پروژه “ساختمانهای قابل تکرار” باشید – این را ضبط می کند که چرا ساختمانهای تعیین شده برای امنیت و اعتماد بسیار مهم هستند.
  • مواد را برای حافظه نهان از راه دور و عمل حافظه پنهان مشاهده کنید (چگونه CI از کار مکرر جلوگیری می کند).

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

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

وقتی مردم از من سؤال می کنند که آینده مهندسی نرم افزار چگونه به نظر می رسد ، من دنیایی را نمی بینم که توسعه دهندگان منسوخ شوند. من دنیایی را می بینم که “توسعه دهنده” به معنای بیشتر است – شما باید نه تنها کد ، بلکه حافظه نهان ، گرافیک CI ، تضمین قابلیت تکرارپذیری ، امضای مصنوعات و اقتصاد محاسبه را نیز درک کنید. قطعات خسته کننده – مزارع ساختمانی ، سیاست های امضا ، ارکستراسیون – جایی هستند که اعتماد به نفس جعل شده است. و به نظر من این داستانی است که ارزش گفتن دارد.

با تشکر از خواندن تا پایان من می دانم که شما وقت دارید که هدر دهید ، سپس GitHub من را نیز بررسی کنید

– Priyenshu Wema


Source link

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا