The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
Martin Kleppmann, Chris Riccomini

#Data
#Designing_Data
#SQL
#NoSQL
#HTTP
#TCP
#Data_Lake
#Data_Warehouse
#GraphQL
#Cloud_Native
#GDPR
🚀 دادهها امروزه قلب تپنده چالشهای طراحی سیستم هستن. مسائل پیچیدهای مثل مقیاسپذیری، یکپارچگی، قابلیت اطمینان، کارایی و نگهداری باید به درستی حل بشن. علاوه بر این، با تنوع عجیبی از سیستمها روبرو هستیم؛ از دیتابیسهای رابطهای و NoSQL گرفته تا انبار دادهها (Data Warehouses) و دریاچه دادهها (Data Lakes). سرویسهای ابری، سرویسهای محلی و دیتابیسهای توکار هم که جای خود دارن. اما انتخاب درست برای اپلیکیشن شما کدومه؟ چطور میشه از بین این همه اصطلاحات دهنپرکن، مسیر درست رو پیدا کرد؟
💡 در ویرایش دوم این کتاب، نویسندگان یعنی مارتین کلپمن و کریس ریکومینی، بر اساس پایههای مستحکمی که در نسخه اول بنا شده بود، تکنولوژیهای جدید و ترندهای نوظهور رو هم اضافه کردن. شما در مسیر تصمیمگیریها و سبکسنگین کردنهای (Trade-offs) طراحی یک سیستم داده مدرن راهنمایی میشید، یاد میگیرید چطور ابزار مناسب رو انتخاب کنید و مفاهیم بنیادی سیستمهای توزیع شده رو درک کنید.
🛠 نگاهی دقیق به زیر کاپوت سیستمهایی که همین الان استفاده میکنید بندازید و یاد بگیرید چطور ازشون بهینهتر استفاده کنید.
🛠 با شناسایی نقاط قوت و ضعف ابزارهای مختلف، تصمیمات آگاهانه بگیرید.
🛠 یاد بگیرید که سرویسهای ابری بزرگ چطور برای مقیاسپذیری، تحمل خطا و یکپارچگی طراحی شدن.
🛠 اصول کلیدی که دیتابیسهای مدرن بر پایه اونها ساخته شدن رو درک کنید.
📑 فهرست مطالب
📘 چه کسانی باید این کتاب رو بخونن؟
اگر هر کدوم از موارد زیر در مورد شما صدق میکنه، این کتاب براتون ارزشمنده:
• شما مهندس نرمافزار، معمار نرمافزار یا مدیر فنی هستید که باید درباره معماری سیستمهایی که روشون کار میکنید تصمیم بگیرید؛ مثلا باید ابزارهای حل یک مسئله خاص رو انتخاب کنید و بفهمید چطور به بهترین شکل ازشون استفاده کنید. این موضوع مخصوصا برای سیستمهای بکاند صدق میکنه.
• شما مهندس داده هستید که میخواید بافت کلی سیستمهایی که باهاشون سر و کار دارید رو درک کنید، یا مهندس ابر (Cloud) هستید که دنبال بینش عمیقتری نسبت به زیرساخت سیستمهای مورد استفادهتون میگردید. متوجه میشید که با وجود اینکه سیستمهای توزیع شده مدرن پیچیدگیهای زیادی رو از دید شما مخفی میکنن، اما درک اصول زیربنایی اونها برای بهینهسازی عملکرد و خطایابی فوقالعاده مفیده.
• میخواید یاد بگیرید چطور سیستمهای داده رو مقیاسپذیر کنید (مثلا برای پشتیبانی از اپلیکیشنهایی با میلیونها کاربر)، پایداری بالا داشته باشید (حداقل زمان از کار افتادگی)، از نظر عملیاتی مستحکم باشید و در درازمدت راحتتر سیستم رو نگهداری کنید (حتی وقتی سیستم بزرگ میشه و تکنولوژیها تغییر میکنن).
• دارید برای مصاحبههای شغلی «طراحی سیستم» آماده میشید که در اون از شما میخوان معماری یک اپلیکیشن رو ترسیم کنید، و نیاز دارید اصول معماریهای خوب داده رو یاد بگیرید.
• کنجکاو هستید بدونید پشت صحنه وبسایتها و سرویسهای آنلاین بزرگ، و داخل دیتابیسهای مختلف و سیستمهای پردازش داده چی میگذره؛ مخصوصا اگر دوست دارید عمیقتر از کلمات قلمبهسلمبه برید تا به درک فنی دقیق و درستی از تکنولوژیهای مختلف و تفاوتهاشون برسید.
💻 این کتاب فرض میکنه که شما تجربهای در ساخت اپلیکیشنهای تحت وب دارید و با دیتابیسهای رابطهای و SQL آشنا هستید. درک سطح بالا از پروتکلهای رایج شبکه مثل TCP و HTTP هم کمککنندهست. زبان برنامهنویسی یا فریمورک خاصی که باهاش کار میکنید، در استفاده از این کتاب فرقی ایجاد نمیکنه.
✨ در ویرایش دوم چه چیزهایی جدیده؟
این ویرایش دوم همون اهداف و محدودهی نسخه اول کتاب «طراحی اپلیکیشنهای با بار داده زیاد» رو داره که سال ۲۰۱۷ منتشر شد. با این حال، ما کل کتاب رو به طور کامل بازبینی کردیم تا تغییرات تکنولوژی در دهه اخیر رو منعکس کنیم و شفافیت توضیحات رو بالا ببریم.
🚀 بزرگترین تغییرات فنی که از زمان ویرایش اول روی این کتاب تاثیر گذاشته، انفجار علاقه به هوش مصنوعی و ظهور معماریهای سیستم دادهی Cloud Native هست. با اینکه این کتاب ذاتا درباره هوش مصنوعی نیست، اما پوشش سیستمهای دادهای که از هوش مصنوعی و یادگیری ماشین پشتیبانی میکنن رو اضافه کردیم؛ از جمله ایندکسهای برداری (Vector Indexes) که برای جستجوی معنایی استفاده میشن، دیتافریمها (DataFrames) که برای آموزش دیتاستها به کار میرن و سیستمهای پردازش دستهای برای آمادهسازی حجم عظیم دادههای آموزشی. ایدههای Cloud Native، مثل ساخت سیستمهای داده روی فضاهای ذخیرهسازی شیء (Object Stores) به جای دیسکهای محلی، در سراسر کتاب گنجانده شده.
📝 همچنین بحثهایی درباره موتورهای همگامسازی و نرمافزارهای Local-first، موتورهای گردش کار (Workflow) و اجرای بادوام، متدهای رسمی و تستهای تصادفی، GraphQL و تکنولوژیهای دیگهای که ارزش دونستن دارن رو اضافه کردیم. کمی هم به زمینههای قانونی پرداختیم و تاثیر مقررات عمومی حفاظت از داده اتحادیه اروپا (GDPR) و قوانین مشابه رو بررسی کردیم. چند مورد رو هم حذف کردیم؛ مثلا چون MapReduce دیگه تقریبا منسوخ شده، فصل پردازش دستهای رو بر همین اساس بازنویسی کردیم و متاسفانه تصمیم گرفتیم نقشههای سبک تالکین (ارباب حلقهها) رو هم کنار بذاریم.
🔄 بعضی از بحثها بازبینی شدن و شمارهگذاری فصلها تغییر کرده. بعضی فصلها فقط نیاز به یک ویرایش سبک داشتن، در حالی که بقیه (مثل فصل ۱۰ درباره یکپارچگی و اجماع) تقریبا به طور کامل بازنویسی شدن تا شفافتر بشن. در مجموع، ویرایش دوم حدود ۶۰ صفحه طولانیتر از ویرایش اول شده.
👨💻 درباره نویسنده
مارتین کلپمن دانشیار دانشگاه کمبریج هست که در زمینه سیستمهای توزیع شده و پروتکلهای امنیتی تحقیق و تدریس میکنه. اون یکی از خالقان Automerge بوده، سابقه تاسیس استارتاپ داره و مهندس نرمافزار در لینکدین بوده، جایی که سیستمهای داده در مقیاس بزرگ رو پیادهسازی کرده.
Data is at the center of many challenges in system design today. Difficult issues such as scalability, consistency, reliability, efficiency, and maintainability need to be resolved. In addition, there's an overwhelming variety of systems, including relational databases, NoSQL datastores, data warehouses, and data lakes. There are cloud services, on-premises services, and embedded databases. What are the right choices for your application? How do you make sense of all these buzzwords?
In this second edition, authors Martin Kleppmann and Chris Riccomini build on the foundation laid in the acclaimed first edition, integrating new technologies and emerging trends. You'll be guided through the maze of decisions and trade-offs involved in building a modern data system, learn how to choose the right tools for your needs, and understand the fundamentals of distributed systems.
Table of Contents
Chapter 1. Trade-Offs in Data Systems Architecture
Chapter 2. Defining Nonfunctional Requirements
Chapter 3. Data Models and Query Languages
Chapter 4. Storage and Retrieval
Chapter 5. Encoding and Evolution
Chapter 6. Replication
Chapter 7. Sharding
Chapter 8. Transactions
Chapter 9. The Trouble with Distributed Systems
Chapter 10. Consistency and Consensus
Chapter 11. Batch Processing
Chapter 12. Stream Processing
Chapter 13. A Philosophy of Streaming Systems
Chapter 14. Doing the Right Thing
Who Should Read This Book?
If any of the following are true for you, you’ll find this book valuable:
This book assumes that you already have some experience building web-based applications and that you are familiar with relational databases and SQL. A high-level understanding of common network protocols like TCP and HTTP is helpful. Your choice of programming language or framework makes no difference for this book.
What’s New in the Second Edition?
This second edition has the same goals and scope as the first edition of Designing Data-Intensive Applications, which was published in 2017. However, we have thoroughly revised the entire book to reflect technological changes that have happened in the last decade and to improve the clarity of the explanations.
The biggest technical changes that have affected this book since the first edition are the explosion of interest in AI and the rise of cloud native data systems architectures. While this book is not about AI per se, we have added coverage of data systems that support AI and machine learning, including vector indexes (used for semantic search), DataFrames (used for training datasets), and batch processing systems for preparing large amounts of training data. Cloud native ideas, such as building data systems on top of object stores instead of local disks, have been woven in throughout the book.
We have also added discussions of sync engines and local-first software, workflow engines and durable execution, formal methods and randomized testing, GraphQL, and various other technologies that are worth knowing about. We have included a bit of legal context as well, by exploring the impact of the EU General Data Protection Regulation (GDPR) and related law. We’ve also taken a few things away—for example, as MapReduce is now largely obsolete, we have rewritten the batch processing chapter accordingly, and we sadly decided to drop the Tolkien-style maps.
A few discussions have been restructured, and the chapter numbering has changed. Some chapters required only a light edit, while others (such as Chapter 10, on consistency and consensus) were almost completely rewritten to make them clearer. Overall, the second edition is about 60 pages longer than the first.
Martin Kleppmann is an associate professor at the University of Cambridge, researching and teaching distributed systems and security protocols. He co-created Automerge, was a startup founder, and a software engineer at LinkedIn, where he implemented large-scale data systems.









