مروری بر معماری Netflix

نتفلیکس یک شرکت رسانه‌ای آمریکایی است که خدمات استریم فیلم و سریال را به صورت آنلاین ارائه می‌دهد. این شرکت در سال 1997 تأسیس شده و در حال حاضر بیش از 222 میلیون مشترک در سراسر جهان دارد. نتفلیکس طیف وسیعی از فیلم‌ها و سریال‌ها را در ژانرهای مختلف ارائه می‌دهد، از جمله فیلم‌های سینمایی، سریال‌های تلویزیونی، مستندها و برنامه‌های کودکان. این شرکت همچنین محتوای اصلی خود را نیز تولید می‌کند؛ یعنی در فرآیند تولید فیلم و سریال نیز مشارکت فعال دارد. نتفلیکس با مدل اشتراک کار می‌کند و کاربران برای دسترسی به محتوای آن باید به صورت ماهانه هزینه اشتراک را پرداخت کنند. این شرکت همچنین امکان دانلود فیلم‌ها و سریال‌ها را برای تماشای آفلاین فراهم می‌کند.

نتفلیکس به یکی از محبوب‌ترین پلتفرم‌های استریم فیلم و سریال در جهان تبدیل شده است و به طور مداوم در حال رشد و توسعه است. این شرکت که به غول استریمینگ (جریانی) شهرت دارد، به دلیل معماری ابری پیچیده خود که قابلیت اطمینان، مقیاس‌پذیری و عملکرد را برای کاربران در سراسر جهان تضمین می‌کند، شناخته شده است. یک عنصر کلیدی این معماری، ابر خارجی است که از ترکیبی از سرویس‌های ابری آمازون Amazon Web Services (AWS) و یک شبکه تحویل محتوا (CDN) تشکیل شده است. AWS برای فرآیندهای غیرجریانی و Open Connect (OC) یا همان CDN اختصاصی Netflix برای تحویل محتوای ویدیویی کاربرد دارد.

اجزای اصلی در معماری Netflix

شکل ۱ معماری سطح بالای Netflix را نشان می‌دهد که در ادامه این مطلب، به جزئیات بخش‌های مختلف آن می‌پردازیم.

شکل ۱- معماری سطح بالای Netflix
شکل ۱- معماری سطح بالای Netflix

لف) کلاینت: دستگاه‌هایی مانند تلویزیون، ایکس‌باکس، لپ‌تاپ و غیره که کاربران برای مرور و پخش فیلم‌های نتفلیکس استفاده می‌کنند.

ب) زیرساخت اختصاصی OC (Open Connect) یا CDN نتفلیکس: سیستم شبکه تحویل محتوا (CDN)، شبکه‌ای از سرورهای توزیع شده در نقاط مختلف جهان است. در واقع OC همان CDN اختصاصی خود نتفلیکس است که همه امور مربوط به پخش ویدئو را مدیریت می‌کند. سرورهای Open Connect در سراسر جهان توزیع شده‌اند و هنگامی که روی دکمه پخش کلیک می‌کنید، جریان ویدئو از نزدیک‌ترین سرور بر روی دستگاه شما نمایش داده می‌شود. به این ترتیب، اگر در آمریکای شمالی هستید، ویدئو از نزدیک‌ترین سرور Open Connect به جای سرور اصلی (که ممکن است دورتر باشد) پخش می‌شود تا زمان پاسخ‌دهی کاهش یافته و فیلم سریع‌تر برای شما بارگذاری شود.

پ) زیرساخت و توسعه بک‌اند: این بخش همه کارهایی که مربوط به پخش ویدئویی نباشد را انجام می‌دهد (مثلاً قبل از اینکه روی دکمه پخش کلیک کنید). وظایف این بخش شامل اضافه کردن محتواهای جدید، پردازش ویدئوها، توزیع آن‌ها روی سرورهای سراسر جهان و مدیریت ترافیک شبکه است. بیشتر این فرآیندها توسط سرویس‌های وب آمازون (AWS) مدیریت می‌شوند. به عبارت دیگر، وقتی شما یک فیلم یا سریال را در نتفلیکس انتخاب می‌کنید، ابتدا "بک‌اند" کارهای لازم برای آماده‌سازی آن را انجام می‌دهد. سپس ویدئو بر روی شبکه CDN توزیع می‌شود و نزدیک‌ترین سرور Open Connect آن را با بالاترین کیفیت و سرعت ممکن برای شما پخش می‌کند. این همکاری بین دو ابر و سه بخش اصلی نتفلیکس به شما تجربه‌ای لذت‌بخش و بدون وقفه از تماشای فیلم‌ها و سریال‌ها می‌دهد.

