طراحی اپلیکیشنهای دادهمحور
آموزش طراحی اپلیکیشنهای دادهمحور بر اساس کتاب Designing Data-Intensive Applications، یادگیری معماری نرمافزار، پایگاه داده، سیستمهای توزیعشده، شاردینگ و پردازش داده.
یادگیری اصول معماری نرمافزار، طراحی سیستمهای مقیاسپذیر و سیستمهای توزیعشده
در دنیای امروز، داده به یکی از مهمترین بخشهای توسعه نرمافزار تبدیل شده است. تقریباً تمام اپلیکیشنهای مدرن، از فروشگاههای اینترنتی و شبکههای اجتماعی گرفته تا سامانههای مالی، پلتفرمهای پردازش اطلاعات و سرویسهای مبتنی بر هوش مصنوعی، به سیستمهایی نیاز دارند که بتوانند حجم زیادی از داده را با سرعت، دقت و قابلیت اطمینان بالا ذخیره، پردازش و مدیریت کنند.
اما طراحی چنین سیستمهایی صرفاً به انتخاب یک زبان برنامهنویسی یا یک پایگاه داده محدود نمیشود. توسعهدهندگان و معماران نرمافزار باید بدانند چگونه اجزای مختلف یک سیستم را در کنار یکدیگر قرار دهند، چگونه دادهها را میان سرویسهای مختلف منتقل کنند، چگونه با افزایش تعداد کاربران و حجم اطلاعات مقیاسپذیری سیستم را حفظ کنند و چگونه در برابر خطاهای احتمالی از صحت و دسترسپذیری دادهها محافظت کنند.
دوره طراحی اپلیکیشنهای دادهمحور (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 درس
- سطح دوره: پیشرفته
- زبان: فارسی (اصطلاحات استاندارد انگلیسی)