دوره تخصصی سطح: پیشرفته و پروداکشن

طراحی اپلیکیشن‌های داده‌محور

آموزش طراحی اپلیکیشن‌های داده‌محور بر اساس کتاب Designing Data-Intensive Applications، یادگیری معماری نرم‌افزار، پایگاه داده، سیستم‌های توزیع‌شده، شاردینگ و پردازش داده.

15 جلسه آموزشی مدرس: مجتبی پاکزاد
  • 1 مقدمه دوره
  • 2 فصل اول: بده‌بستان‌ها و تصمیم‌های معماری در سیستم‌های داده‌ای
  • 3 فصل دوم: تعریف نیازمندی‌های غیرکارکردی
  • 4 فصل سوم: مدل‌های داده و زبان‌های پرس‌وجو
  • 5 فصل چهارم: ذخیره‌سازی و بازیابی داده
  • 6 فصل پنجم: کدگذاری و تکامل داده
  • 7 فصل ششم: تکثیر داده (Replication)
  • 8 فصل هفتم: شاردینگ و تقسیم‌بندی داده‌ها (Sharding)
  • 9 فصل هشتم: تراکنش‌ها (Transactions)
  • 10 فصل نهم: چالش‌های سیستم‌های توزیع‌شده
  • 11 فصل دهم: سازگاری و اجماع (Consistency & Consensus)
  • 12 فصل یازدهم: پردازش دسته‌ای (Batch Processing)
  • 13 فصل دوازدهم: پردازش جریانی (Stream Processing)
  • 14 فصل سیزدهم: فلسفه سیستم‌های پردازش جریانی
  • 15 فصل چهاردهم: مسئولیت‌پذیری و انجام کار درست در سیستم‌های داده‌محور

یادگیری اصول معماری نرم‌افزار، طراحی سیستم‌های مقیاس‌پذیر و سیستم‌های توزیع‌شده

در دنیای امروز، داده به یکی از مهم‌ترین بخش‌های توسعه نرم‌افزار تبدیل شده است. تقریباً تمام اپلیکیشن‌های مدرن، از فروشگاه‌های اینترنتی و شبکه‌های اجتماعی گرفته تا سامانه‌های مالی، پلتفرم‌های پردازش اطلاعات و سرویس‌های مبتنی بر هوش مصنوعی، به سیستم‌هایی نیاز دارند که بتوانند حجم زیادی از داده را با سرعت، دقت و قابلیت اطمینان بالا ذخیره، پردازش و مدیریت کنند.

اما طراحی چنین سیستم‌هایی صرفاً به انتخاب یک زبان برنامه‌نویسی یا یک پایگاه داده محدود نمی‌شود. توسعه‌دهندگان و معماران نرم‌افزار باید بدانند چگونه اجزای مختلف یک سیستم را در کنار یکدیگر قرار دهند، چگونه داده‌ها را میان سرویس‌های مختلف منتقل کنند، چگونه با افزایش تعداد کاربران و حجم اطلاعات مقیاس‌پذیری سیستم را حفظ کنند و چگونه در برابر خطاهای احتمالی از صحت و دسترس‌پذیری داده‌ها محافظت کنند.

دوره طراحی اپلیکیشن‌های داده‌محور (Designing Data-Intensive Applications) با هدف آموزش همین مفاهیم و آشنایی عمیق‌تر با اصول طراحی و معماری سیستم‌های داده‌محور تهیه شده است.

این دوره بر اساس کتاب معتبر Designing Data-Intensive Applications نوشته Martin Kleppmann و Chris Riccomini، از انتشارات O'Reilly، تهیه شده است. این کتاب یکی از منابع شناخته‌شده در حوزه مهندسی نرم‌افزار، طراحی سیستم‌های توزیع‌شده و معماری پایگاه داده به شمار می‌رود و در ویرایش دوم خود، موضوعات و فناوری‌های جدیدتری را نیز پوشش می‌دهد.

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