ت) رابط کاربری نتفلیکس: نتفلیکس رابط کاربری خود (frontend) را به سه دلیل اصلی با ReactJS ساخته است:

  • سرعت راه‌اندازی: ReactJS به توسعه‌دهندگان اجازه می‌دهد اجزای مستقل بسازند که می‌توان آن‌ها را به راحتی تست و به‌روزرسانی کرد. این امر به راه‌اندازی سریع ویژگی‌های جدید و بهبود تجربه کاربری کمک می‌کند.
  • کارایی در زمان اجرا: ReactJS از یک DOM مجازی استفاده می‌کند که کارآیی رندر را بهبود می‌بخشد و منجر به تجربه روان‌تری برای کاربران می‌شود، به خصوص روی دستگاه‌های کم‌توان.
  • ماژولار بودن: اجزای ReactJS کاملاً مستقل هستند که باعث می‌شود کد تمیزتر، سازمان‌یافته‌تر و قابل نگهداری‌تر شود. این امر به همکاری تیمی مؤثر و توسعه سریع نرم‌افزار کمک می‌کند.

نتفلیکس از طیف وسیعی از خدمات AWS برای پشتیبانی از عملیات خود استفاده می کند، از جمله:

  • سرویس Amazon EC2 برای میزبانی مایکروسرویس‌ها و سایر برنامه‌های کاربردی.
  • سرویس Amazon S3 برای ذخیره سازی محتوای ویدیویی.
  • سرویس Amazon DynamoDB برای ذخیره‌سازی داده‌های متا و داده‌های کاربر.
  • سرویس Amazon CloudFront برای توزیع محتوای استاتیک مانند تصاویر و کد جاوا اسکریپت.
  • سرویس ELB که به تنظیم بار کاربران روی نمونه‌های مختلف نرم‌افزاری و محتوای ویدئویی کمک می‌کند.

سناریوی اجرایی

شکل ۲ معماری ارتباطی OCها و مراحل درخواست کاربران به سایت Netflix از طریق CDNهای اختصاصی آن را نشان می‌دهد که در ادامه این مراحل به طور ساده تشریح می‌شوند.

  • کاربر درخواستی برای یک ویدیو به وب سایت یا برنامه نتفلیکس ارسال می کند.
  • درخواست به CDN مسیریابی می شود.
  • سرویس CDN بررسی می‌کند که آیا نسخه ذخیره شده محلی از ویدیو در دسترس است یا خیر.
  • اگر نسخه محلی موجود باشد، CDN آن را به کاربر تحویل می دهد.
  • اگر نسخه محلی در دسترس نباشد، CDN درخواست را به یکی از سرورهای اصلی هدایت می کند.
  • سرور اصلی پس از مسیریابی، نسخه‌ای از ویدیو را برای CDN ارسال می کند.
  • سرویس CDN، نسخه درخواستی را برای کاربر ارسال می‌کند، همچنین آن را در لبه شبکه خود برای درخواست‌های بعدی ذخیره می‌کند.
  • کاربر ویدیو را تماشا می‌کند و به همین شکل سایر درخواست‌ها نیز مدیریت می‌شوند.
شکل 2- معماری OC و مراحل درخواست کاربران به وب‌سایت Netflix
شکل 2- معماری OC و مراحل درخواست کاربران به وب‌سایت Netflix


مزایای استفاده از ابر خارجی با استفاده از AWS و CDN:

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

روند تولید و استقرار ویدئوها در Neflix

تصور کنید قفسه‌های غول‌آسای فیلم که پر از آثار باکیفیت هستند. اینجاست که ماجرای نتفلیکس آغاز می‌شود. ویدیوهایی با کیفیت بالا از شرکت‌های فیلمسازی دریافت می‌شوند، اما پیش از آنکه بر صفحه نمایش‌ شما ظاهر شوند، سفری را طی می‌کنند که نیاز به چندین مرحله آماده‌سازی دارد.

