دسته: کلاد و سرویس‌های ابری

  • بنچمارک فراتر از لایه اپلیکیشن؛ اوبر چگونه تغییرات زیرساخت و SKUهای ابری را ارزیابی می‌کند؟

    بنچمارک فراتر از لایه اپلیکیشن؛ اوبر چگونه تغییرات زیرساخت و SKUهای ابری را ارزیابی می‌کند؟

    اوبر به‌تازگی جزئیات سیستمی داخلی با نام Ceilometer را منتشر کرده است؛ یک چارچوب بنچمارک تطبیقی که برای ارزیابی عملکرد زیرساخت اوبر فراتر از شاخص‌های سطح اپلیکیشن طراحی شده است. این سیستم به اوبر کمک می‌کند تا SKUهای جدید ابری را ارزیابی کند، تغییرات زیرساختی را اعتبارسنجی کند و ابتکارات بهینه‌سازی و افزایش بهره‌وری را با استفاده از بنچمارک‌هایی تکرارپذیر و نزدیک به شرایط واقعی تولید (Production-like) اندازه‌گیری کند.

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

    نمودار معماری سقف‌سنج (منبع: پست وبلاگ اوبر)

    پایان بنچمارک‌های دستی و پراکنده

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

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

    معماری توزیع‌شده برای نتایج قابل‌اعتماد

    Ceilometer به‌صورت یک سیستم توزیع‌شده طراحی شده که اجرای بنچمارک‌ها را روی ماشین‌های اختصاصی هماهنگ می‌کند. تست‌ها به‌صورت موازی اجرا می‌شوند تا رفتار بارهای کاری واقعی را شبیه‌سازی کنند. خروجی خام تست‌ها در فضای ذخیره‌سازی پایدار (Blob Storage) نگه‌داری شده و پس از اعتبارسنجی و نرمال‌سازی، وارد انبار داده متمرکز اوبر می‌شوند.

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

    پشتیبانی از طیف گسترده‌ای از بارهای کاری

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

    • بنچمارک‌های مصنوعی (Synthetic) مانند
      SpecCPU2017، SPECjbb2015، NetPerf و FIO برای سنجش عملکرد CPU، حافظه، شبکه و ذخیره‌سازی
    • برای سیستم‌های Stateful، این چارچوب با پلتفرم Odin اوبر یکپارچه شده تا بارهای کاری دیتابیس را در شرایطی نزدیک به تولید ارزیابی کند
    • سرویس‌های Stateless نیز با استفاده از فریم‌ورک Ballast تست می‌شوند؛ سیستمی که ترافیک تولید را به‌صورت تطبیقی شبیه‌سازی می‌کند

    از ارزیابی سرورها تا اعتبارسنجی تغییرات زیرساخت

    یکی از کاربردهای اصلی Ceilometer، ارزیابی شکل سرورها (Server Shape) و تأیید SKUهای ابری جدید است. تولیدکنندگان سخت‌افزار و ارائه‌دهندگان سرویس ابری می‌توانند این بنچمارک‌ها را در محیط خود اجرا کرده و نتایج را با اوبر به اشتراک بگذارند؛ موضوعی که به اوبر امکان می‌دهد پیش از ورود یک SKU جدید، دید دقیقی از عملکرد آن داشته باشد.

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

    نگاه اوبر به آینده Ceilometer

    Nav Kankani، مدیر ارشد مهندسی و معمار پلتفرم در تیم زیرساخت اوبر، در پستی در لینکدین می‌گوید:

    «چارچوب بنچمارک تطبیقی اوبر، بارهای کاری واقعی تولید را مدل‌سازی می‌کند تا تصمیم‌گیری درباره پلتفرم‌های ابری را هدایت کند. Ceilometer با پوشش بارهای Stateless، Stateful، Batch و AI/ML امکان بررسی هم‌طراحی سخت‌افزار و نرم‌افزار را ساده کرده و به افزایش بهره‌وری در کل ناوگان زیرساختی ما کمک می‌کند.»

    با ادامه تحول زیرساخت‌های اوبر، Ceilometer نیز در حال گسترش است. از جمله برنامه‌های آینده می‌توان به موارد زیر اشاره کرد:

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

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

  • سیستم توزیع‌شده چیست؟

    سیستم توزیع‌شده چیست؟

    سیستم توزیع‌شده (Distributed System) مجموعه‌ای از چندین کامپیوتر مستقل است که برای کاربران مانند یک سیستم واحد و یکپارچه عمل می‌کنند. این کامپیوترها یا «نودها» از طریق شبکه با یکدیگر ارتباط برقرار کرده، فعالیت‌های خود را هماهنگ می‌کنند و با اشتراک‌گذاری منابع، داده و وظایف، به یک هدف مشترک دست می‌یابند.

    تفاوت سیستم متمرکز و سیستم توزیع‌شده

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

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

    معماری‌های رایج در سیستم‌های توزیع‌شده

    ۱. معماری کلاینت–سرور (Client-Server)

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

    ۲. معماری همتا به همتا (P2P)

    در این ساختار هر نود هم نقش سرور و هم نقش کلاینت را دارد و منابع به‌صورت مستقیم بین کاربران به اشتراک گذاشته می‌شود.
    نمونه: شبکه‌های اشتراک فایل مانند BitTorrent.

    ۳. معماری سه‌لایه (Three-Tier)

    این مدل از سه لایه تشکیل شده است:

    • رابط کاربر (Presentation)
    • منطق کسب‌وکار (Application)
    • داده‌ها (Database)

    این تفکیک، توسعه و مدیریت سیستم را آسان‌تر و مقیاس‌پذیرتر می‌کند.
    نمونه: بسیاری از وب‌اپلیکیشن‌های مدرن.

    ۴. معماری میکروسرویس‌ها (Microservices)

    در این معماری اپلیکیشن به سرویس‌های کوچک و مستقل تقسیم می‌شود که هر کدام وظیفه مشخصی دارند و از طریق API یا پیام‌رسانی با هم در ارتباط‌اند.
    نمونه: سرویس‌های مختلف در نتفلیکس یا آمازون (حساب کاربری، سفارش‌ها، پیشنهادها و…).

    ۵. معماری سرویس‌گرا (SOA)

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

    ۶. معماری رویدادمحور (Event-Driven)

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

    سیستم‌های توزیع‌شده در دنیای امروز

    امروزه رایج‌ترین شکل سیستم‌های توزیع‌شده مبتنی بر اینترنت و رایانش ابری است؛ جایی که بار پردازشی بین ده‌ها سرور مجازی در فضای ابری توزیع می‌شود. این سرورها بسته به نیاز ایجاد شده و پس از انجام وظیفه از بین می‌روند.

    نمونه‌ای از یک سیستم توزیع‌شده

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

    اجزای کلیدی در یک سیستم توزیع‌شده
    • نرم‌افزار سیستم توزیع‌شده: مسئول هماهنگی فعالیت‌ها و اشتراک منابع بین نودها
    • پایگاه داده توزیع‌شده: ذخیره و مدیریت داده‌های پردازش‌شده توسط هر نود
    نحوه تبادل داده در یک سیستم توزیع‌شده

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

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

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

    ویژگی‌های سیستم توزیع‌شده

    • اشتراک‌گذاری منابع: توانایی استفاده از هر نوع سخت‌افزار، نرم‌افزار یا داده در هر نقطه از سیستم.
    • بازبودن (Openness): میزان امکان توسعه، گسترش و به‌اشتراک‌گذاری سرویس‌ها و نرم‌افزار با دیگر سیستم‌ها.
    • هم‌روندی (Concurrency): چندین کاربر در نقاط مختلف می‌توانند هم‌زمان یک کار را انجام دهند و هر سیستم محلی دارای منابع و سیستم‌عامل مستقل است.
    • مقیاس‌پذیری: افزایش ظرفیت سیستم با اضافه‌کردن پردازنده‌ها یا نودهای بیشتر که باعث افزایش پاسخ‌دهی می‌شود.
    • تحمل‌پذیری خطا (Fault Tolerance): در صورت بروز مشکل سخت‌افزاری یا نرم‌افزاری، سیستم همچنان به فعالیت ادامه می‌دهد و عملکرد آن مختل نمی‌شود.
    • شفافیت (Transparency): پیچیدگی‌های سیستم توزیع‌شده از دید کاربر و برنامه‌های کاربردی پنهان می‌ماند تا تجربه‌ای ساده و قابل اتکا ایجاد شود.

    مزایای سیستم توزیع‌شده

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

    معایب سیستم توزیع‌شده

    • نبود برخی از ابزارها یا نرم‌افزارهای جامع برای مدیریت کامل سیستم‌های توزیع‌شده.
    • چالش‌های امنیتی به‌دلیل توزیع‌شدگی داده و دسترسی‌های متعدد.
    • احتمال اشباع‌شدن شبکه؛ هرگونه اختلال یا تأخیر در شبکه مستقیماً بر دسترسی کاربران تأثیر می‌گذارد.
    • پیچیدگی بالای مدیریت پایگاه داده در مقایسه با سیستم‌های تک‌کاربره یا متمرکز.
    • خطر ترافیک بیش از حد در شبکه اگر تعداد زیادی نود هم‌زمان داده ارسال کنند.

    کاربردهای سیستم‌های توزیع‌شده

    • مالی و تجارت الکترونیک: آمازون، eBay، بانکداری آنلاین، فروشگاه‌های اینترنتی
    • اطلاعات و خدمات دیجیتال: موتورهای جستجو، ویکی‌پدیا، شبکه‌های اجتماعی، رایانش ابری
    • فناوری‌های ابری: AWS، Salesforce، مایکروسافت Azure، SAP
    • سرگرمی: بازی‌های آنلاین، سرویس‌های موسیقی، یوتیوب
    • سلامت: پرونده الکترونیک بیماران، سیستم‌های سلامت دیجیتال
    • حمل‌ونقل و لجستیک: GPS، سرویس‌هایی مانند Google Maps

    آیا سیستم‌های توزیع‌شده و میکروسرویس‌ها یکسان‌اند؟

    این دو مفهوم با یکدیگر مرتبط‌اند، اما کاملاً یکسان نیستند.

    سیستم توزیع‌شده:

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

    میکروسرویس‌ها:

    • یک سبک معماری که اپلیکیشن را به سرویس‌های کوچک، مستقل و چابک تقسیم می‌کند.
    • هر سرویس می‌تواند به‌طور جداگانه توسعه، استقرار و مقیاس‌دهی شود.
    • ارتباط میان سرویس‌ها معمولاً از طریق پروتکل‌های سبک مانند HTTP یا پیام‌صف‌ها انجام می‌شود.

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

    جمع‌بندی

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