PDA

View Full Version : مقاله: بررسی نرم‏افزارهای پشت بزرگترین سایت دنیا، Facebook



silhouette
جمعه 11 تیر 1389, 03:00 صبح
بررسی نرم‏افزارهای پشت بزرگترین سایت دنیا، Facebook
در مقیاسی که Facebook کار می‏کند، بسیاری از روش‏های سنتی ارائه محتوای وب به راحتی شکست می‏خورند و یا تا حد زیادی ناکارآمد خواهند بود. مبارزه‏ی اصلی مهندسان Facebook، برپا نگه‏داشتن و اجرای بی عیب و نقص سایت، با وجود حدود نیم میلیارد کاربر فعال می‏باشد. در زیر نگاهی خواهیم داشت بر نرم‏افزارها و تکنولوژی‏هایی که آنان برای نیل به هدفشان به‏کار می‏بندند.
قبل از پرداختن به جزئیات، بد نیست برای درک بهتر مقیاس مبارزه‏ای که فیس‏بوک با آن روبروست، چند واقعیت را بررسی کنیم:

فیس‏بوک ماهانه ارائه کننده‏ی 570 میلیارد صفحه می‏باشد.
تعداد عکس‏های موجود در فیس‏بوک از تمام سایت‏های دیگر ارائه کننده‏ی عکس، مثل Flickr، بیشتر است.
ماهانه بیش از 3 میلیارد عکس در حال بارگذاری بر روی این سایت است.
سیستم فیس‏بوک در هر ثانیه به 2/1 میلیون عکس خدمت می‏دهد.
ماهانه بیش از 25 میلیارد قطعه محتوا در حال به اشتراک گذاری است.
فیس‏بوک بیش از 30 هزار سرور دارد. (تا سال 2009)
نرم‏افزار‏های کمک کننده به توزیع Facebook
از بسیاری جهات فیس‏بوک هنوز نوعی از یک سایت LAMP (Linux, Apache, MySQL, PHP) است. اما در جهت نیل به اهدافش باید عملکرد خود را تغییر و گسترش می‏داد تا بسیاری از عناصر و خدمات دیگر را متحد کند.
برای مثال:

فیس‏بوک هنوز از PHP استفاده می‏کند، اما کامپایلری برای آن ساخته است که اسکریپت PHP را بر روی وب سرور خود، به کد اصلی تبدیل می‏کند و در نتیجه کارایی را سرعت می‏بخشد.
فیس‏بوک از Linux استفاده می‏کند، اما آن را برای اهداف خویش بهینه ساخته است. (به خصوص در توان عملیاتی شبکه)
فیس‏بوک از MySQL استفاده می‏کند، اما در اصل به عنوان ذخیره ساز ماندگار کلید-مقدارها، و آوردن الحاق‏ها و اعمال منطقی به وب سرورها، که در نتیجه اجرای آسان‏تر بهینه سازی را در بر خواهد داشت.
لذا سیستم‏های سفارشی شده‏ای، مثل Haystack یا Scribe وجود خواهند داشت که در ادامه به آن‏ها خواهیم پرداخت.
Memcached
در حال حاظر Memcached که یک سیستم توزیع شده‏ی کش حافظه می‏باشد ، از مشهورترین قطعه نرم‏افزارهای موجود اینترنت است که فیس‏بوک (و هزاران سایت دیگر) از آن به عنوان لایه‏ی کش بین وب سرور و MySQL سرور استفاده می‏کند. در طی چند سال، فیس‏بوک هزاران بهینه‏سازی بر روی Memcached انجام داده است.
HipHop for PHP
از آن‏جایی که PHP یک زبان اسکریپتی است، در مقایسه با کدی اصلی که بر روی سرور اجرا می‏شود، نسبتاً کند است. HipHop مبدل PHP به C++ است که می‏تواند بعداً کامپایل شده و در نتیجه کارایی بهتری را ارائه دهد. تیمی 3 نفره از مهندسان فیس‏بوک، 18 ماه زمان صرف توسعه‏ی HipHop کرده‏اند.
Haystack
سیستم کارآمد ذخیره و بازیابی عکس فیس‏بوک، Haystack نام دارد. این سیستم هزاران کار برای انجام دادن دارد. بیش از 20 میلیارد عکس بارگذاری شده در فیس‏بوک وجود دارد که هرکدام در 4 resolution متفاوت ذخیره شده‏اند. (یعنی چند تا عکس؟!) و البته این تنها به معنی سروکار داشتن با میلیاردها عکس نیست، کارایی یک مسئله‏ی بحرانی است. همان طور که ذکر کردیم، فیس‏بوک در هر ثانیه به 2/1 میلیون عکس خدمت می‏دهد و البته این عدد، عکس‏های ارائه شده توسط CDN فیس‏بوک را شامل نمی‏شود.
BigPipe
سیستم سرویس‏دهی صفحه‏های وب پویا که فیس‏بوک توسعه داده است. فیس‏بوک برای بیهنه سازی کارایی، از این سیستم برای خدمت‏دهی به هر صفحه در قطعه‏هایی (که pagelets نامیده می‏شوند) استفاده می‏کند.
برای مثال پنجره‏ی چت، تغذیه‏ی (feed) خبر و امثال این‏ها به طور جداگانه بازیابی می‏شوند. این pageletها می‏توانند به صورت موازی بازیابی شوند که باعث افزایش کارایی شده و همچنین به کاربران امکان می‏دهند که با وجود مشکل در قسمتی از صفحه، از بقیه قسمت‏ها استفاده کنند.
Cassandra
این سیستم، یک ذخیره‏ساز توزیع‏شده‏ی بدون نقطه‏ی شکست است. Cassandra یکی از شواهد عالی برای حرکت NoSQL است و به صورت متن باز ساخته شده است (پروژه Apache). فیس‏بوک این سیستم را برای جستجوی Inbox استفاده می‏کند.
بجز فیس‏بوک، تعدادی از سرویس‏های دیگر، مثل Digg نیز از Cassandra استفاده می‏کنند.
Scribe
اسکرایب یک سیستم واقعه نگاری انعطاف‏پذیر است که فیس‏بوک آن را برای اهداف کثیری به کار می‏گیرد. این سیستم برای سروکار داشتن با log هایی در حد و اندازه‏ی فیس‏بوک ساخته شده‏است و به طور خودکار با پدید آمدن گروه‏های جدیدی از وقایع، آن‏ها را دسته‏بندی می‏کند.
Hadoop and Hive
این سیستم یک پیاده سازی نگاشت-کاهش (map-reduce) متن باز است که اجرای محاسبات را بر روی توده‏ی حجیمی از داده‏ها، امکان پذیر می‏کند. فیس‏بوک این سیستم را برای تحلیل داده‏ها استفاده می‏کند. Hiveاز درون فیس‏بوک سرچشمه گرفت و استفاده از پرس وجوهای SQL را در مقابل Hadoop ممکن ساخت؛ لذا کار را برای غیربرنامه‏نویسان آسان کرده است.
هر دوی Hadoop و Hive متن باز (Apache projects) هستند و توسط تعدادی از سرویس‏های بزرگ مثل Yahoo و Twitter استفاده می‏شوند.
Thrift
فیس‏بوک از چندین زبان گوناگون برای خدمات مختلف خود استفاده می‏کند. PHP برای رابط کاربری، Erlang برای چت، Java و C++ در قسمت‏های مختلف، استفاده شده‏اند. Thrift یک میان‏افزار بین زبانی است که تمامی زبان‏های مختلف ذکر شده را به همدیگر گره می‏زند و ارتباط بین آن‏ها را ممکن می‏سازد. این امکان، توسعه‏ی بین زبانی را برای فیس‏بوک بسیار ساده کرده است.
فیس‏بوک Thrift را متن باز ساخته است و امکان افزودن زبان‏های دیگری را نیز دارا می‏باشد.
Varnish
یک شتاب دهنده‏ی HTTP که می‏تواند نقش متعادل کننده‏ی بار را ایفا کند و همچنین محتویات را کش کند که بعداً می‏توانند سریع و سبک ارائه شوند.
فیس‏بوک از Varnish برای ارائه‏ی عکس‏ها و تصاویر پروفایل و سروکله زدن با میلیاردها درخواست در روز، استفاده می‏کند. مثل اکثر چیزهایی که فیس‏بوک به کار می‏گیرد، Varnish نیز متن باز می‏باشد.
احسان شاکری‏پور
منبع :
اظهارات مهندسان فیس‏بوک و سایت pingdom