Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/systemDesignFarsi/modern_software_fa


https://github.com/systemDesignFarsi/modern_software_fa

Last synced: 3 months ago
JSON representation

Awesome Lists containing this project

README

        

## معرفی

با پیشرفت فنّاوری و توسعه روزافزون استفاده از نرم‌افزارها و هوش مصنوعی استفاده از ابزارها و مکانیزم‌های مختلفی برای توسعهٔ سریع و باکیفیت نرم‌افزارها ضروری است. در این کتاب مجموعه مواردی بیان شده است که به معرفی و پیاده‌سازی این روش‌ها می‌پردازند. چه برای افزایش دانش در حوزه نرم‌افزار و چه برای آشنایی با ابزارها و روش‌های پیاده‌سازی نرم‌افزارهای مدرن و چه برای آمادگی برای مصاحبه‌های شغلی برای مهندسی نرم‌افزار، این کتاب برای شما بسیار مناسب است.

![cover](./src/cover2.png)

## دانلود

برای دانلود می‌توانید از این [لینک](https://github.com/systemDesignFarsi/modern_software_fa/releases/download/publishV1.1.2/modern_software_V1_1_2.pdf) استفاده کنید.

## فهرست مطالب


طراحی سیستم چیست؟

معنای اعداد نسخه‌های نرم‌افزاری چیست؟

مدل‌های توسعه نرم‌افزار: آبشاری، چابک، تکراری، مارپیچ و RAD

پروتکل‌های ارتباطی

شبکه تحویل محتوا CDN

جستجوی سیستم نام دامنه (DNS)

انواع کوئری در سیستم DNS

انواع رکوردها

زیر دامنه (Subdomain)

‏ DNS Zones

‏ DNS Caching

‏ Reverse DNS

‏ REST API در مقابل GraphQL

نحوه عملکرد gRPC

‏ Webhook چیست؟

‏ HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC)

مقایسه SOAP و REST و GraphQL و RPC.

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

کدهای وضعیت HTTP

تفاوت URL، URI، URN

وقتی یک URL را در مرورگر خود تایپ می‌کنید چه اتفاقی می‌افتد؟

تفاوت بین کوکی (Cookie) و سشن (Session)

تفاوت بین تأیید اعتبار مبتنی بر Session و JWT چیست؟

مرورگرهای مدرن چگونه کار می‌کنند؟

بررسی روش‌های API

چگونه دسترسی امن به API وب برای وب‌سایت خود طراحی کنیم؟

چگونه APIهای مؤثر و امن طراحی کنیم؟

بهبود عملکرد API

‏ GET، POST، PUT... مفاهیم رایج HTTP

تقلب‌نامه‌ي REST API

۱۲ نکته برتر برای امنیت API

۹ نوع تست API

چگونه از Pagination در طراحی API استفاده کنیم؟

الگوهای معماری نرم‌افزار

بررسی معماری‌های N-Tier

چگونه الگوهای طراحی را یاد بگیریم؟

الگوهای طراحی کلیدی (Design Patterns)

تسلط بر اصول طراحی - SOLID

۱۲ فاکتور مهم در طراحی اپلیکیشن

تفاوت بین Process و Thread چیست؟

‏ مقایسه هم‌زمان (Concurrency) با موازی‌سازی (Parallelism)

چگونه برنامه‌های کامپیوتری اجرا می‌شوند؟

چگونه C++، جاوا و پایتون کار می‌کنند؟

۸ اصطلاح برتر برنامه‌نویسی

۱۰ اصول مهم برنامه‌نویسی برای بهبود کیفیت کد

چگونه یک فرایند خاصی که بیش از حد منابع مصرف می‌کند را تشخیص دهیم؟

۹ مورد رایج که مصرف CPU را به اوج می‌رساند.

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

۶ مورد برتر برای اعمال Idempotency

سیستم نظارت و هشدار برای متریک‌ها

قابلیت مشاهده: لاگ‌گیری، ردیابی و معیارها

کدام پایگاه‌داده برای سیستم جمع‌آوری متریک‌ها مناسب است؟

مدل‌های Pull در مقابل Push

ذخیره‌سازی

چرا یک درایو حالت جامد (SSD) سریع است؟

بررسی ذخیره‌سازهای مختلف

ذخیره‌ساز بلوکی (Block Storage)

ذخیره‌سازی شیء (Object storage)

ذخیره‌سازی فایل (File storage)

حجم (Volumes)

ذخیره‌ساز متصل به شبکه (NAS)

سیستم فایل توزیع‌شده Hadoop (HDFS)