نتفلیکس از بیش از 2200 دستگاه پشتیبانی می‌کند و هرکدام از آن‌ها وضوح و فرمت متفاوتی را می‌طلبند. برای برآوردن این نیاز، فرآیند کدگذاری ویدئو وارد صحنه می‌شود. همانند آشپزی که بهترین مواد اولیه را به غذایی خوشمزه تبدیل می‌کند، مهندسان نتفلیکس نیز دست به کار می‌شوند. آن‌ها ابتدا خطاهای موجود را یافته و سپس ویدیوی اصلی را به فرمت‌ها و وضوح‌های مختلفی تقسیم می‌کنند. اما قصه به همین سادگی نیست. سرعت اینترنت نیز در کیفیت تماشا نقش مهمی دارد. به همین دلیل، برای هر فیلم، نتفلیکس حدود 1100 تا 1200 نسخه با وضوح متفاوت (مانند 4k و 1080p) ایجاد می‌کند. این حجم انبوه نیازمند کدگذاری و پردازش پیشرفته‌ است.

شکل3- ساختار تولید و استقرار فیلم‌ها در Netflix
شکل3- ساختار تولید و استقرار فیلم‌ها در Netflix


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

وقتی برنامه نتفلیکس را باز می‌کنید و وارد سرورهای آمازون می‌شوید، آن‌ها مسئول ورود، پیشنهادات، جستجو، سابقه تماشا، صفحه اصلی، پرداخت، پشتیبانی و سایر موارد هستند. اما با زدن دکمه پخش، جادوی دیگری رخ می‌دهد. نتفلیکس سرعت و ثبات اینترنت شما را تحلیل می‌کند و بهترین سرور Open Connect نزدیک به شما را انتخاب می‌کند. سپس، با توجه به دستگاه و اندازه صفحه نمایش، مناسب‌ترین فرمت ویدیو را برای شما ارسال می‌کند. شاید متوجه شده باشید که گاهی ویدیو برای لحظاتی کیفیت خود را از دست می‌دهد و مجدداً به کیفیت بالا برمی‌گردد. این به خاطر همان انتخاب بهترین سرور است که برای تجربه بهتر، بین فرمت‌های مختلف جابه‌جا می‌شود. به این قابلیت Netflix، پخش تطبیقی (Adaptive) ویدئو گفته می‌شود.

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

معمار هوشمند: ELB توزیع‌کننده‌ ترافیک در دنیای فیلم‌های بی‌پایان

در نتفلیکس، جایی که میلیون‌ها کاربر تشنه‌ تماشای فیلم و سریال هستند، ترافیک عظیمی جریان دارد. اما عبور بی‌دردسر این سیل تماشاگران از میان انبوهی از سرورها و نمایشگرها، نیازمند یک استراتژی مدبرانه است. اینجاست که قهرمان داستان ما وارد می‌شود: ELB یا همان متعادل‌کننده بار الاستیک که معماری سطح بالای آن در شکل 4 نمایش داده شده است.

شکل4- معماری سطح بالای سرویس کنترل بار ELB آمازون
شکل4- معماری سطح بالای سرویس کنترل بار ELB آمازون


سرویس ELB همانند یک رهبر ارکستر، وظیفه‌ هدایت ترافیک به سوی سرویس‌های نمایشی را بر عهده دارد. اما این رهبری، ساده و ابتدایی نیست، بلکه از دو مرحله‌ی هوشمندانه تشکیل شده است:

تعادل در پهنه‌ وسیع:

تصور کنید نتفلیکس به بخش‌های متعددی تقسیم شده است. ELB ابتدا ترافیک ورودی را در میان این بخش‌ها یا همان Zones به صورت چرخشی و منصفانه توزیع می‌کند. به این ترتیب، هیچ بخشی بیش از حد شلوغ نمی‌شود و کاربران در هر گوشه‌ای از این قلمرو به سرعت به محتوا دسترسی پیدا می‌کنند.

تعادل در میان سربازان خط مقدم:

هر بخش (Zone) خود به تعدادی سرور تقسیم می‌شود که همانند سربازان خط مقدم، مستقیماً به درخواست‌های کاربران پاسخ می‌دهند. ELB در این مرحله نیز وارد عمل می‌شود و درخواست‌های ورودی را به صورت چرخشی میان این سرورها توزیع می‌کند. به این ترتیب، بار بیش از اندازه روی هیچ سروری توزیع نمی‌شود و کاربران تجربه‌ای روان و بدون وقفه دارند.

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

سرویس اختصاصی ZUUL: دروازه‌بان باهوش سرزمین محتوا

