یادداشتهای مطالعه
Designing Data-Intensive Applications از آن کتابهایی است که نحوه شنیدن نیازمندیهای محصول را عوض میکند.
موضوع ظاهریاش سیستمهای داده است: موتور ذخیرهسازی، replication، consistency، transaction، stream، پردازش batch و هماهنگی توزیعشده. ارزش عمیقترش این است که یاد میدهد قبل از انتخاب زیرساخت، سؤالهای بهتری بپرسید.
برای مهندسی محصول مهم است چون بیشتر مسئلههای محصولی دیر یا زود تبدیل به مسئله داده میشوند:
- منبع حقیقت کجاست؟
- کدام خواندنها باید تازه باشند و کدام میتوانند stale باشند؟
- وقتی نوشتن در یک جا موفق و در جای دیگر شکست میخورد چه میشود؟
- سیستم برای transaction، analytics، sync، search یا workflow بهینه شده؟
- کدام حالتهای شکست برای کاربر قابل قبول است؟
ویرایش دوم مفید است چون معماری امروز بیشتر به سرویسهای ابری، دیتابیسهای managed، سیستمهای serverless، پلتفرمهای داده و workloadهای نزدیک به AI رفته. اصول قدیمی هنوز مهماند، اما سطح تصمیمگیری پهنتر شده.
ایدههای مفید
معماری یعنی مدیریت tradeoff
کتاب وقتی قویتر است که جواب آسان نمیدهد. سیستمهای قابل اعتماد با انتخاب دیتابیس محبوب ساخته نمیشوند. با فهمیدن شکل داده، بودجه latency، شکستهای محتمل و مدل عملیاتی ساخته میشوند.
داده از کد بیشتر عمر میکند
جایگزین کردن کد معمولاً از داده آسانتر است. تصمیمهای schema، فرمت event، مسیر migration و قوانین retention محدودیتهای بلندمدت محصول میشوند. یادآوری خوبی است که جریان داده را با خواننده و migrationهای آینده طراحی کنیم.
سیستمهای توزیعشده طراحی محصولاند
مدلهای consistency فقط تئوری backend نیستند. تعیین میکنند کاربر بعد از save، edit، share، sync یا همکاری چه میبیند. محصولی که این تصمیمها را پنهان کند، باز هم با رفتار گیجکننده آنها را نشان میدهد.
چرا نزدیک نگهش میدارم
این کتاب مرجع لحظههایی است که سیستم از یک دیتابیس و یک چرخه request فراتر میرود. بحثهای مبهم معماری را به سؤالهای مشخص درباره durability، ordering، isolation، observability و recovery تبدیل میکند.
دریافت کتاب
- سایت رسمی: Designing Data-Intensive Applications