در طول این مجموعه آموزشی، با مفاهیم بنیادی و پیشرفته طراحی سیستم‌های داده‌محور آشنا می‌شویم و بررسی می‌کنیم که سیستم‌های نرم‌افزاری مدرن چگونه طراحی و پیاده‌سازی می‌شوند.

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

مهم‌ترین موضوعات آموزشی این دوره عبارت‌اند از:

  • معماری سیستم‌های داده‌محور: شناخت تفاوت سیستم‌های عملیاتی و تحلیلی، بررسی OLTP و OLAP، انبار داده و معماری‌های ابری.
  • نیازمندی‌های غیرکارکردی: درک مفاهیمی مانند Performance، Latency، Reliability، Fault Tolerance، Scalability و Maintainability.
  • مدل‌های داده و پایگاه داده‌ها: آشنایی با پایگاه داده‌های رابطه‌ای، سندگرا و گرافی و بررسی زبان‌های مختلف پرس‌وجو.
  • ذخیره‌سازی و بازیابی اطلاعات: بررسی ساختارهای داخلی پایگاه داده، ایندکس‌ها، B-Tree، LSM-Tree و روش‌های ذخیره‌سازی تحلیلی.
  • کدگذاری و تکامل داده: شناخت فرمت‌های مختلف تبادل اطلاعات مانند JSON، XML، Protocol Buffers و Avro و بررسی سازگاری نسخه‌های مختلف داده.
  • تکثیر داده (Replication): بررسی معماری‌های Single-Leader، Multi-Leader و Leaderless و روش‌های مدیریت همگام‌سازی اطلاعات.
  • شاردینگ (Sharding): یادگیری روش‌های تقسیم و توزیع داده میان چندین سرور و مدیریت بار در سیستم‌های بزرگ.
  • تراکنش‌ها (Transactions): درک مفاهیم ACID، Isolation Levels، Serializability و روش‌های مدیریت تراکنش‌های توزیع‌شده.
  • سیستم‌های توزیع‌شده: بررسی خطاهای شبکه، هماهنگی میان سرورها، ساعت‌های توزیع‌شده و چالش‌های ارتباط میان گره‌ها.
  • سازگاری و اجماع: آشنایی با Linearizability، Consensus و روش‌های ایجاد هماهنگی و سازگاری در سیستم‌های توزیع‌شده.
  • پردازش دسته‌ای و جریانی: شناخت MapReduce، Dataflow، Event Streaming، Message Brokers و Change Data Capture.
  • معماری مبتنی بر جریان داده: بررسی نحوه ترکیب سرویس‌ها، پردازش پیوسته اطلاعات و طراحی سیستم‌های قابل‌اعتماد.
  • اخلاق و حریم خصوصی داده: آشنایی با مسئولیت‌های توسعه‌دهندگان در زمینه امنیت، حریم خصوصی، سوگیری الگوریتمی و استفاده صحیح از داده‌ها.

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

این دوره برای افرادی طراحی شده است که می‌خواهند فراتر از برنامه‌نویسی روزمره فکر کنند و درک عمیق‌تری از نحوه طراحی و عملکرد سیستم‌های نرم‌افزاری مدرن به دست آورند.

به‌طور مشخص، شرکت در این دوره برای گروه‌های زیر مفید خواهد بود:

  • برنامه‌نویسان Backend که قصد دارند مهارت‌های معماری نرم‌افزار خود را ارتقا دهند.
  • مهندسان نرم‌افزار علاقه‌مند به طراحی سیستم‌های مقیاس‌پذیر و قابل‌اعتماد.
  • مهندسان داده (Data Engineers) که با ذخیره‌سازی، انتقال و پردازش حجم زیادی از اطلاعات سروکار دارند.
  • معماران نرم‌افزار (Software Architects) که در تصمیم‌گیری‌های فنی و طراحی زیرساخت سیستم‌ها نقش دارند.
  • توسعه‌دهندگانی که می‌خواهند دانش خود را در زمینه پایگاه داده‌ها و سیستم‌های توزیع‌شده گسترش دهند.
  • دانشجویان و علاقه‌مندان به مباحث پیشرفته مهندسی نرم‌افزار و System Design.