زول یک سرویس Gateway یا همان دروازه مرکزی است که مسیریابی پویا، مانیتورینگ، انعطاف‌پذیری و امنیت را برای ترافیک سرویس‌های نتفلیکس فراهم می‌کند. این سرویس امکان مسیریابی آسان بر اساس پارامترهای کوئری، URL و مسیر را می‌دهد. برای درک بهتر نحوه کار زول، اجزای مختلف آن را بررسی می‌کنیم:

  • مسیریابی پویا: تصور کنید کاربری درخواستی برای تماشای فیلمی ارسال می‌کند. زول همانند راهنمایی هوشمند، ابتدا درخواست را تجزیه و تحلیل می‌کند. او می‌تواند مسیر را بر اساس کلمات کلیدی، آدرس اینترنتی یا مسیر مشخص شده انتخاب کند. به این ترتیب، کاربران به سرعت به مقصد خود (فیلم مورد نظر) می‌رسند، بدون اینکه در پیچ‌وخم‌های سرورها و مسیرهای اشتباه سرگردان شوند.
  • نظارت و پایداری: زول همانند ناظری دقیق، همواره بر عملکرد سیستم نظارت می‌کند. او سلامت سرورها را بررسی می‌کند و در صورت لزوم، ترافیک را به مسیرهای جایگزین هدایت می‌کند تا هیچ‌گاه وقفه‌ای در تماشای فیلم‌ها رخ ندهد. به این ترتیب، پایداری و دسترسی مداوم برای کاربران تضمین می‌شود.
  • امنیت و حفاظت: زول همچون نگهبانی هوشیار، امنیت دروازه‌های سرزمین محتوا را بر عهده دارد. او با فیلتر کردن درخواست‌های غیرمجاز و مشکوک، از نفوذها و حملات سایبری جلوگیری می‌کند. به این ترتیب، اطلاعات کاربران و محتوای ارزشمند نتفلیکس در امنیت کامل قرار می‌گیرند.
  • انعطاف و کارایی: زول قابلیت‌های ویژه‌ای نیز در اختیار توسعه‌دهندگان قرار می‌دهد. آن‌ها می‌توانند با استفاده از زول، ترافیک ورودی را تقسیم‌بندی کنند و عملکرد سرورهای جدید را آزمایش نمایند. همچنین، می‌توانند بدون ایجاد اختلال در سیستم، سرویس‌های جدید را به صورت آزمایشی به کاربران منتخب نشان دهند. این قابلیت‌ها به بهبود عملکرد و توسعه‌ی سریع‌تر نتفلیکس کمک می‌کنند.
  • فیلتر هوشمند: زول همچون سدی مستحکم، می‌تواند درخواست‌های نامناسب را شناسایی و فیلتر کند. این موضوع با ایجاد محیطی امن و مطلوب برای کاربران، تجربه‌ای لذت‌بخش‌تر را برای همه رقم می‌زند.
شکل 5- نمایش سطح بالا از معماری سرویس Gateway مرکزی و اختصاصی ZUUL
شکل 5- نمایش سطح بالا از معماری سرویس Gateway مرکزی و اختصاصی ZUUL


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

سرویس Hystrix: سپر دفاعی سیستم‌های توزیع‌شده

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

  • غلبه بر شکست‌های زنجیره‌ای: دیگر لازم نیست اثر دومینویی بر سیستم شما حاکم باشد. هیستریکس به سرعت خرابی‌ها را شناسایی و کنترل می‌کند و از گسترش آن‌ها مانند آتش‌سوزی جلوگیری می‌کند.
  • کنترل تأخیرها: تأخیر و کندی از بین خواهد رفت. هیستریکس تأخیر ناشی از وابستگی‌های خارجی را مهار می‌کند و تعاملات روان و پاسخگو را تضمین می‌کند.
  • بزیابی سریع: در صورت خرابی، هیستریکس یک بازیابی سریع را سازماندهی می‌کند و به سیستم شما اجازه می‌دهد با اختلال کم به حالت عادی بازگردد.
  • ایجاد قابلیت تنزل (downgrade) سرویس: هنگامی که با چالش‌های غیرقابل عبور مواجه می‌شوید، هیستریکس با فعال کردن مکانیزم‌های پشتیبان‌گیری به شیوه‌ای مناسب، حتی در مواجهه با مشکلات، تجربه‌ای مداوم را برای کاربر تضمین می‌کند.
  • هوشیاری بالا: هیستریکس به عنوان نگهبان هوشیار شما عمل می‌کند و نظارت تقریباً بی‌درنگ، هشدارهای تشریحی و کنترل عملیاتی عمیق را ارائه می‌دهد، بنابراین می‌توانید از تهدیدهای بالقوه پیشگیری کنید.
  • ذخیره‌سازی هوشمندانه: هیستریکس از ذخیره‌سازی هوشمندانه درخواست‌ها استفاده می‌کند و تعاملات گذشته را به خاطر می‌سپارد تا عملکرد را بهینه کند و منابع ارزشمند را حفظ کند.
  • دسته‌بندی خودکار برای افزایش کارایی: هیستریکس درخواست‌های مشابه را با هم گروه می‌کند و از قدرت پردازش دسته‌ای برای ساده‌سازی عملیات و افزایش کارایی استفاده می‌کند.

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

