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

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

مقدمه
A Brief History of Systems Development • A Brief History of Patterns in Software Development • Formalization of Algorithmic Programming • Patterns for Object-Oriented Programming • The Rise of Open Source Software • The Value of Patterns, Practices, and Components • Standing on the Shoulders of Giants • A Shared Language for Discussing Our Practice • Shared Components for Easy Reuse • Summary
درحال تولید...

مفاهیم مهم سیستمهای توزیعشده
APIs and RPCs • Latency • Reliability • Percentiles • Idempotency • Delivery Semantics • Relational Integrity • Data Consistency • Orchestration and Kubernetes • Health Checks • Summary
درحال تولید...
این کتاب به سیستمهای توزیعشده میپردازد که برنامههای کاربردی ساختهشده از مولفههای مختلف روی ماشینهای مختلف هستند. با این حال، بخش اول این کتاب به الگوهایی اختصاص دارد که روی یک گره واحد وجود دارند. انگیزه این امر ساده است: کانتینرها بلوکهای سازنده اصلی برای الگوهای این کتاب هستند، اما در نهایت، گروههای کانتینرهای هممکان روی یک ماشین واحد، عناصر بنیادی الگوهای سیستمهای توزیعشده را تشکیل میدهند.
اگرچه واضح است چرا ممکن است بخواهید برنامه توزیعشده خود را به مجموعهای از کانتینرهای مختلف که روی ماشینهای مختلف اجرا میشوند تقسیم کنید، شاید انگیزه تقسیم مولفههای اجراشده روی یک ماشین واحد به کانتینرهای مختلف کمی مبهمتر باشد. برای درک انگیزه این گروههای کانتینری، ارزش دارد اهداف پشت کانتینریسازی بررسی شود. به طور کلی، هدف یک کانتینر ایجاد مرزهایی در اطراف منابع مشخص است (مثلاً این برنامه به دو هسته و ۸ گیگابایت حافظه نیاز دارد). به همین ترتیب، مرزها مالکیت تیم را مشخص میکنند (مثلاً این تیم مالک این ایمیج است). در نهایت، مرز برای تفکیک وظایف در نظر گرفته شده است (مثلاً این ایمیج این یک کار را انجام میدهد).
همه این دلایل انگیزهای برای تقسیم یک برنامه روی یک ماشین واحد به منطقهای از کانتینرها فراهم میکنند. ابتدا ایزولهسازی منابع را در نظر بگیرید؛ برنامه شما ممکن است از دو مولفه تشکیل شده باشد که یکی کاربرمحور است...

الگوی سايدکار
An Example Sidecar: Adding HTTPS to a Legacy Service • Dynamic Configuration with Sidecars • Modular Application Containers • Hands On: Deploying the topz Container • Building a Simple PaaS with Sidecars • Designing Sidecars for Modularity and Reusability • Parameterized Containers • Define Each Container’s API • Documenting Your Containers • Summary
درحال تولید...

الگوی سفیر
Using an Ambassador to Shard a Service • Hands On: Implementing a Sharded Redis • Using an Ambassador for Service Brokering • Using an Ambassador to Do Experimentation or Request Splitting • Hands On: Implementing 10% Experiments • Summary
درحال تولید...

