silhouette
جمعه 11 تیر 1389, 04:14 صبح
بررسی نرمافزارهای پشت بزرگترین سایت دنیا، 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
در مقیاسی که 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