معماری مایکروسرویس‌های نتفلیکس

نتفلیکس در دنیای سرگرمی، سرزمینی وسیع از خدمات است که با معماری مایکروسرویس‌ها بنا شده است. این یعنی کل سیستم به تعدادی سرویس کوچک و مستقل تقسیم شده که با هم همکاری می‌کنند تا APIهای مورد نیاز را برای اپلیکیشن‌ها و وب‌سایت‌ها تامین کنند. هر زمان که درخواستی به این سیستم ارسال می‌شود، به سراغ مایکروسرویس‌های دیگر رفته تا داده‌های مورد نیاز را جمع‌آوری کند و در نهایت پاسخ کاملی برای کاربر ارسال شود.

شکل 6- ساختار سطح بالای معماری مایکروسرویس در نتفلیکس
شکل 6- ساختار سطح بالای معماری مایکروسرویس در نتفلیکس


نکته کلیدی در این معماری، استقلال این مایکروسرویس‌ها از یکدیگر است. مثلاً سرویس ذخیره‌سازی ویدیوها کاملاً از سرویس تبدیل فرمت آن‌ها جداست. اما چطور می‌توان اطمینان داشت که چنین سیستمی همیشه قابل اعتماد و در دسترس است؟

راهکارهای کلیدی:

  • هیستریکس: با این کتابخانه می‌توانید تحمل تأخیر و خطا در تعاملات بین سرویس‌ها را افزایش دهید.
  • جدا کردن مایکروسرویس‌های حیاتی: برخی از سرویس‌ها به دلیل اهمیت آن‌ها، بهتر است از سایرین کمتر وابسته باشند. می‌توانید این سرویس‌های حیاتی را تنها به دیگر سرویس‌های قابل اعتماد متصل کنید. در انتخاب این سرویس‌ها، موارد ضروری مانند جستجوی ویدیو، انتخاب و پخش آن‌ها را در نظر بگیرید. به این ترتیب حتی در بدترین شرایط هم کاربران می‌توانند کارهای ابتدایی را انجام دهند.
  • بی‌حالت (stateless) بودن سرورها: شاید عجیب به نظر برسد، اما تصور کنید سرورهایتان گله‌ای از گاوها هستند و شما به میزان شیر روزانه آن‌ها اهمیت می‌دهید. اگر یک روز دیدید که شیری که از یک گاو می‌گیرید کم شده، آن را با گاو دیگری جایگزین می‌کنید. نیازی نیست برای دریافت شیر به همان گاو خاص وابسته باشید. این مثال را می‌توان به نرم‌افزار هم ربط داد. هدف این است که اگر سرور اصلی با مشکل مواجه شد یا به موقع پاسخ نداد، بتوانید به سراغ سرور دیگری بروید و کارتان را پیش ببرید. به جای تکیه بر یک سرور خاص و حفظ حالت در آن، می‌توانید درخواست را به نمونه دیگری از همان سرویس هدایت کنید یا به صورت خودکار یک گره جدید راه اندازی کنید تا جایگزین آن شود. اگر یک سرور از کار افتاد، دیگری جایگزینش می‌شود.

با رعایت این نکات، معماری مایکروسرویس‌های شما همواره قابل اعتماد و آماده‌ی پاسخگویی به کاربران خواهد بود. به یاد داشته باشید که این تنها گزیده‌ای از راهکارهای کلیدی است و پیچیدگی‌های دنیای واقعی نیازمند بررسی و تحلیل دقیق‌تری است.

گنجینه‌ پنهان در قلب نتفلیکس: سفری به دنیای EV Cache

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