آرایه افزونگی دیسک‌های مستقل (RAID)

اعداد تأخیر که باید بدانید.

انواع حافظه و ذخیره‌سازی

طراحی S3

بارگذاری فایل‌های بزرگ

کد تصحیح خطا (Erasure coding)

بررسی پایگاه‌داده‌

چه پایگاه‌داده‌ای را باید استفاده کنم؟

پایگاه‌داده‌های مختلف در سرویس‌های ابری

راهنمای انتخاب پایگاه‌داده مناسب

پایگاه‌داده‌های SQL

پایگاه‌داده‌های NoSQL

سندگرا (Document)

کلید - مقدار (Key-Value)

پایگاه‌داده گرافی (Graph)

سری زمانی (Time Series)

ستون گسترده (Wide-column)

چندمدلی (Multi-model)

‏ row-based یا Column-based؟

پایگاه‌داده‌های SQL در مقابل NoSQL

تکثیر پایگاه‌داده (Database Replication)

ایندکس‌ها (indexes)

تراکنش (Transaction)

۸ ساختار داده‌ای که پایگاه‌‌داده‌ها را قدرتمند می‌کنند.

چگونه یک عبارت SQL در پایگاه‌داده اجرا می‌شود؟

چگونه SQL Joins کار می‌کنند؟

نرمال‌سازی و غیر نرمال‌سازی

تئوری CAP

‏ تئوری PACELC

سطوح ایزولاسیون پایگاه‌داده

نمایش یک کوئری در SQL

زبان SQL

‏ ACID به چه معناست؟

‏ BASE به چه معناست؟

۶ مدل برتر پایگاه‌داده

چگونه داده‌های حساس را در یک سیستم مدیریت کنیم؟

پایگاه‌داده‌های بُرداری

۶ مورد برتر از کاربردهای Elasticsearch

تراکنش توزیع‌شده (Distributed Transactions)

فدراسیون پایگاه‌داده (Database Federation)

چگونه داده‌ها را در سیستم‌های توزیع‌شده مدیریت کنیم؟

پارتیشن‌بندی افقی و پارتیشن‌بندی عمودی

۴ الگوریتم برتر Sharding

الگوهای خواندن داده‌های replicaشده ۱

الگوهای خواندن داده‌های replica ۲ شده

تعادل بین تأخیر زمانی و یکپارچگی

۷ استراتژی ضروری برای مقیاس‌پذیری پایگاه‌داده

مقیاس‌دهی ۱۰۰ برابری در Postgres

بن‌بست (Deadlock) چیست؟

تفاوت‌های بین قفل‌های پایگاه‌داده

قفل‌گذاری خوش‌بینانه

بررسی کَش (Cache)

کَش و memory پردازنده

کاربرد‌های کش

چه زمانی از کش نباید استفاده کرد؟

بررسی برخی مفاهیم در کَش:

بهترین استراتژی‌های کَش کردن چیست؟

چرا Redis این‌قدر سریع است؟

‏ Memcached در مقابل Redis

‏ Redis چه کاربردهایی دارد؟

حمله گم‌شدن داده در Cache

۸ استراتژی برتر برای خروج از کش

تکامل معماری Redis

وقتی سیستم کَش دچار مشکل می‌شود؟

مقالات Big data

تکامل Big data

بررسی Data Pipelines

سرعت رشد بالا داده‌ها

معماری‌های میکروسرویس

‏ monolith (تک‌هسته‌ای)

‏ Monolith ماژولار

میکروسرویس‌ها (Microservices)

میکروسرویس در مقابل معماری سرویس‌گرا (SOA)

چرا به میکروسرویس نیاز ندارید؟

بررسی یک نمونه از معماری میکروسرویس

بهترین روش‌های میکروسرویس

چگونه میکروسرویس‌ها با یکدیگر همکاری و تعامل دارند؟

فناوری رایج برای میکروسرویس‌ها چیست؟

‏ API gateway چه کاری انجام می‌دهد؟

۹ اصل اساسی قبل از ساختن میکروسرویس‌ها

۹ جزء ضروری یک برنامه میکروسرویس

بررسی Load Balancing

چرا Nginx یک پروکسی «معکوس» نامیده می‌شود؟

الگوریتم‌های رایج توزیع بار (Load Balancing)

کلید استفاده از توزیع‌کننده بار (Load Balancer)

برآورد تقریبی در طراحی سیستم

بررسی صف پیام

صف پیام (Message Queue)

۴ مورد از متداول‌ترین انواع صف

