بخشی از مقاله

چکیده
یکی از عمده چالش سیستمهای نرمافزاری، پردازش داده های عظیم است. چالش بزرگتر، پردازش این داده ها بهصورت جریانی است؛ زیرا سیستمهایی موردنیاز است که بتوانند بیدرنگ و بازمان پاسخگویی مناسب، چنین داده هایی را پردازش نمایند. ما در این مقاله، ضمن بیان مفاهیم و کلیات یک سیستم پردازش جریانی توزیعشده، سیستمهای پردازش جریانی استورم، S4، سامزا و اسپارک را موردبررسی قرار داده و آنها را ازلحاظ معیارهای توپولوژی، معماری، مدل پردازشی و تحملپذیری خطا، مورد تجزیهوتحلیل قرار میدهیم. نتیجه ارزیابیها نشان میدهد که استورم، مناسب سیستمهای مقیاسپذیری است که نیاز به قدرت پردازش بالا دارند؛ همچنین S4 مناسب تسهیل در برنامهنویسی و مدیریت کلاستر، سامزا مناسب ماشینهای مجازی جاوا و اسپارک مناسب پردازش جریان و چندتاییهای بزرگ بهصورت دسته ای-جریانی میباشد.
کلمات کلیدی: پردازش جریانی توزیعشده، داده های عظیم، تحملپذیری خطا، نوسان تأخیر، استورم،S4، سامزا، اسپارک

.1 مقدمه
با سرعت رشد داده ها، گرایش جدیدی برای پردازش داده های عظیم به وجود آمده است. بهطورکلی دو مکانیسم عمده پردازش داده های عظیم وجود دارد که یکی پردازش جریانی و دیگری پردازش دستهای داده ها است.[1] پردازش جریانی، درگیر پردازش داده ها قبل از ذخیرهسازی است. این نوع پردازش برخلاف پردازش دستهای است که نوع نگاشت-کاهش هادوپ[2] درگیر پردازش بعد از ذخیرهسازی داده ها است؛ چون هادوپ، یک چارچوب نرمافزاری برای پردازش توزیعشدهی مجموعه داده های عظیم بهطور دستهای است.
پردازش جریانی یک برنامهنویسی کامپیوتری است تا بتوان با آن داده هایی را که بهطور پیوسته در حال جریان هستند، پردازش نمود. با توجه به ویژگی نامتناهی بودن داده های جریانی و عدم امکان ذخیره تمامی داده های یک منبع جریان، پردازش دستهای داده های عظیم، مناسب چنین داده هایی نیست. بهطوریکه امکان ذخیره نمودن تمام آنها در یک مکان وجود نداشته و نیاز به پردازش آن در زمان محدود است .[1]
از خصوصیات بارز داده های جریانی، سرعتبالا، پیوسته بودن، حجم بالای ورودی برای برنامههای کاربردی مثل شبکه های حسگر، مانیتورینگ شبکه ، شبکه های اجتماعی و امثال آن است؛ که این خصوصیات، سیستمهای پردازش جریانی را ایجاب میکنند تا با توان عملیاتی بالا و زمان پاسخ کوتاه، داده های جریانی را پردازش نمایند.[3]
از آنجائی که حجم بالایی از داده ها، وارد سیستمهای نرمافزاری میشوند، اطلاعات نمیتوانند با سیستمهای پردازش متمرکز، پردازش شوند و نیازمند توزیع اطلاعات در سیستم هستیم. این توزیعشدگی میتواند توازن بار1، مقیاسپذیری2 و تحملپذیری خطا3 را برای سیستمهای پردازش جریانی تحقق بخشد.[4]
این مقاله بدین ترتیب سازماندهی شده است که در بخش دوم کارهای مرتبط با موضوع مقاله بیانشده است. در بخش سوم به بیان مدلی جامع از سیستم پردازش جریانی توزیعشده4 پرداخته و در بخش چهارم برخی از سیستمهای پردازش جریانی توزیعشده را موردبحث و بررسی قرار میدهیم؛ در بخش پنجم نیز سیستمهای ارائهشده را مورد ارزیابی قرار داده و در بخش ششم از بحثهای انجامشده، نتیجهگیری خواهیم نمود.