یکی از این راه‌حل‌های هوشمندانه، EV Cache نام دارد. گنجینه‌ای پنهان در قلب نتفلیکس که نقشی کلیدی در سرعت و عملکرد بی‌نظیر این پلتفرم ایفا می‌کند. EV Cache درواقع لایه‌ای سفارشی از حافظه موقت است که بر پایه‌ی Memcached بنا شده و به عنوان پوششی بر روی آن عمل می‌کند.

انواع EV Cache:

شکل ۷- ساختار EVCache ساده
شکل ۷- ساختار EVCache ساده
  • سرویس EVCache ساده: این نوع EVCache شامل یک خوشه Memcached با چندین گره است که در یک منطقه (Zone) در دسترس هستند. این نوع EVCache برای برنامه‌هایی که به پایداری بالا نیاز ندارند مناسب هستند.
شکل 8- ساختار Multi-Zone در EVCache
شکل 8- ساختار Multi-Zone در EVCache
  • سرویس استقرار Multi-Zone: این نوع EVCache شامل چندین خوشه Memcached در چندین منطقه (Zone) است. داده‌ها در تمام خوشه‌ها به طور همزمان ذخیره می‌شوند و در صورت خرابی یک منطقه، داده‌ها در مناطق دیگر همچنان در دسترس خواهند بود. این نوع EVCache برای برنامه‌هایی که به پایداری بالا نیاز دارند مناسب است.

مراحل استفاده از EVCache:

  • برنامه EVCache یک درخواست برای خواندن یا نوشتن داده ارسال می‌کند.
  • سرویس EVCache درخواست را به خوشه Memcached مناسب هدایت می‌کند.
  • اگر درخواست برای خواندن باشد، گره Memcached داده‌ها را به EVCache برمی‌گرداند.
  • سرویس EVCache داده‌ها را به برنامه برمی‌گرداند.
  • اگر درخواست برای نوشتن باشد، EVCache، داده‌ها را به تمام خوشه‌های Memcached در تمام مناطق ارسال می‌کند.
  • گره‌های Memcached داده‌ها را ذخیره می‌کنند.

مزایای EV Cache:

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

نکاتی برای انتخاب نوع EVCache:

  • میزان پایداری مورد نیاز: اگر برنامه شما به پایداری بالا نیاز دارد، می‌توانید از Multi-Zone EVCache Deployment استفاده کنید.
  • تعداد کاربران: اگر برنامه شما تعداد زیادی کاربر از نقاط مختلف جغرافیایی دارد، می‌توانید از Multi-Zone EVCache Deployment استفاده کنید تا بتوانید بار را بین چندین منطقه توزیع کنید.
  • هزینه Multi-Zone EVCache Deployment گران‌تر از EVCache ساده است.

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

خزانه‌های دیجیتالی نتفلیکس: سفری به دنیای پایگاه‌های داده

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

سرویس MySQL:حافظه‌ امن و مانا

برای حفاظت از اطلاعات حیاتی مانند جزئیات صورت‌حساب‌ها، پروفایل کاربران و تراکنش‌های مالی، نتفلیکس به پایگاه داده‌ای با قابلیت انطباق ACID نیاز دارد. در این میان، MySQL با داشتن ساختاری مستحکم و امکان راه‌اندازی چندین سرور اصلی همزمان (Master-Master Setup)، گزینه‌ای ایده‌آل به شمار می‌رود. این سرورهای اصلی بر روی نمونه‌های قدرتمند EC2 آمازون و با استفاده از موتور ذخیره‌سازی InnoDB مستقر شده‌اند.

یکی از ویژگی‌های بارز این پیکربندی، بهره‌گیری از «پروتکل تکثیر همزمان» است. بدین معنی که هر گونه نوشته‌ای که روی سرور اصلی اولیه انجام می‌شود، به‌طور همزمان بر روی سرور اصلی دیگر نیز تکثیر می‌گردد. تأیید نهایی تنها زمانی صادر می‌شود که صحت نوشتن اطلاعات در هر دو سرور اصلی تأیید شده باشد. این امر، سطح بالایی از دسترسی‌پذیری داده‌ها را تضمین می‌کند.

شکل ۹- معماری سطح بالای MySQL در Netflix
شکل ۹- معماری سطح بالای MySQL در Netflix


