احتمالاً با برنامه نویسی موازی یا همان Parallel Programming آشنا باشید. در برنامه نویسی موازی، یک برنامه در یک زمان میتواند چند کار و وظیفه را با هم انجام دهد. تا قبل از این معمولاً برنامههای موازی بر روی یک کامپیوتر اجرا میشد، این در حالی است که مدل برنامه نویسی Map Reduce برای این به وجود آمده است که تا حد امکان کارها و وظایفی را که میتوانند به صورت موازی با هم اجرا شوند، در کامپیوترهای مختلف به صورت موازی اجرا کند.
اگر با سیستمهای توزیع شده آشنایی ندارید، پیشنهاد میکنم دروس اولیه دوره سیستمهای توزیع شده را مطالعه داشته باشید تا یک دید کلی را از این سیستمها داشته باشید. در سیستمهای توزیع شده، گره ها (Nodes) یا همان کامپیوترهای مختلف با هم همکاری کرده و یک سیستم واحد را (از دید کاربر استفاده کننده) به وجود میآورند.
فرض کنید یک شبکه اجتماعی مانند Instagram که در زمان نوشتن این درس، در حدوده ۵۰۰میلیون کاربر فعال در روز دارد، بخواهد با یک پردازش سریع، به شما به عنوان یک کاربر، دوستانی را پیشنهاد دهد که بتوانید آنها را دنبال (Follow) کنید. قطعا انجام این عملیات با مدلهای برنامه نویسی ساده غیر ممکن است، زیرا یک سیستم نه تنها به شما بلکه باید به ۵۰۰میلیون کاربر دیگر نیز پیشنهاد مناسب خودشان را بدهد!
مسائلی شبیه به این، نیاز دارند تا بتوانند به صورت موازی اجرا شوند. این اجرای موازی میتواند بر روی کامپیوترهای ساده مختلف که با هم ارتباط دارند انجام شوند. یعنی به جای اینکه از یک ابرکامپیوتر (کامپیوتر بسیار قوی از لحاظ پردازش، ذخیره سازی و محاسبات) استفاده کنند، میتوانند از مجموعهای از چندین کامپیوتر تقریبا ساده و نه چندان گران جهت عملیات ذخیره سازی و محاسبات مختلف آن استفاده کنند. ذخیره سازی بر روی این کامپیوترها در بسیاری از مواقع توسط سیستمی به نام سیستم فایل توزیع شده یا همان Distributed File System انجام میشود. در واقع اطلاعات در این سیستم توزیع شده، بر روی کامپیوترهای مختلف قرار میگیرند و همچنین بر روی این کامپیوترها تکرار (Replicate) میشوند تا اگر گاهاً یک کامپیوتر خراب شد یا دسترسی به آن امکانپذیر نبود، دادهها گم نشود و بتوان دادهها را از کامپیوترهای مختلف دیگر فراخوانی کرد و از آنها در محاسبات استفاده نمود. بر روی یک همچنین سیستم فایل توزیع شدهای، مدلهای برنامه نویسی سادهای مانند Map Reduce فراهم شده است تا بتوان با کمک آنها، محاسبات مختلف بر روی حجم عظیمی از دادهها را در خوشه یا همان Cluster (مجموعهای از کامپیوترها) پیاده سازی کرد.