الگوی آداپتور
Monitoring • Hands On: Using Prometheus for Monitoring • Logging • Hands On: Normalizing Different Logging Formats with fluentd • Adding a Health Monitor • Hands On: Adding Rich Health Monitoring for MySQL • Summary
درحال تولید...
فصل ۵ الگوهای گروهبندی مجموعهای از کانتینرها را توصیف کرد که روی یک ماشین برنامهریزی میشوند. این گروهها سیستمهای وابسته و متصل به هم هستند که به منابع محلی مشترک مانند دیسک، رابط شبکه یا ارتباطات بینفرآیندی متکی هستند. این گروههای کانتینری الگوهای مهمی هستند، اما بلوکهای سازنده سیستمهای بزرگتر نیز محسوب میشوند.
قابلیت اطمینان، مقیاسپذیری و تفکیک وظایف ایجاب میکنند که سیستمهای دنیای واقعی از مولفههای مختلفی ساخته شوند که روی چندین ماشین توزیع شدهاند. در مقایسه با الگوهای تکگرهای، الگوهای توزیعشده چندگرهای دارای اتصال ضعیف (Loose Coupling) بیشتری هستند. اگرچه این الگوها شیوههای ارتباط بین مولفهها را تعیین میکنند، اما این ارتباطات بر اساس فراخوانیهای شبکهای است. علاوه بر این، بسیاری از فراخوانیها به صورت موازی انجام میشوند و سیستمها به جای محدودیتهای سخت، از طریق همگامسازی سبک هماهنگ میشوند.
اخيراً واژه مایکروسرویس (Microservice) به اصطلاحی متداول برای توصیف معماریهای نرمافزاری توزیعشده چندگرهای تبدیل شده است. مایکروسرویسها سیستمی را توصیف میکنند که از مولفههای مختلفی تشکیل شده و در فرآیندهای مجزا اجرا میشوند و از طریق APIهای تعریفشده ارتباط برقرار میکنند. این معماری در مقابل سیستمهای یکپارچه (Monolithic) قرار دارد که تمام وظایف سرویس را در یک برنامه واحد و به شدت هماهنگ قرار میدهند.

سرویسهای تکرارشده با متعادلکننده بار
Stateless Services • Readiness Probes for Load Balancing • Hands On: Creating a Replicated Service in Kubernetes • Session Tracked Services • Application-Layer Replicated Services • Introducing a Caching Layer • Deploying Your Cache • Hands On: Deploying the Caching Layer • Expanding the Caching Layer • Rate Limiting and Denial-of-Service Defense • SSL Termination • Hands On: Deploying nginx and SSL Termination • Summary
درحال تولید...

سرویسهای بخشبندیشده
Sharded Caching • Why You Might Need a Sharded Cache • The Role of the Cache in System Performance • Replicated Sharded Caches • Hands On: Deploying an Ambassador and Memcache for a Sharded Cache • An Examination of Sharding Functions • Selecting a Key • Consistent Hashing Functions • Hands On: Building a Consistent HTTP Sharding Proxy • Sharded Replicated Serving • Hot Sharding Systems • Summary
درحال تولید...

الگوی پراکنده/گردآوری
Scatter/Gather with Root Distribution • Hands On: Distributed Document Search • Scatter/Gather with Leaf Sharding • Hands On: Sharded Document Search • Choosing the Right Number of Leaves • Scaling Scatter/Gather for Reliability and Scale • Summary
درحال تولید...

توابع و پردازش رویدادمحور
Determining When FaaS Makes Sense • The Benefits of FaaS • The Challenges of FaaS • The Need for Background Processing • The Need to Hold Data in Memory • The Costs of Sustained Request-Based Processing • Patterns for FaaS • The Decorator Pattern: Request or Response Transformation • Hands On: Adding Request Defaulting Prior to Request Processing • Handling Events • Hands On: Implementing Two-Factor Authentication • Event-Based Pipelines • Hands On: Implementing a Pipeline for New User Signup • Summary
درحال تولید...