نتفلیکس برای هر گره (چه محلی و چه منطقه‌ای)، یک کپی خواندنی (Read Replica) نیز راه‌اندازی کرده است. این کار، دسترس‌پذیری و مقیاس‌پذیری بالایی را به ارمغان می‌آورد. به این ترتیب، تمامی پرس‌وجوهای خواندنی به سمت کپی‌های خواندنی هدایت می‌شوند و تنها پرس‌وجوهای نوشتنی به سمت سرورهای اصلی هدایت می شوند.

در صورت بروز خطا در سرور اصلی اولیه‌ی MySQL، سرور اصلی ثانویه به‌سرعت نقش اصلی را بر عهده می‌گیرد و ورودی DNS متعلق به پایگاه داده (Route53) به این سرور جدید تغییر مسیر داده می‌شود. بدین ترتیب، پرس‌وجوهای نوشتنی نیز به سمت این سرور اصلی جدید هدایت خواهند شد.

سرویس Cassandra: انعطاف‌پذیری در برابر سیل داده‌ها

سرویس Cassandra یک پایگاه داده‌ NoSQL است که توانایی مدیریت حجم عظیمی از داده‌ها را دارد و به خوبی از پسِ عملیات سنگین خواندن و نوشتن برمی‌آید. با افزایش روزافزون کاربران نتفلیکس، حجم داده‌های مربوط به سابقه‌ی تماشای هر عضو نیز به طرز چشمگیری افزایش یافت. این حجم عظیم داده، مدیریت آن‌ها را به چالشی جدی تبدیل کرده است.

شکل 10- معماری سطح بالای Cassandra در Netflix
شکل 10- معماری سطح بالای Cassandra در Netflix


نتفلیکس با در نظر گرفتن دو هدف اصلی، اقدام به مقیاس‌گذاری ذخیره‌سازی داده‌های سابقه‌ تماشا نموده است:

  • کاهش اشغال فضای ذخیره‌سازی
  • حفظ کارایی ثابت خواندن/نوشتن با افزایش داده‌های تماشای هر عضو(نسبت نوشتن به خواندن داده‌های سابقه‌ی تماشا در Cassandra حدود 9:1 است)

مدل داده‌ای کاملاً غیر عادی‌شده:

  • بیش از 50 خوشه Cassandra
  • بیش از 500 گره
  • بیش از 30 ترابایت پشتیبان‌گیری روزانه
  • بزرگ‌ترین خوشه: 72 گره
  • یک خوشه: بیش از 250 هزار نوشتن در ثانیه

از تک‌ردیفی تا فشرده‌سازی:

در ابتدا، سابقه‌ تماشا در Cassandra تنها در یک ردیف (Row) ذخیره می‌شد. با افزایش کاربران نتفلیکس، اندازه‌ی ردیف‌ها و به تبع آن کل حجم داده‌ها نیز افزایش یافت. این امر منجر به افزایش مصرف فضای ذخیره‌سازی، هزینه‌های عملیاتی بیشتر و کاهش سرعت عملکرد برنامه شد. برای حل این مشکل، نتفلیکس اقدام به فشرده‌سازی ردیف‌های قدیمی نمود.

بدین منظور، داده‌ها به دو بخش تقسیم شدند:

  • سابقه‌ی تماشای زنده: (Live Viewing History - LiveVH) این بخش شامل تعداد محدودی از داده‌های اخیر سابقه‌ی تماشا با به‌روزرسانی‌های مکرر است. این داده‌ها که به وفور برای وظایف ETL مورد استفاده قرار می‌گیرند، به صورت فشرده‌نشده ذخیره می‌شوند.
  • سابقه‌ی تماشای فشرده‌شده: (Compressed Viewing History - CompressedVH) حجم عظیمی از سابقه‌های تماشای قدیمی با به‌روزرسانی‌های نادر در این بخش، داده‌ها در یک ستون واحد برای هر کلید ردیف (Row Key) و به صورت فشرده ذخیره می‌شوند تا فضای ذخیره‌سازی اشغال‌شده به حداقل برسد.

پردازش داده‌ها در نتفلیکس: با کافکا و چوکوا در دنیای داده‌های بزرگ غوطه‌ور شوید

هنگامی که بر روی یک ویدیو در نتفلیکس کلیک می‌کنید، انبوهی از داده‌ها ظرف کسری از ثانیه پردازش می‌شوند. اما این جادو چگونه رخ می‌دهد؟ در این بخش، سفری به دل خط لوله تکامل داده‌های نتفلیکس خواهیم داشت و راز چابکی و کارایی خیره‌کننده‌ی این پلتفرم را کشف خواهیم کرد.

