بررسی تکنولوژیهای استفاده شده در فیسبوک
دراین مقاله سعی شده است تا با تکنولوژیهای استفاده شده در فیسبوک در سطح مقدماتی آشنا میشویم
در ابتدا جالب است بدانید فیسبوک چگونه بهوجود امده است. در فوریه ۲۰۰۴ توسط گروهی از دانشجویان دانشگاه هاروارد برای استفادهی محدود طراحی شد.در سال ۲۰۰۵ با توجه به محبوبیت این نرمافزار در تمامی دانشگاههای شهر بوستون موجود بود. در همان سال با سرمایهگذاری ۱۲ میلیون دلاری شرکت Accel partner به طورگسترده در فضای مجازی عرضه شد. بنیان گذار این سایت mark zuckerberg است.
فیسبوک از ابزار امکانات و زبانهای برنامه نویسی مختلف بهره میگیرد تا بتواند هستهی زیر بنایی خودش را تشکیل دهد. در قسمت جلویی سرورهایش را LAMP اجرا میکند (linux,apache,mysql,php) که توسط memcache ذخیره میشود. حال هرکدام از مفاهیم گفته شده را به اختصار توضیح میدهیم.
لینوکس سیستمعاملی است که از هسته unix استفاده میکند و متنباز بوده و قابلیت تنظیم بسیار بالایی دارد مهمترین ویژگیهای این سیستمعامل عبارتند از: ۱- پایین بودن هزینه ها ۲- امنیت و پایداری ۳- تطبیق با آخرین سخت افزارها ۴- قابلیت تطبیق یا نیازها
َ
Apache Server
فیسبوک در سرورهای لینوکس خود از Apache به عنوان HTTP سرور استفاده میکند. Apache متنباز و رایگان بوده و در حال حاظر قویترین وبسرور دنیا محسوب میشود. قابلیت تنظیم که به آن اشاره شد در این سرویس کاملا قابل لمس بوده و به همین علت از این وبسرور استفاده میشود به عنوان مثال شما در apache قابلیت تنظیم و مشخصکردن تعداد پاسخهایی که باید درخواستها در یک بازه زمانی مشخص داده شود میباشد با این کار شما از crash کردن سیستم جلوگیری کرده که این توانایی در سایر وبسرور ها از جمله IIS مایکروسافت قابل مشاهده نیست علاوه بر قابلیت balancing امنیت این سرور هم قابل تامل است که از جمله آن توانایی کنترل تمامی پروتکلها از جمله HTTP ,SSL ,TELNET میباشد.
Apache thrift
یک روال فراخوانی از راهدور کم حجم برای توسعه خدمات متقابل بین زبانهای برنامهنویسی می باشد. این ابزار
بسیار سریع بوده و در زمان صرفه جویی میکند.
روال thrift از زبانهای erlang ,php ,perl ,java ,python پشتیبانی میکند.
PHP
یک زبان برنامهنویسی است که برای طراحی وب توسعه یافته است اما میتوان از آن به عنوان یک زبان عمومی نیز استفاده کرد. کدهای PHP توسط یک سرور که نرمافزار PHP بر روی آن نصب باشد تفسیر میشوند. دستورات این زبان میتوانند به صورت مستقیم درون کدهای HTML قرار بگیرند. فیسبوک از PHP استفاده میکند چون یک زبان برنامهنویسی مناسب با پشتیبانی گسترده جامع و گسترشدهنده و فعال و همچنین قابلیت تکرار سریع را داراست. PHP یک زبان برنامهنویسی پویا است.
HIP HOP برای PHP
HIP HOP یک تبدیل کنندهی کد اصلی است که کدهای اسکریپتی PHP را به ++C بهینهسازی شده نبدیل میکند و پس از انجام این کار از ++g برای کامپایل آن کد به زبان ماشین استفاده میشود. به طور کلی HIP HOP توسط فیسبوک برای حفظ منابع و افزایش سرعت اجرای کدهای PHP با توجه به استفادهی گستردهی این زبان برنامهنویسی در سایت فیسبوک ایجاد شده است.
memcached
رایگان متنباز قابلیت اجرا در سیستمهای حافطه توزیعی ویژگیهای بیان شده memcache را به عنوان یک برنامهی بیرقیب برای افزایش سرعت برنامههای وب پویا با استفاده از کاهش بار پایگاه داده تبدیل کرده است. فیسبوک هم از این ابزار برای ذخیرهکردن دادهها داخل RAM برای کاهش تعداد و زمان مراجعه استفاده میشود. memcache در فیسبوک به عنوان برنامه اصلی در caching استفاده میشود. داشتن caching به سیستم این اجازه را به فیسبوک میدهد که به سرعت به فراخوانی داده توسط ما عمل میکند. اگر لازم نباشد که برای اطلاعات مورد نظر به پایگاه داده مراجعه شود تنها اطلاعات شما را از cache مربوط به id شما واکشی میشود.
My Sql
یک سیستم مدیریت پایگاه داده رابطهای است که امکان ذخیرهسازی جستجو مرتب کردن و بازیابی داده را فراهم میکند. سرور my sql به چندین کاربر اجازه استفادهی همزمان از دادهها را میدهد و دستزسی افراد معتبر به دادهها را تسریع میکند. بتابراین my sql یک سرور چندکاربره و چندریسمانه است. اگرچه تاریخچهی پیدایش my sql به ۱۹۷۹ برمیگردد اما عرضهی عمومی آن از سال ۱۹۹۶ آغاز شده است. این سیستم مدیریت پایگاه داده متنباز محسوب میشود. تا به حال شخصی سازیها باعث نگرانی بوده است به همین دلیل فیسبوک یک طرح پارتیشنبندی سفارشی را که در آن یک id سراسری به تمامی دادهها اختصاص میدهد توسعه داد. آنها همچنین یک طرح آرشیو سفارشی که براساس تعداد تکرار و دادههای اخیر هر کاربر است را اجرا کرد. جالب است بدانید فیس بوک هر روز بیش از نیم پتا بایت به داده هایش اضافه میکند.
Cassandra
یک سیستم مدیریت پایگاه داده است که برای پخش دادهها در میان سرورهای مختلف استفاده میشود و مخصوص دادهها در حجم بالا است. این ویژگی جستجو در داخل فیسبوک را قدرتمندتر میکند به طوری که سطح دسترسی بالایی را بدون هیچ شکستی در عملیات جستجو فراهم میکند. cassandra از ویژگی های robust برای پشتیبانی از کابرانی که در دیتا سنترهای مختلف قرار دارند استفاده میکنند. cassandra در حال حاظر در بسیاری از کمپانیها از قبیل twitter,ebay,cisco استفاده میشود. برخی از ویژگیهای آن عبارتند از :
۱-fult tolerant (تحمل خطا) ۴ -durable (قابلیت اطمینان بالا)
۲- performant (کارایی) ۵- professionally supported (پشتیبانی بالا)
۳-decentralized (غیر متمرکز بودن) ۶-elastic (انعطاف پذیری)
Hadoop
Hadoop یک پروژه مبتنی بر برنامهنویسی متنباز است که توسط سازمان نرم افزاری Apache ایجاد شده است. ایده اولیه Hadoop اولین بار در شرکت google رقم خورد اما خیلی ها باور به پیاده سازی این سیستم نداشتند و در چند سال اول این ایده تنها بصورت تئوری مطرح بود. Hadoop امکان ذخیرهسازی اطلاعات را در چندین سرور ( PC) با هزینهای پایین فراهم می آورد. تکنولوژی Hadoop از دو بخش کلی HDFS یا سیستم فایل انتشاری (Hadoop Distribition File System) و همچنین تکنیک با کیفیتپردازی اطلاعات به نام (MapReduce) استفاده می کند.
ساختار کلی اطلاعاتی در Hadoop بدینگونه می باشد که اطلاعات توسط سیستم Hadoop شکسته شده و به چندین سرور فرستاده می شود. سرورها بسته به نوع اطلاعات که ممکن است پردازشی یا ذخیره ای باشد اطلاعات را پردازش یا ذخیرهسازی می کنند. در هنگام در خواست اطلاعات مجدد سیستم اطلاعات را از سرورهای مختلف گرفته، مونتاژ کرده و در خروجی نمایش می دهد. خوبی این سیستم تهیه نسخه پشتیبان از اطلاعات بصورت خودکار است. هر تکه از اطلاعات در چندین قسمت (سرور) ذخیره می شود و در صورت آسیب دیدن یکی از سرورها، سرور دیگر قادر است مسؤولیت را بر عهده گرفته و اطلاعات مورد نظر را جایگزین کند.
نگاشت کاهش یا map reduce چارچوبی برای پردازش مجموعههای عظیمی از دادهها بر روی رایانهها (گرهها) که بر روی موضوعی خاص فعالیت میکنند. این مجموعه روی هم رفته به عنوان خوشه شناخته میشود (در صورتی که از سختافزاری یکسان بهره برند). پردازش محاسباتی بر روی دادهایِ ذخیره شده درون سامانه فایل (ساختار نیافته) یا بر روی پایگاهداده (ساختاریافته) قابل اجراست.
گامِ “نگاشت”: گره اصلی (Master Node) ورودی را به قطعاتی کوچکتر تقسیم مینماید (تقسیم مسالهی بزرگ به مسایل کوچک) و سپس تقسیم این مسایل کوچک (زیر مسایل) بین گرههای کارگر. یک گره کارگر نیز ممکن است این عملیات را به نوبهی خود تکرار نماید، که ایجاد کنندهای ساختاری درختی و چند مرحلهای است. هر گره کارگر زیرمسالهی خود را حل نموده و نتیجه را به گره اصلیِ خود برمیگرداند.
گامِ “کاهش”: سپس گرهِ اصلی جواب زیرمسایل را از گرههای کارگرش گرفته و خروجی را میسازد تا خروجی، که حل مسالهی ورودی است، را ایجاد نماید.
مزایای استفاده از Hadoop
۱- دسترسپذیر: روی clusterهای بزرگ تشکیل شده از سرورهای معمولی (در دسترس) یا روی سرویسهای رایانش ابری همچون سرویس EC2 آمازون اجرا میشود.
۲- مقاوم: بر روی سختافزارهایی معمولی اجرا میشود و به راحتی از عهده خرابی گرهها بر میآید. زیرا فرض میکند که عناصر رایانشی و ذخیرهسازی از کار خواهندافتاد، بنابراین چندین کپی از دادهای که روی آن دارد کار میکند را نگه میدارد تا اطمینان حاصل کند که پردازش میتواند باز توزیع شود. ۳-مقیاسپذیر: همچنان که حجم دادهها افزایش مییابد با افزودن گرههای جدید به کلاستر به صورت خطی گسترش مییابد و با این کار اجازه عملیات روی هزاران گیگابایت از دادهها را میدهد.
۴- ساده: به کاربران این اجازه را میدهد که به سرعت کدهای موازی کارا بنویسند.
۵- مقرون به صرفه: محاسبات موازی انبوه را در سرورها امکان پذیر میسازد. در نتیجه کاهش قابل ملاحظهای در هزینه هر ترابایت ذخیرهسازی را با خود به همراه دارد و به نوبه خود باعث میشود آن را مقرون به صرفه نماید.
۶- انعطاف پذیر: برخلاف ظاهر ساده خود هر نوع و فرمتی از اطلاعات را میتواند از منابع مختلف به خود جذب کند. داده ها از منابع مختلف میتوانند در کنار یکدیگر قرارگرفته و درنتیجه تجزیه و تحلیل بهتری بر روی آن ها انجام خواهد پذیرفت.
۷- دارای تحمل پذیری بالای خطاها: هنگامی که یک نود در مدار از دست برود سیستم تغییر مسیر داده و ادامه کار را با مسیر دوم دیتا ادامه خواهد داد و پردازش بدون از دست دادن زمان ادامه می یابد.
در شکل زیر به راحتی میتوان نحوه عملکرد hadoop را مشاهده کرد:
در شکل قبل کلاستر hadoop مجموعهای از سیستم هاست که به یکدیگر متصل هستند و ذخیرهسازی و پردازش در داخل (cloud) این ماشینها اتفاق میافتد به این ترتیب کاربران مختلف میتوانند کارهای محاسباتی خود را به hadoop ارسال کنند که این کار میتواند در cluster مربوط به خودشان که در hadoop برای آنها تعبیه شده انجام می شود.
درک سیستم های توزیعی و hadoop:
برای درک مقدار استفادهی سیستمهای توزیعی در سرورهای یک پارچه بیاییم هزینه اجرای یک دستگاه ورودی خروجی را در نظر بگیریم.
مثلا یک دستگاه ورودی خروجی با ۴پورت با سرعت بالا با مقدار ورودی ۱۰۰ mb/sec به ۳ ساعت زمان برای خواندن ۴TB داده اطلاعاتی نیاز دارد
در صورتی که در تکنولوژی hadoop با در نظر گرفتن مقدار داده مثال قبل داده را به کلاکهای ۶۴mb تقسیم میکند که میان ماشینهای مختلف با استفاده از سیستم توزیع فایل هادوپ (HDFS) تقسیم میشود.
مقایسه ی Hadoop و Sql:
برای مقایسه ابتدا باید به تفاوت بنیادین آنها توجه کرد. SQL برا ی هدفهای ساختار یافته طراحی شده است در صورتی که hadoop و بسیاری از برنامه های کاربردی زیر مجموعه hadoop برا ی کار با داده های غیر ساختار یافته مانند متن ایجاد شده اند.ازاین نظر می توان گفت hadoop یک الگوی کلیتری نسبت به SQL ارایه میدهد. در اصل SQL,hadoop مکمل یکدیگر هستند به گونهای که SQL یک زبان query است و میتواند در بالای سر hadoop به عنوان موتور اجرایی عمل نماید.
HBase
پایگاه دادهای توزیع شده و متنباز و غیرِ رابطهای که پس از مدلسازی جدول بزرگ google به زبان java نوشته شد.
این نرمافزار به عنوان بخشی از بنیاد نرمافزاری Apache توسعه مییابد و بر روی HDFS اجرا میشود و امکاناتی مانند جدول بزرگ را برای Hadoop فراهم میآورد. به طور دقیقتر، این برنامه راهی با تحملپذیری خطا، برای ذخیرهسازی تعداد زیادی از دادهها را فراهم میآورد.
پروژههای دیگری نیز با این برنامه به رقابت برخاستهاند. از این میان میتوان به Cassandra متعلق به facebook اشاره نمود.
Cloud Copmuting
مدل رایانشی بر پایه شبکههای رایانهای مانند اینترنت است که الگویی تازه برای عرضه، مصرف و تحویل خدمات رایانشی (شامل زیرساخت، نرمافزار، بستر، و سایر منابع رایانشی) با به کارگیری شبکه ارائه میکند “رایانش ابری” از ترکیب دو کلمه رایانش و ابر ایجاد شده است.
عناصر زیر بنایی cloud computing:
Virtualization: تکنولوژی مجازیسازی که ارایه دهندهی خدمات از طریق اینترنت به کاربران است.
Grid computing: فناوری cloud computing در ادامه گسترش سیستمهای گرید به وجود آمده اند. نقطه مشترک این دو فناوری استفاده از قابلیت مجازی سازی در پیاده سازی خود است. محاسبات گرید در بسیاری از پیاده سازی cloud computing به کار میرود.
Utility computing: محاسبات سودمند به معنای نوعی ارایه خدمات پردازشی وذخیره سازی است که در آن کاربر فقط به میزان خدماتی که دریافت میکند هزینه پرداخت میکند.
Web 2.0:شکل پیشرفته ارتباط میان کاربران با یکدیگر میان کاربران با اینترنت وبالاخره بین اجزای نرمافزاری اینترنت که در مجموع به اختصار Web2.0 خوانده میشود.
نقاط ضعف cloud computing :
۱- عدم اطمینان سرمایگذاران
۲- رعایت حریم خصوصی کاربران
۳- پایین بودن سرعت اینترنت
۴- مخالفت تولیدکنندگان سیستم عامل وسخت افزار
این مقاله در اینجا به پایان رسید که سعی شد تکنولوژیهای بسیار مهم مورد استفاده در فیسبوک یررسی شود اما به همین ابزار ختم نمیشود.
در آخر از جناب آقای آرمین مزینانی که ترجمه ی مطالب را برعهده داشته اند تشکر میکنم
ارسال یک پاسخ
در گفتگو ها شرکت کنید.