چرا یادگیری Designing Data-Intensive Applications اهمیت دارد؟

یکی از تفاوت‌های اصلی میان یک برنامه‌نویس معمولی و یک مهندس نرم‌افزار توانمند، توانایی درک رفتار سیستم در مقیاس بزرگ است.

ممکن است یک اپلیکیشن در ابتدای کار با یک پایگاه داده و یک سرور به‌خوبی اجرا شود؛ اما با افزایش تعداد کاربران، حجم اطلاعات و تعداد درخواست‌ها، مشکلاتی مانند کندی پاسخ‌گویی، از دست رفتن داده‌ها، ناسازگاری اطلاعات و اختلال در سرویس‌ها ظاهر شوند.

در چنین شرایطی، آشنایی با مفاهیم معماری داده، Replication، Sharding، Caching، Distributed Systems و Transaction Processing اهمیت پیدا می‌کند.

هدف این دوره آن است که به شما کمک کند منطق پشت این فناوری‌ها و تصمیم‌های معماری را بهتر درک کنید؛ به‌جای اینکه صرفاً با نام ابزارها و تکنولوژی‌های مختلف آشنا شوید، بدانید هرکدام چه مشکلی را حل می‌کنند، چه محدودیت‌هایی دارند و در چه شرایطی انتخاب مناسبی هستند.

مسیر یادگیری در این دوره

محتوای آموزشی در ۱۵ اپیزود تنظیم شده است. قسمت نخست به معرفی کتاب، مفاهیم کلی و نقشه راه یادگیری اختصاص دارد و در قسمت‌های بعدی، فصل‌های کتاب به‌ترتیب بررسی می‌شوند.

این ساختار به شما کمک می‌کند موضوعات را به‌صورت مرحله‌ای دنبال کنید و ارتباط میان مفاهیم مختلف معماری سیستم‌های داده‌محور را بهتر متوجه شوید.

در پایان این مسیر، دید جامع‌تری نسبت به طراحی پایگاه داده، معماری Backend، سیستم‌های توزیع‌شده، پردازش داده و تصمیم‌گیری‌های مهم در مهندسی نرم‌افزار خواهید داشت.

اگر می‌خواهید سیستم‌هایی فراتر از یک اپلیکیشن ساده طراحی کنید و با اصول ساخت نرم‌افزارهای مقیاس‌پذیر، قابل‌اعتماد و داده‌محور آشنا شوید، این دوره می‌تواند نقطه شروع مناسبی برای مسیر یادگیری شما باشد.

با باورژن همراه شوید و معماری سیستم‌های نرم‌افزاری مدرن را عمیق‌تر بشناسید.

مجتبی پاکزاد
مجتبی پاکزاد
برنامه نویس

به حل مسئله، چالش‌های پیچیده و پیدا کردن راه‌حل‌های بهتر علاقه دارم. ریاضیات، برنامه‌نویسی و اقتصاد همیشه برام جذاب بودن و به موضوعاتی مثل هوش مصنوعی، یادگیری ماشین، طراحی سیستم‌ها و بهینه‌سازی عملکرد نرم‌افزار علاقه دارم. اینجا درباره چیزهایی می‌نویسم که یاد می‌گیرم، تجربه می‌کنم و دوست دارم عمیق‌تر بشناسمشون.

مجتبی پاکزاد
مجتبی پاکزاد
برنامه نویس
دسترسی به دوره

کاملاً رایگان

مشاهده رایگان در آپارات، یوتیوب
مزایای فنی این دوره
  • دسترسی نامحدود و همیشگی به تمام قسمت‌ها
  • آموزش بدون حاشیه و کاملاً کد‌محور
  • منطبق با چالش‌های سیستم‌های لود بالا
  • دسترسی به ویدیوها در یوتیوب و آپارات
مشخصات فنی دوره
  • تعداد درس‌ها: 15 درس
  • سطح دوره: پیشرفته
  • زبان: فارسی (اصطلاحات استاندارد انگلیسی)