نتفلیکس برای پردازش اطلاعات از دو قهرمان قدرتمند دنیای داده‌های بزرگ بهره می‌گیرد: کافکا و چوکوا. آن‌ها روزانه چیزی حدود 500 میلیارد رویداد داده‌، معادل 1.3پتابایت و در ساعات اوج 8 میلیون رویداد به ازای 24 گیگابایت در ثانیه را هضم می‌کنند. این رویدادها شامل طیف گسترده‌ای از اطلاعات هستند، از جمله:

  • گزارش‌های خطا
  • فعالیت‌های رابط کاربری
  • رویدادهای عملکرد
  • فعالیت‌های تماشای ویدیو
  • رویدادهای عیب‌یابی و تشخیص

چوکوا، قهرمان نخست ما، سیستمی متن‌باز برای گردآوری داده‌های سیستم‌های توزیع‌شده است. او بر روی شانه‌های غول‌هایی به نام HDFS و چارچوب MapReduce سوار شده و از مقیاس‌پذیری و استحکام آن‌ها بهره می‌برد. چوکوا با انبوهی از ابزارهای نیرومند و انعطاف‌پذیر، امکان به نمایش درآوردن، نظارت و تحلیل نتایج را نیز فراهم می‌کند. چوکوا، رویدادها را از گوشه و کنار سیستم جمع‌آوری می‌کند و به شما این امکان را می‌دهد تا آن‌ها را رصد و تحلیل کنید یا از طریق داشبورد به تماشای‌ آنها بنشینید. چوکوا، با دقت تمام، رویدادها را در قالب توالی پرونده‌های HDFS (ذخیره‌ساز شیء آمازون S3) ثبت می‌کند. سپس، تیم کارآزموده‌ی داده‌های بزرگ، دست به کار شده و این پرونده‌های S3 را در قالب Parquet در هاو و هایو پردازش می‌کنند. این فرآیند، پردازش دسته‌ای نام دارد که عموماً به صورت ساعتی یا روزانه انجام می‌شود و کل مجموعه داده‌ها را مورد بررسی قرار می‌دهد.

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

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

کاربرد Elastic Search در نتفلیکس

در سال‌های اخیر، شاهد رشد چشمگیری در استفاده از Elastic Search در نتفلیکس بوده‌ایم. این شرکت در حال حاضر حدود 150 خوشه و 3500 هاست با نمونه‌های این موتور جستجو را اجرا می‌کند

سرویس Elastic Search ابزاری قدرتمند است که در نتفلیکس برای سه کارکرد اصلی به کار می‌رود:

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

جادوی انتخاب فیلم در نتفلیکس: راز الگوریتم و اسپارک

نتفلیکس، پادشاه بلامنازع فیلم و سریال، از فناوری‌های پیچیده‌ای برای شخصی‌سازی پیشنهادات خود استفاده می‌کند. اگر تا به حال متوجه شده‌اید که صف فیلم‌های پیشنهادی‌تان با دوستتان بسیار متفاوت است، دلیلش همین است! اما چگونه نتفلیکس به این حد از درک عمیق از سلایق شخصی می‌رسد؟

پاسخ این معما در دو فناوری قدرتمند نهفته است: یادگیری ماشین و اسپارک.

بیایید با مثالی کار را شروع کنیم. زمانی که وارد صفحه اصلی نتفلیکس می‌شوید، با ردیف‌های متنوعی از فیلم‌های مختلف روبرو می‌شوید. آیا هر کاربری این ردیف‌ها را به یک شکل می‌بیند؟ قطعا خیر!

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

در این جادوگری مدرن، دو عنصر کلیدی نقش آفرینی می‌کنند:

یادگیری ماشین: نتفلیکس از الگوریتم‌های هوشمند یادگیری ماشین استفاده می‌کند تا اطلاعات شما را تحلیل کند. این الگوریتم‌ها با بررسی سوابق تماشای فیلم‌هایتان، امتیازدهی‌های شما و حتی عادت‌های تماشایی ‌شما (زمان تماشا، مدت زمان تماشا و ...) ترجیحات و الگوهای رفتاری شما را درک می‌کنند.

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

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

با تشکر از آقای امیرارشیا ادیبان (دانشجوی کارشناسی مهندسی کامپیوتر) که در گردآوری این مقاله مشارکت جدی داشتند.

برخی منابع: