بهعنوان یک مهندسی نرمافزار تا حالا شده که یک مسئول طراحی یک سامانه نرمافزاری خاص مثلاً طراحی یک برنامه چت گروهی یا یک برنامه با میلیونها کاربر شده باشید؟
تا حالا شده از شما سؤال شده باشه که در پشتصحنه پلتفرمهای معروف مثل اینستاگرام و تلگرام و یوتیوب چه میگذرد و به چه صورت کار میکنند؟
آیا شده که توی مصاحبههای استخدامی سؤالاتی مربوط به طراحی یک سامانه نرمافزاری خاص مثل طراحی گوگل درایو از شما بپرسند؟
قطعاً در بیشتر موارد پاسخ به سؤال مثبت هست.
حالا کتابی میخواهم معرفی کنم مربوط به این موضوع هست و اولینبار هست که به فارسی ترجمه میشه:
در هر فصل این کتاب به طراحی سیستمهایی زیر پرداخته شده هست.
در این فصل به بررسی مقیاسپذیری یک اپلیکیشن جهت پاسخ دهی به میلیونها کاربرِ در حال استفاده همزمان پرداخته شده است.
در این فصل به بررسی روش تخمین و محاسبات و برآورد منابع و هزینهها جهت پیاده سازی یک سامانه نرمافزاری پیچیده پرداخته شده است.
در فصل سوم به نکات مهم و مهارتهای نَرم در مصاحبه طراحی سامانههای نرمافزاری پرداخته شده است.
در این فصل به بررسی یک محدود کننده نرخ پرداخته شده و انواع روشهای پیادهسازی آن مورد نقد و بررسی قرار گرفته است.
در این فصل به الگوریتم Consistent Hash پرداخته شده است که این الگوریتم در سیستمهای توزیع شده بسیار پرکاربرد میباشد.
در این فصل یک ذخیرهساز یا پایگاه داده کلید-مقدار مورد بررسی قرار گرفته و پیادهسازی شده است.
در این فصل یک تولید کننده شناسه در سیستمهای توزیع پرداخته شده است.
در اين فصل، به يک سؤال مصاحبه طراحی سیستمی جالب و کلاسیک پرداخته شده و آن هم طراحی يک سرويس کوتاه کننده URL مانند tinyurl است.
در اين فصل، بر طراحی خزنده وب Web Crawler تمرکز شده است. خزنده وب يا web crawler که بهعنوان يک ربات يا spiderشناخته میشود که طرز گستردهای توسط موتورهای جستجو برای کشف محتوای جديد يا بهروز شده در وب استفاده میشود. محتوا میتواند يک صفحه وب، يک تصوير، يک ويدئو، يک فايل PDF و غیره باشد.
يک سیستم اعلان يا notificationدر سالهای اخیر به يک ويژگی بسیار محبوب برای بسیاری از برنامهها تبديل شده است. يک اعلان یا نوتیفیکیشن اطلاعات مهمی مانند اخبار فوری، بهروزرسانیهای محصول، رويدادها، پیشنهادها و غیره را به کاربر هشدار میدهد. اين مورد به بخشی ضروری از زندگی روزمره ما تبديل شده است. در اين فصل از شما خواسته میشود که يک سیستم اطلاعرسانی طراحی کنید.
در اين فصل از شما خواسته شده است که يک سیستم خوراک خبری يا فید خبررسانی که اساس يک اپلیکیشن شبکه اجتماعی است را طراحی کنید.
در اين فصل به بررسی طراحی يک سیستم چت پرداخته شده است. امروزه تقريباً همه از يک برنامه چت بهخصوص استفاده میکنند و روشهای پیادهسازی آن در سمت سرور در این فصل توضیح داده شده است.
در این فصل به یک فاکتور بسیار مهم در پیاده سازی موتورهای جستجو پرداخته شده است.
برای هر مهندس نرمافزاری پیادهسازی یک سامانه نرمافزاری مثل یوتیوب بسیار جاه طلبانه و شگفتانگیز است.
در سالهای اخیر، سرويسهای ذخیرهسازی ابری مانند Google Drive بسیار محبوب شدهاند. در اين فصل از شما خواسته میشود تا گوگل درايو را طراحی کنید.
در این فصل وبلاگها و منابع مهم در طراحی سامانههای نرمافزاری و سیستمهای توزیع شده معرفی شده است.
برای یک معماری مناسب در اپلیکیشن Rate Limiter الگوی زیر معرفی شده و هر جزیی از آن به طور مفصل توضح داده میشود.
یا برای معماری تبدیل فرمت ویدیو در یوتیوب، دیاگرام پیشنهادی زیر رو داریم.
یا بررسی فید در یک اپلیکشین مانند اینستاگرام معماری زیر در این کتاب پیشنهاد شده است.
به طور کلی این کتاب دید عمیقی برای طراحی سامانههای نرمافزاری به مخاطب میده و بهترین حالتهای ممکن جهت پیاده سازی معماریهای معروف هر اپلیکیشن رو پیشنهاد میده، هر چند کتاب به بررسی مفصل در مورد این مباحث می پردازه ولی هیچ کدام از اپلیکیشنهای مورد رو بررسی رو در سطح کد پیاده سازی نمیکنه، البته که پیاده سازی این کار در یک کتاب غیر ممکن است.
نکته جالب این هست که این کتاب ترجمه شده به صورت مجانی در این لینک قابل دانلود هست.
همینطور اگر مباحث این کتاب براتون سنگین هست این کتاب یه کتاب مقدماتی هم داره که از این پست قابل بررسی و دانلود هست.