‏ Message Brokers

‏ Enterprise Service Bus (ESB)

‏ تحول معماری صف پیام: از IBM MQ به RabbitMQ تا Pulsar

حداکثر یکبار، حداقل یکبار و دقیقاً یکبار

۶ الگوی برتر پیام‌رسانی ابری

چرا Kafka سریع است

۵ مورد از کاربردهای برتر Kafka

آیا Kafka می‌تواند پیام‌ها را گم کند؟

مقایسه Rabitmq و Kafka

سرویس‌ها و معماری‌های ابری

‏cloud native چیست؟

‏ IaaS/PaaS/SaaS چیست؟

خوشه‌بندی (Clustering)

مفاهیم و تعاریف الگوهای طراحی cloud native

الگوهای طراحی cloud native

الگوی سفیر - پروکسی (Ambassador - Proxy)

الگویBulkhead

کش جانبی (Cache-aside):

قطع‌کننده مدار (Circuit Breaker):

تراکنش جبرانی (Compensating Transaction):

مصرف‌کنندگان رقیب (Competing Consumers):

تجمیع منابع محاسباتی (Compute Resource Consolidation):

معماری رویدادمحور (Event-Driven Architecture - EDA)

منبع رویداد (Event Sourcing):

تفکیک مسئولیت فرمان و کوئری (CQRS):

مخزن پیکربندی خارجی (External Configuration Store):

هویت فدراتیو (Federated Identity):

الگوی بک‌اند برای فرانت‌اند (Backend For Frontend - BFF)

دروازه‌بان (Gatekeeper):

‏ Health Endpoint Monitoring:

جدول ایندکس (Index Table):

انتخاب رهبر (Leader Election):

دید تحقق یافته (Materialized View):

لوله‌ها و فیلترها (Pipes and Filters):

صف اولویت‌دار (Priority Queue):

ترازوی بارگذاری مبتنی بر صف (Queue-based Load Leveling):

تکرار مجدد (Retry):

ازپیکربندی زمان اجرا (Runtime Reconfiguration):

سرپرست عامل زمان‌بندی (Scheduler Agent Supervisor):

قطعه‌بندی (Sharding):

میزبانی محتوای استاتیک (Static Content Hosting):

محدودسازی (Throttling):

‏ Valet Key

بازیابی فاجعه (Disaster Recovery)

کشف سرویس (Service Discovery)

کاهش هزینه‌های ابری

۹ الگوی برتر معماری برای جریان داده و ارتباط

چگونه Event Sourcing را در سیستم‌ها ادغام کنیم؟

‏ SSO (ورود یکباره به چند سیستم) چیست؟

کدام ارائه‌دهنده ابری باید هنگام ساخت یک راهکار داده‌های بزرگ استفاده شود؟

‏ AWS Lambda پشت‌صحنه

‏ CI/CD

بخش اول - SDLC با CI/CD

بخش دوم - تفاوت بین CI و CD

بخش سوم - pipeline CI/CD

‏ Netflix Tech Stack (CI/CD Pipeline)

چرخه توسعه نرم‌افزار چابک

چگونه پیکربندی‌ها را در یک سیستم مدیریت کنیم؟

مسیر کاری GitOps

استراتژی‌های استقرار

بررسی DevOps

کتاب‌های DevOps

‏ DevOps در مقابل SRE در مقابل مهندسی پلتفرم

‏ Docker چگونه کار می‌کند؟

‏ k8s یا Kubernetes چیست؟

چهار نوع برتر سرویس‌های Kubernetes در یک نمودار

‏ Docker در مقابل Kubernetes

تفاوت‌ها بین مجازی‌سازی (VMware) و کانتینرسازی (Docker) چیست؟

‏ DevSecOps چیست؟

بررسی GIT

چطور دستورات گیت کار می‌کنند؟

گیت چگونه کار می‌کند؟

تفاوت Git merge و Git rebase

بررسی دستورات ویژه در git

یک خط تغییر، زمان clone را تا ۹۹ درصد کاهش داد!

بررسی Linux

سیستم فایل لینوکس به زبان ساده

۱۸ دستور پرکاربرد لینوکس که باید بدانید

فرایند بوت لینوکس به زبان ساده

مجوزهای فایل‌های لینوکس

ارتباط بین فرایندها IPC

برگه تقلب تجزيه لاگ

بررسی مباحث شبکه

آشنایی با TCP/IP و مدل OSI

تفاوت TCP و UDP

‏ IPv4 در مقابل IPv6، تفاوت‌ها چیست؟