.2 کارهای مرتبط
مطالعات، تحقیقات و پژوهشهای زیادی درزمینه پردازش جریانی صورت گرفته است که در این بخش به برخی از آنان اشاره مینماییم. در بحث بررسی سیستمهای پردازش جریانی توزیعشده، محققین دانشگاه شاندونگ چین در مقالهای[5] به بررسی چندین سیستم پردازش جریانی توزیعشده پرداخته و آنها را ازلحاظ چندین معیار، مقایسه نمودهاند. در پژوهشی دیگر، طراحی یک سیستم امن برای پردازش جریانی توزیعشده[6] بر روی گوشیهای هوشمند انجامگرفته که در آن توان عملیاتی بالا و تأخیر پایین5 مدنظر قرارگرفته شده است. سازگاری سیستمهای پردازش جریانی برای تجزیهوتحلیل ویدیو[7]، مقالهای است که در آن، روشی برای بازیابی تصویر و ویدیو با استفاده از سیستم پردازش جریانی ارائهشده است که یک ویدیو را بهعنوان جریانی از داده های ورودی در سیستم گرفته و آن را کاوش مینماید. سیستم پردازش MillWheel که یک سیستم پردازش جریانی توزیعشده است، در [8] موردبررسی قرارگرفته و مدل پیادهسازی آن تجزیهوتحلیل شده است.

.3 مدل پردازش جریانی
قبل از اینکه به بررسی مصداقی سیستمهای پردازش جریانی بپردازیم، مدلی جامع از این سیستم را شرح میدهیم که در آن با اصطلاحاتی نیز آشنا میشویم. جریان یک مجموعه نامتناهی از چندتاییها6 است که بهطور متناوب در واحد زمانی تولید میشود.[4] چندتایی، ساختاری از فیلدها است که استانداردی از نام فیلد، انواع داده ها ازجمله صحیح، اعشاری، آرایه و یا یک شیء و موقعیت آن را ارائه میدهد[9]؛ و از تشکیل چندتاییها، یک جریان شکل میگیرد. چندتاییها شبیه یک ردیف در پایگاه داده ها میباشند؛ بنابراین یک جریان داده ، مجموعه ای از چندتاییها است.

پردازش چندتاییها توسط عملگرها صورت میگیرد. بدینصورت که یک یا چند جریان، وارد یک عملگر شده و پس از عملیات پردازش روی آنها، یک جریان داده بهعنوان نتیجه و خروجی تولید میشود. هر عملگر میتواند یک یا چندین جریان داده را دریافت و همچنین یک یا چند جریان داده را تولید کند. عملگرها به دو نوع پایدار و ناپایدار تقسیم میشوند که در حالت پایدار، حالت جریانی داده پس از پردازش حفظشده ولی در حالت ناپایدار، حالت قبلی جریان داده حفظ نمیشود.[10] حالت پایدار خود به دو حالت انسدادی(مثل پیوند) و غیر انسدادی(مثل عملیات ریاضی) تقسیم میشود. عملگرهای پایدار انسدادی در یکزمان خاص، نیاز به همه ورودیها دارند، ولی این امر به دلیل نامتناهی بودن جریان داده میسر نیست. به همین دلیل جریانهای داده و چندتاییها در موجودیتی بنام پنجرهها گروهبندی میشوند. مبنای گروهبندی نیز میتواند بر پایه زمان و یا تعداد چندتاییها در نظر گرفته شود.[11]
عنصر پردازش1، یک واحد اصلی و اساسی اجرایی و محاسباتی در سیستم پردازش جریانی است. هر عنصر پردازش، دارای چندین عملگر است که یک یا چند جریان داده را دریافت کرده و پس از پردازش یک یا چند جریان داده بهعنوان خروجی تولید میکند. همه عناصر پردازش در گراف جهتدار غیرمدور2 جمع میشوند ولی بهصورت جداگانه اجرا میشوند و از طریق پیام باهم دیگر ارتباط دارند.[4,12] دید زمان اجرای یک سیستم پردازشی بدین ترتیب است که در آن هر گره، مسئول دریافت، پردازش و انتشار جریان داده ها از طریق عنصر پردازش است.

با توجه به اینکه سیستمهای پردازش جریانی متمرکز، پاسخگوی حجم زیاد داده های ورودی نبودند؛ ایده توزیعشدگی این سیستمها داده شد. در اینجا منظور از سیستم پردازش جریانی توزیعشده، این است که عناصر پردازش را بهصورت توزیعشده در نظر بگیریم. در گراف شکل 1، سه عنصر پردازش وجود دارد که هرکدام به دلیل تحقق تحملپذیری خطا، تکرار شدهاند. PE1، دو جریان ورودی و یک جریان خروجی دارد و PE2 و PE3 نیز هرکدام دارای یک جریان ورودی و یک جریان خروجی هستند؛ که ورودی و خروجی هر عنصر پردازش از طریق صفهای ورودی و خروجی باهم در ارتباط میباشند.

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

