1098
جزئیات وبلاگ
گوگل از۲میلیارد خط کد یکپارچه تشکیل شدهاست
ریچل پاتوین (Rachel Potvin) از گوگل، روز دوشنبه در جریان یک کنفرانس مهندسی در درهی سیلیکون، در رابطه با حجم کدهای گوگل پاسخی ارائه داد. براساس تخمین او، نرم افزاری که برای اجرای کل سرویسهای اینترنتی گوگل مانند سرویس جستجوی گوگل، جیمیل و سرویس نقشه گوگل، مورد نیاز است، بطور تقریبی شامل ۲ میلیارد خط کد است. برای مقایسه، سیستمعامل ویندوز مایکروسافت را در نظر بگیرید؛ یکی از پیچیدهترین نرم افزارهایی که تا کنون برای یک کامپیوتر خلق شده است و پروژهای که از سال ۱۹۸۰ در حال توسعه است. این سیستمعامل تقریبا شامل ۵۰ میلیون خط کد است. بنابراین، ساختن گوگل تقریبا معادل ۴۰ بار ساختن ویندوز است.
سم لمبرت (Sam Lambert) مدیر سرویس GitHub میگوید:
این آمار و ارقام واقعا حیرتآور است.
مقایسهی انجام شده از یک حیث بسیار مناسب است. درست مانند کدهای ویندوز، ۲ میلیارد خط کدی که گوگل را به پیش میرانند، به صورت یکپارچه هستند. این کدها که سرویس جستجوی گوگل، سرویس نقشه گوگل، گوگل داکس، گوگل پلاس، تقویم گوگل، جیمیل، یوتیوب و بسیاری از سرویسهای اینترنتی دیگر گوگل را اجرا میکنند، در یک محل ذخیره شدهاند و به صورت یکجا در دسترس هر ۲۵۰۰۰ مهندس گوگل قرار دارند. در داخل شرکت، با این کدها به صورت یک سیستمعامل عظیم برخورد میشود.
پاتوین میگوید:
اگرچه نمیتوان قطعی گفت، اما حدس میزنم این بزرگترین منبع کد موجود در کل دنیا باشد.
گوگل یک نمونهی بسیار بزرگ است. اما با نگاه به آن میتوان به این پی برد که چقدر نرمافزارهای ما در عصر اینترنت پیچیدهتر شدهاند و ما چگونه برای وفق دادن خود با این پیچیدگی، فلسفه و ابزارهای برنامهنویسی خود را تغییر دادهایم. منبع کد عظیم گوگل تنها در دسترس برنامهنویسهای داخل گوگل قرار دارد. اما این منبع به نحوی مشابه GitHub است؛ یک منبع عمومی و متن باز که در آن مهندسان حجم بالایی از کدها را به اشتراک میگذارند. دنیا به سمتی حرکت میکند که در آن بطور مرتب و در مقیاسی بزرگ در زمینهی کدها همکاری خواهیم کرد. این تنها راهی است که توسط آن میتوانیم همپای حرکت سریع و رو به رشد سرویسهای اینترنتی مدرن به پیش برویم.
سم لمبرت، مدیر سیستمهای GitHub میگوید:
داشتن حدود ۲۵۰۰۰ توسعهدهنده به این معنی است که گوگل، منبع کد خود را در اختیار افراد گوناگون با تواناییهای متنوع میگذارد. اما به عنوان یک شرکت کوچک، شما میتوانید امکانی مشابه را در GitHub به صورت متن باز در اختیار داشته باشید.
وی همچنین در مورد منبع کد عظیم گوگل میافزاید:
ساخت و راهاندازی یک منبع کد با این حجم، بسیار مشکل بوده و یک چالش فنی بزرگ محسوب میشود. این اعداد و ارقام واقعا حیرتآور هستند.
بخشی از نبوغ بکار رفته در GitHub مربوط به این است که به برنامهنویسها اجازه میدهد تا به سادگی کدی را به اشتراک گذاشته و در مورد آن همفکری و همکاری کنند. اما GitHub یک پروژهی نرم افزاری واحد را در بر نمیگیرد؛ بلکه میلیون ها پروژه را پوشش میدهد. گوگل پا را از این فراتر میگذارد و پروژههای زیادی را به یک پروژه واحد تبدیل میکند. با توجه به مشکلات مربوط به مدیریت این حجم از کد توسط تعداد زیادی مهندس، ممکن است این کار عقلانی به نظر نرسد، اما طبق گفتههای پاتوین، عملی است.
به پایپر گوش فرا دهید
گوگل اساسا "سیستم بررسی نسخه" اختصاصی خود را برای مدیریت کدها ساخته است. این سیستم که پایپر (Piper) نام دارد و با هدف اجرای سرویسهای آنلاین گوگل، در سراسر زیرساخت آنلاین آن در حال کار است. طبق گفتهی پاتوین، این سیستم ۱۰ دیتاسنتر مختلف گوگل را پوشش میدهد. این گونه نیست که همهی ۲ میلیارد خط کد در داخل یک سیستم قرار گرفته و در دسترس همهی مهندسان حاضر در شرکت باشد. بلکه این سیستم به مهندسان گوگل یک آزادی غیر معمول برای استفاده و تلفیق کدها در بین هزاران پروژه فراهم میکند.
پاتوین میگوید:
وقتی شروع به انجام یک پروژه جدید میکنید، از همان آغاز کار، کتابخانهای عظیم در اختیار دارید و تقریبا همه چیز از قبل انجام شده است.
علاوه بر این، مهندسان میتوانند کدی را تغییر داده و بلافاصله آن را در سراسر سرویسهای گوگل اعمال کنند. آنها میتوانند با بروزرسانی یک بخش کوچک، همهی چیز را بروزرسانی کنند.
این سیستم محدودیتهایی نیز دارد. طبق گفتهی پاتوین، کدهای با حساسیت بالا مانند الگوریتم جستجوی پیج-رنک (PageRank) گوگل، در منبعی جداگانه و در اختیار کارکنان به خصوصی قرار میگیرند. همچنین به دلیل آنکه اندروید و کروم – دو سیستمعامل گوگل – تحت شبکه نبوده و بسیار متفاوت از بقیه هستند، گوگل آنها را در سیستمهای کنترل نسخهی جداگانهای نگهداری میکند. اما در حالت کلی، کدهای گوگل یک سیستم یکپارچه هستند که اجازه جریان آزاد ایدهها و راهکارها را فراهم میکنند.
ارزش کار ماشینها
همانطور که لمبرت نیز اشاره کرد، ساخت و راهاندازی چنین سیستمی علاوه بر دانش فنی به حجم عظیمی از محاسبات کامپیوتری نیاز دارد. پایپر در حدود ۸۵ ترابایت (۸۵۰۰۰ گیگابایت) داده را پوشش میدهد؛ مهندسان گوگل روزانه در حدود ۴۵۰۰۰ هزار تغییر در کدها ایجاد میکنند. در حالیکه سیستمعامل متن باز لینوکس ۱۵ میلیون خط کد را در حدود ۴۰۰۰۰ فایل نرم افزاری پوشش میدهد، مهندسان گوگل بطور هفتگی ۱۵ میلیون خط کد را در حدود ۲۵۰۰۰۰ فایل اصلاح میکنند.
پایپر باید حجم زیادی از بار را از دوش مهندسین بردارد؛ فهم کدها را برای آنها آسان کند، از به وجود آمدن تداخل در آثار ایجاد تغییر در کدها جلوگیری به عمل آورد و در رفع باگها و حذف کدهای غیر قابل استفاده، سودمند باشد. گوگل با تعویض سیستم کنترل نسخهی سابق خود (Perforce) با سیستم پایپر، بیشتر وظایف را به ماشینهای خودکار سپرده است. این به معنی نوشتن کد توسط ماشینها نیست؛ اما آنها، بیشترِ دادهها و فایلهای مورد نیاز برای اجرای نرمافزار شرکت را تولید میکنند.
پاتوین میگوید:
برای سالم نگه داشتن کدها باید اقداماتی جدی صورت گیرد، بنابراین علاوه بر انسان، ماشینها نیز در این کار نقشی اساسی دارند.
پایپر برای همه
آیا دیگران نیز میتوانند از مزایای چنین سیستمی استفاده کنند؟ پاسخ مثبت است. نرمافزار اصلی فیسبوک بیش از ۲۰ میلیون خط کد را پوشش میدهد، و این شرکت با کل این کدها به صورت یک پروژهی واحد برخورد میکند. شرکتهای دیگر نیز چنین کاری را در مقیاسی کوچکتر انجام میدهند. با رسیدن شرکتها به ابعاد گوگل یا فیسبوک، مشکلات عدیدهای نیز در سر راه آنها قرار میگیرد؛ گوگل و فیسبوک در حال تلاش برای حل این مشکلات هستند.
دو غول اینترنتی در حال کار بر روی یک سیستم کنترل نسخهی متن باز هستند که به کمک آن میتوان کدها را در مقیاسی وسیع مدیریت کرد. این سیستم براساس سیستمی موسوم به Mercurial در حال توسعه است.
پاتوین میگوید:
در حال امکان سنجی برای توسعهی Mercurial در مقیاس منبع کد گوگل هستیم.
گوگل در حال همکاری با متخصص برنامه نویسی برایان اوسالیوان (Bryan O'Sullivan) و برخی از کارکنان فیسبوک در این زمینه است. اگرچه در حال حاضر هیچ شرکتی مانند گوگل و فیسبوک چنین حجمی از کد را در اختیار ندارند، اما در آیندهی نزدیک، شرکتهایی با ویژگی مذکور وجود خواهند داشت.
گوگل از۲میلیارد خط کد یکپارچه تشکیل شدهاست