هر سیستم توزیعشدهای برای دستیابی به قابلیت اطمینان (Reliability)، کارایی و کیفیت تلاش میکند، اما ساخت چنین سیستمی دشوار است. ایجاد مجموعهای از الگوهای طراحی (Design Patterns) به توسعهدهندگان نرمافزار و معماران سیستم اجازه میدهد تا از یک زبان مشترک برای توصیف سیستمهای خود استفاده کرده و از الگوها و تجربیات توسعهیافته توسط دیگران یاد بگیرند. محبوبیت کانتینرها و Kubernetes راه را برای الگوهای اصلی سیستمهای توزیعشده و مولفههای کانتینری قابل استفاده مجدد هموار میسازد. این راهنمای کاربردی مجموعهای از الگوهای عمومی و تکرارپذیر را ارائه میدهد تا به هدایت سیستمهایی که میسازید کمک کند، آن هم با استفاده از الگوها و روشهای متداول استخراجشده از برخی از پربازدهترین سیستمهای توزیعشده امروزی. این الگوهای متداول، سیستمهای ساختهشده توسط شما را بسیار قابل فهمتر و کارآمدتر میکنند، حتی اگر قبلاً هرگز یک سیستم توزیعشده نساخته باشید. نویسنده، Brendan Burns، نشان میدهد چگونه میتوانید الگوهای طراحی نرمافزار موجود را برای طراحی و ساخت برنامههای کاربردی توزیعشده مطمئن با شرایط خود تطبیق دهید. مهندسان سیستم و توسعهدهندگان برنامه یاد خواهند گرفت که چگونه این الگوهای دیرینه، یک زبان و چارچوب مشترک برای افزایش چشمگیر کیفیت سیستم شما فراهم میکنند. این ویراست دوم بهطور کامل به روز شده و شامل فصلهای جدیدی در زمینه استنتاج هوش مصنوعی (AI Inference)، آموزش هوش مصنوعی و ساخت سیستمهای مقاوم برای دنیای واقعی است.
اشتراکی

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

مقدمه

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

الگوی سايدکار

الگوی سفیر

الگوی آداپتور
فصل ۵ الگوهای گروهبندی مجموعهای از کانتینرها را توصیف کرد که روی یک ماشین برنامهریزی میشوند. این گروهها سیستمهای وابسته و متصل به هم هستند که به منابع محلی مشترک مانند دیسک، رابط شبکه یا ارتباطات بینفرآیندی متکی هستند. این گروههای کانتینری الگوهای مهمی هستند، اما بلوکهای سازنده سیستمهای بزرگتر نیز محسوب میشوند.
قابلیت اطمینان، مقیاسپذیری و تفکیک وظایف ایجاب میکنند که سیستمهای دنیای واقعی از مولفههای مختلفی ساخته شوند که روی چندین ماشین توزیع شدهاند. در مقایسه با الگوهای تکگرهای، الگوهای توزیعشده چندگرهای دارای اتصال ضعیف (Loose Coupling) بیشتری هستند. اگرچه این الگوها شیوههای ارتباط بین مولفهها را تعیین میکنند، اما این ارتباطات بر اساس فراخوانیهای شبکهای است. علاوه بر این، بسیاری از فراخوانیها به صورت موازی انجام میشوند و سیستمها به جای محدودیتهای سخت، از طریق همگامسازی سبک هماهنگ میشوند.
اخيراً واژه مایکروسرویس (Microservice) به اصطلاحی متداول برای توصیف معماریهای نرمافزاری توزیعشده چندگرهای تبدیل شده است. مایکروسرویسها سیستمی را توصیف میکنند که از مولفههای مختلفی تشکیل شده و در فرآیندهای مجزا اجرا میشوند و از طریق APIهای تعریفشده ارتباط برقرار میکنند. این معماری در مقابل سیستمهای یکپارچه (Monolithic) قرار دارد که تمام وظایف سرویس را در یک برنامه واحد و به شدت هماهنگ قرار میدهند.

سرویسهای تکرارشده با متعادلکننده بار

سرویسهای بخشبندیشده

الگوی پراکنده/گردآوری

توابع و پردازش رویدادمحور

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

سیستمهای صف کاری

پردازش بچ رویدادمحور

پردازش بچ هماهنگشده
تاکنون ما بر الگوهایی برای ساخت برنامهها، از گرههای واحد گرفته تا سیستمهای توزیعشده پیچیده تمرکز کردهایم. علاوه بر این الگوها، بخشهایی از سیستمهای ما وجود دارند که برای تمام برنامههایی که میسازید عمومی هستند.
فصلهای این بخش برخی از این مفاهیم عمومی را پوشش میدهند. فصل ۱۴ به قابلیت مشاهده (Observability) برای برنامه شما از طریق ثبت لاگ، پایش و هشداردهی میپردازد. قابلیت مشاهده برای این که درک کنید آیا برنامه شما به درستی کار میکند یا خیر حیاتی است. فصل ۱۵ هوش مصنوعی را پوشش میدهد که شیوه تفکر ما درباره برنامهها و رابطهای کاربری را دگرگون کرده است.
در نهایت، فصل ۱۶ این بخش را با ارائه اشتباهات و خطاهای رایجی که به طور ناگواری در سیستمهای توزیعشده رخ میدهند به پایان میرساند. صرف نظر از نوع برنامه شما، تمام این فصلها شما را قادر میسازند تا آن را هوشمندتر و مطمئنتر سازید.

الگوهای پایش و قابلیت مشاهده

استنتاج و سرویسدهی هوش مصنوعی

الگوهای شکست متداول
16 فصل در حال تولید
مدت زمان خوانش
05:59
نوع کتاب
اشتراکی
شرکت کنندگان
0 نفر
تولید کتاب
۳۱ شهریور ۱۴۰۵