۸ پروتکل محبوب در شبکه

مسیریابی ترافیک اینترنت

بررسی امنیت در وب

چگونه HTTPS کار می‌کند؟

احراز هویت و دسترسی امن با OAuth 2.0

۴ روش برتر برای مکانیزم‌های احراز هویت

‏ کلیدهای SSH: از کلیدهای رمزنگاری برای دسترسی امن به سیستم‌های remote و سرورها استفاده می‌شود.

رمزگذاری در مقابل رمزنگاری در مقابل توکن‌سازی

‏Session، کوکی، JWT، توکن، SSO و OAuth 2.0 – این‌ها چه هستند؟

ذخیره‌سازی رمزها

توکن امن وب جیسون (JWT) به زبان ساده

تأیید دومرحله‌ای Google Authenticator چطور کار می‌کند؟

۶ مورد از مهم‌ترین کاربردهای فایروال

هر آنچه در مورد Cross-Site Scripting (XSS) نیاز دارید بدانید

الگوریتم‌های کاربردی در سیستم‌های توزیع‌شده

الگوریتم‌هایی مهم در طراحی سیستم

‏ Quadtree

چگونه رستوران‌های نزدیک را به کمک Geohash پیدا می‌کنیم؟

۱۰ الگوریتم گراف که باید بدانید

بررسی طراحی سیستم‌ها در دنیای واقعی

چهار شگفت‌انگیز طراحی سیستم چه چیزهایی هستند؟

چگونه یک وب‌سایت را برای پشتیبانی از میلیون‌ها کاربر مقیاس‌پذیر کنیم؟

راز موفقیت آمازون، نتفلیکس و اوبر چیست؟

طراحی Google Docs

تکنولوژی مورداستفاده‌ی نتفلیکس

معماری توییتر ۲۰۲۲

معماری توییتر در ۲۰۱۳

تکامل غیرمعمول معماری API نتفلیکس

نکته مصاحبه طراحی سیستم

تحول معماری میکروسرویس Airbnb طی ۱۵ سال گذشته

‏ Monorepo در مقابل Microrepo

چگونه وب‌سایت Stack Overflow را طراحی می‌کنید؟

چرا مانیتورینگ ویدئوی آمازون از Serverless به Monolithic تغییر یافت؟

چگونه Disney Hotstar ۵ میلیارد ایموجی را در طول یک تورنمنت ثبت می‌کند؟

چگونه Discord تریلیون‌ها پیام را ذخیره می‌کند.

چگونه پخش زنده ویدئویی در یوتیوب، TikTok live یا Twitch کار می‌کند؟

چگونه یک سیستم به طور خودکار باگ‌ها را برای ما شناسایی و رفع کند؟

چگونه با اسکن‌کردن کد QR از کیف پول دیجیتال پرداخت کنیم؟

‏ سؤال مصاحبه: طراحی Gmail

مسیر دریافت ایمیل

مسیر ارسال ایمیل

سؤال مصاحبه: طراحی Google Maps

رِندر کردن نقشه Google Maps

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

چگونه سیستم‌هایی شبیه به ChatGPT کار می‌کنند؟

مدیریت یک خرابی گسترده

چگونه شناسه‌های منحصربه‌فرد تولید کنید؟

چگونه از crawl آدرس‌های تکراری در ابعاد گوگل جلوگیری کنیم؟

نحوه ارسال نوتیفیکیشن در slack

چگونه آمازون نرم‌افزارهای خود را می‌سازد و اداره می‌کند؟

بررسی طراحی سیستم‌های مالی و بانکی

مبادله خارجی در پرداخت

مطابقت سفارش‌های خریدوفروش

طراحی بورس اوراق بهادار

طراحی یک سیستم پرداخت

طراحی یک سیستم فروش/حراج

چگونه یک بورس اوراق بهادار مدرن به تأخیرهای میکروثانیه دست می‌یابد؟

شبکه پرداخت SWIFT

فرایند جابه‌جایی پول در نرم‌افزارهای بانکی

تطبیق و سازگاری در پرداخت بانکی ۱

بررسی پایگاه‌داده مناسب برای سرور جمع‌آوری متریک‌ها

تطبیق و سازگاری در پرداخت بانکی ۲

جلوگیری از شارژ شدن دوباره

امنیت در پرداخت بانکی

سایر کتاب‌ها

[![HitCount](https://hits.dwyl.com/systemDesignFarsi/modern_software_fa.svg?style=flat-square)](http://hits.dwyl.com/systemDesignFarsi/modern_software_fa)