.4 سیستمهای پردازش جریانی توزیعشده
در این بخش، برخی از سیستمهای پردازش جریانی توزیعشده را ارائه میدهیم و آنها را از دید معماری سیستم، توپولوژی، جریان داده و مکانیسم رفع خطا بررسی میکنیم.

.1 4 سیستم پردازش استورم
استورم1 یک سیستم پردازش جریانی توزیعشده است که توسط توییتر بهصورت متنباز تولیدشده و از زبان جاوا پشتیبانی میکند. استورم در سال 2013 به آپاچی اعطا شد و از خصوصیات بارز آن مقیاسپذیری بالا، تحملپذیری خطا و قابلیت اطمینان است. کلاستر استورم شبیه کلاستر هادوپ بوده و شامل سه نوع گره ارشد2، ناظر3 و نگهبان4 است.

گره ارشد، سرور اصلی است که کد کاربر در آن بارگذاری میشود و این گره مسئول توزیع کدهای کاربر بین گرههای کارگر5 هر گره ناظر است . همچنین گره ارشد توالی پیشرفت گرههای کارگر را نگهداری میکند تا بتواند پردازشهای ناموفق را دوباره راهاندازی کرده و یا به نودهای کارگر دیگر انتقال دهد. مجموعه گرههای کارگر نیز در کلاستر استورم ، گره ناظر نامیده میشود.[1] هر گره کارگر، کارهای واگذارشده به یک گره ناظر را اجرا کرده و زیرمجموعه ای از یک توپولوژی را اجرا میکند. بهطورمعمول، یک توپولوژی در حال اجرا شامل تعدادی گره کارگر است. هماهنگی بین گره ارشد و ناظر از طریق گره نگهبان انجام میپذیرد. علاوه بر این، با توجه به اینکه اطلاعات کلی کلاستر استورم در سرور نگهبان نگهداری میشود؛ گره ارشد و ناظر میتوانند دوباره راهاندازی شده و بهسرعت رفع نقص کنند. شکل 2 نمایی از کلاستر استورم را نشان میدهد.

در استورم ، هر برنامهنویس یک برنامه کاربردی را بهصورت توپولوژی درمیآورد که ماهیت آن، یک گراف شامل عملگرها و جریان ورودی داده ها است. یک کاربر از طریق گره ارشد، یک توپولوژی را برای اجرا به کلاستر استورم ارائه میدهد . در این سیستم پردازشی، عملگرها بولت6 نامیده شده و منابع جریان ورودی بهعنوان اسپوت7 شناخته میشوند. داده های جریانی از منابع داده به بولت ها تزریق میشوند. در کل، شبکه ای از اسپوت و بولت ها، توپولوژی سیستم پردازش جریانی استورم را تشکیل میدهند. یک اسپوت، جریان ورودی منابع خارجی را از طریق صفهای ورودی دریافت کرده و جهت پردازش به بولت ها ارسال مینماید. بولت ها پس از پردازش جریان داده ها، آنها را به سمت بولت های بعدی و یا خروجی انتشار میدهند.[13,14]
بولت ها میتوانند عملیات اشتراک، اجتماع، پیوند و امثال آن را بر روی چندتایی یک جریان ورودی انجام دهند. 1 Tridentیک انتزاعی از استورم است که میتوان با آن اکثر عملیات یک پایگاه داده را روی جریانهای ورودی این سیستم پردازشی پیادهسازی نمود . برای انتشار بهنیه جریانهای ورودی به بولت ها، بهتر است جریانها و چندتاییها گروهبندی شوند. گروهبندی جریان داده ، چگونگی توزیع جریانهای ورودی را در بین بولت ها تعیین میکند. در اینجا چندین نوع گروهبندی وجود دارد که مهمترین آنها گروهبندی بر اساس فیلد است که یک فیلد از چندتایی یک جریان، ملاک گروهبندی میباشد.[13]
تحملپذیری خطا یک ویژگی مهم استورم است . یعنی اگر یک گره کارگر از کار میافتد، استورم آن را بهطور خودکار، راهاندازی مجدد مینماید. یا اگر یک گره ناظر از کار بیفتد، گره کارگر روی یک گره ناظر دیگر بارگذاری میشود. مکانیسم کشف خطا در استورم بدین گونه است که هر گره کارگر، یک وضعیتی از حالت اجرای خود به گره ارشد ارسال میکند. اگر این پیام تا 30 ثانیه به گره ارشد نرسد، مکانیسم کشف خطا انجامگرفته و کار توسط گره ارشد به گره کارگر بعدی ارسال میشود. اگر خطا و نقصی در خود گره ارشد رخ دهد، با توجه به اینکه گره نگهبان اطلاعات آنها را در منبع داده ای نگه میدارد میتوان گره ارشد را دوباره راهاندازی نمود.[10]
این مکانیسم کشف خطا درهرصورتی، این ضمانت را مینماید که نقص یا از دست دادن جریا ورودی در این سیستم پردازشی وجود نداشته و جریان ورودی بهطور حتم پردازششده و به خروجی داده میشود. بدین دلیل است که گفته میشود سیستم پردازش استورم، قابلاعتماد است.
بهمحض افزودن ماشینهای جدید در کلاستر استورم، کارهای موجود به آنها محول خواهد شد. در سیستمهای پردازش جریانی توزیعشده، مقیاسپذیری بالا یک امر سخت و دشواری است. استورم که یک سیستم پردازشی با مقیاسپذیری بالا است، دارای یک معماری مقیاسپذیر، یک استراتژی تخصیص منابع مؤثر و یک مدل پردازشی مناسب است.[1]