انتخاب مالکیت
Determining If You Even Need Leader Election • The Basics of Leader Election • Hands On: Deploying etcd • Implementing Locks • Hands On: Implementing Locks in etcd • Implementing Ownership • Hands On: Implementing Leases in etcd • Handling Concurrent Data Manipulation • Summary
درحال تولید...
فصلهای قبلی الگوهایی برای برنامههای سرور بلندمدت و قابل اعتماد را توصیف کردند. این بخش به الگوهای پردازش بچ (دفعهای) میپردازد. بر خلاف برنامههای بلندمدت، انتظار میرود پردازشهای بچ فقط برای مدت زمان کوتاهی اجرا شوند. نمونههایی از پردازش بچ شامل تولید تجمیع دادههای دورسنجی کاربران، تحلیل دادههای فروش برای گزارشدهی روزانه یا هفتگی، یا تغییر فرمت فایلهای ویدیویی است.
پردازشهای بچ عموماً با نیاز به پردازش سریع حجم زیادی از دادهها با استفاده از موازیسازی برای سرعت بخشیدن به پردازش شناخته میشوند. مشهورترین الگو برای پردازش بچ توزیعشده، الگوی MapReduce است که خود به یک صنعت کامل تبدیل شده است. با این حال، چند الگوی مفید دیگر نیز برای پردازش بچ وجود دارد که در فصلهای بعدی توصیف میشوند.

سیستمهای صف کاری
A Generic Work Queue System • The Source Container Interface • Work Queue API • The Worker Container Interface • The Shared Work Queue Infrastructure • Hands On: Implementing a Video Thumbnailer • Dynamic Scaling of the Workers • The Multiworker Pattern • Summary
درحال تولید...

پردازش بچ رویدادمحور
Patterns of Event-Driven Processing • Copier • Filter • Splitter • Sharder • Merger • Hands On: Building an Event-Driven Flow for New User Signup • Publisher/Subscriber Infrastructure • Hands On: Deploying Kafka • Resiliency and Performance in Work Queues • Work Stealing • Errors, Priority, and Retry • Summary
درحال تولید...

پردازش بچ هماهنگشده
Join (or Barrier Synchronization) • Reduce • Hands On: Count • Sum • Histogram • Hands On: An Image Tagging and Processing Pipeline • Summary
درحال تولید...
تاکنون ما بر الگوهایی برای ساخت برنامهها، از گرههای واحد گرفته تا سیستمهای توزیعشده پیچیده تمرکز کردهایم. علاوه بر این الگوها، بخشهایی از سیستمهای ما وجود دارند که برای تمام برنامههایی که میسازید عمومی هستند.
فصلهای این بخش برخی از این مفاهیم عمومی را پوشش میدهند. فصل ۱۴ به قابلیت مشاهده (Observability) برای برنامه شما از طریق ثبت لاگ، پایش و هشداردهی میپردازد. قابلیت مشاهده برای این که درک کنید آیا برنامه شما به درستی کار میکند یا خیر حیاتی است. فصل ۱۵ هوش مصنوعی را پوشش میدهد که شیوه تفکر ما درباره برنامهها و رابطهای کاربری را دگرگون کرده است.
در نهایت، فصل ۱۶ این بخش را با ارائه اشتباهات و خطاهای رایجی که به طور ناگواری در سیستمهای توزیعشده رخ میدهند به پایان میرساند. صرف نظر از نوع برنامه شما، تمام این فصلها شما را قادر میسازند تا آن را هوشمندتر و مطمئنتر سازید.

الگوهای پایش و قابلیت مشاهده
Monitoring and Observability Basics • Logging • Metrics • Basic Request Monitoring • Advanced Request Monitoring • Alerting • Tracing • Aggregating Information • Summary
درحال تولید...

استنتاج و سرویسدهی هوش مصنوعی
The Basics of AI Systems • Hosting a Model • Distributing a Model • Development with Models • Retrieval-Augmented Generation • Testing and Deployment • Summary
درحال تولید...

الگوهای شکست متداول
The Thundering Herd • The Absence of Errors Is an Error • “Client” and “Expected” Errors • Versioning Errors • The Myth of Optional Components • Oops, We “Cleaned Up” Everything • Challenges with the Breadth of Inputs • Processing Obsolete Work • The “Second System” Problem • Summary
درحال تولید...
16 فصل در حال تولید
مدت زمان خوانش
5:59
نوع کتاب
اشتراکی
شرکت کنندگان
0 نفر
تولید کتاب
۳۱ شهریور ۱۴۰۵