.2 4 سیستم پردازش 2 S4
سیستم پردازش جریانی توزیعشده 3 S4، توسط یاهو و به زبان جاوا تولیدشده و در سال 2011 به آپاچی اعطا شد. این سیستم، الهام گرفته از مدل نگاشت-کاهش است. پیادهسازی S4 بهصورت ماژولار بوده و این سیستم بهراحتی با سایر سیستمهای پردازش جریانی قابلترکیب است. S4 یک شبکه پویایی از عناصر پردازش ایجاد کرده و آنها را در زمان اجرا سازماندهی میکند. عناصر پردازش، اصلیترین بخش محاسباتی سیستم S4 بوده و چگونگی پردازش رویداده ا را تعیین میکنند. هر چندتایی از یک جریان در S4 بنام رویداد شناختهشده و دارای سه بخش اساسی اعم از نام، کلید و مقدار است. درواقع منظور از رویداد در سیستم پردازش S4 همان چندتایی یک جریان داده است. در اینجا، رویداده ا وارد عناصر پردازششده و پس از پردازش، به عناصر پردازش بعدی انتشار مییابند.[12]
عناصر پردازش در S4 به گرههای پردازش4 اختصاص داده میشوند. گره پردازش، یک فضای منطقی برای عناصر پردازش بوده و در حال اجرا، رویداده ای ورودی را پذیرش و پس از پردازش، آنها را به سایر عناصر پردازش انتشار میدهد. رویداده ا در S4 با استفاده از یک تابع درهمساز5 بر روی خصوصیت کلید، به گرههای پردازش مسیردهی میشوند؛ بنابراین رویداده ا با مقادیر مشابه برای خصوصیت کلید در یک گره پردازش مشابه مسیردهی و نگهداری میشوند. هماهنگی بین گرههای پردازش و انتقال پیام بین گرهها بهوسیله لایه ارتباط سیستم S4 صورت میگیرد.
این لایه، مکانیسمی برای رفع خطا در حالت نقص سیستم فراهم میکند که گره نگهبان در لایه ارتباط، مسئول کشف خطا بوده و پس از کشف خطا آن را به بخش مدیریت خطا ارجاع میدهد؛ یعنی هر موقع نقصی در یک گره رخ دهد، وظایف محول به آن گره، به سایر گرهها تحویل داده میشود. گرههای S4، در دو حالت فعال و بیکار هستند که گرههای بیکار همانند یک پشتیبان برای گرههای فعال در مواقع رفع خطا هستند. در ضمن، همه رویداده ا و حالتهای عناصر پردازش برای کاهش نوسان تأخیر در حافظه نگهداری میشوند. شکل 3 نمایی از معماری سیستم پردازش S4 را نشان میدهد.

در متن اصلی مقاله به هم ریختگی وجود ندارد. برای مطالعه بیشتر مقاله آن را خریداری کنید