مقدمه
همانطور که می دانیم در عصر داده های حجیم؛ پردازش، تحلیل و استفاده از داده به عنوان یک عامل کلیدی برای رشد کلیه سازمانها تبدیل شده است و موجب مزیت رقابتی در کسب و کارها، محرک نوآوری، افزایش رقابت و اثرات مثبت اجتماعی خواهد شد. با توجه به افزایش روزافزون حجم بزرگ دادهها، گسترش کیفی و کمی سرویسهای متعدد ارائه شده در سطوح مختلف؛ حرکت به سمت ارتقا زیرساختهای نرم افزاری در قالب محاسبات توزیع شده و استفاده از روشهای نوین پردازش دادهها اهمیت می یابد.
ما در این مطالعه، با مطرح نمودن سوالاتی در زمینه بررسی معماریهای نرم افزارهای کلان دادهها و پاسخگویی به آنها قصد داریم که به دید مناسبی جهت، درک اهمییت و انگیزه پذیرش معماریهای کلان داده و شناسایی معماریهای نرم افزاری موجود و ساختار آنها برای سیستمهای کلان داده و راهکارهای رفع چالش در این زمینه دست یابیم.
چرا به معماری صحیحی در نرم افزارهای پردازش کلان داده نیاز داریم(انگیزه اتخاذ معماری های کلان داده)؟
امروزه، برای مقابله با افزایش سریع حجم، تنوع و سرعت داده های تولید شده، لازم است، ظرفیت فنی جدید و زیرساختهای موجود مناسبی را برای جمعآوری و تجزیه و تحلیل کلان دادهها اتخاذ کنیم. متأسفانه، توسعه سیستمهای کلان داده ساده نیست و برخلاف انتظارات بالا، پروژههای کلان داده ممکن است به دلیل عدم انتخاب ویژگیهای مناسب و طراحی مناسب معماری کلان داده با شکست مواجه شوند. سیستمهای کلان داده مختلف نیازمندیهای متفاوتی خواهند داشت و به همین دلیل پیکربندیهای طراحی معماری متفاوتی را باید اعمال کرد. از این رو یک معماری مناسب برای سیستم کلان داده برای دستیابی به الزامات ارائه شده از اهمییت بالایی برخوردار است. در دسته بندی زیر می توانیم عمده دلایل نیاز به معماری نرم افزارهای پردازش دادههای بزرگ را مشاهده کنیم:
معیارهای استفاده از برنامه های کلان داده کدامند؟
برنامه های کلان داده باید از معماریهایی استفاده کنند که قابلیت پشتیبانی از انواع داده ها را داشته و تمام محاسبات لازم برای تحلیل ها را بتوانند انجام دهند. و برای تحقق این کار باید محورهای کلیدی زیر در نظر گرفته شود:
الزامات اصلی معماری نرم افزار برای ساخت سیستم های پردازش داده های بزرگ، کدامند؟
بسیار مهم است که بتوانیم سیستمهای نرمافزاری را خوب طراحی و توسعه دهیم که به طور مؤثر و کارآمد نیازهای مختلف مربوط به تجزیه و تحلیل دادهها، پردازش و ذخیرهسازی را برآورده کنند. به منظور پاسخگویی به پیچیدگی سیستم های کلان داده و قابلیت های پویای آنها که باید در زمان اجرا برآورده شوند، نگرانی برای تعریف دقیق نیازها نیزافزایش می یابد.
نیازهای مهم در ارائه یک معماری شامل:
چه انتظاراتی از یک معماری داده مدرن وجود دارد؟
انتظارات بنا به اجزایی که در یک معماری داده مدرن ممکن است موجود باشد به صورت کلی به شرح زیر دستهبندی می کنیم:
· یک محیط معماری که برای نگهداری حجم بالایی از داده ها
· چینش قوی داده ها و قابلیت های ابرداده همراه با مدیریت اصلی داده ها
· قابلیت پشتیبانی از توابع تحلیلی خودکار و هوشمند
· شفافیت و پاسخگویی به تغییرات
یعنی به طورکلی باید برنامه های مرتبط با معماری داده برای حمایت از نیازهای رو به رشد داده و پویایی بازار در حال تغییر، بهبود پیدا کنند و ویژگی هایی مثل قابلیت تطبیق وخودکار، هوشمندی، قابلیت انعطاف پذیری، امن بودن وتمرکز بر ارزش کسب وکار و حاکمیت داده ها را شامل شوند.
رویکردهای موجود معماری نرم افزار برای برنامه های کلان داده کدامند؟
سه رویکرد اصلی برای طراحی معماریهای نرمافزار برای سیستمهای کلان داده با توجه به مرور مقالات وجستجوها مشاهده میشود: اتخاذ یک معماری مرجع، پیروی از روششناسی طراحی معماری و استفاده از یک مدل مرجع.
معماری لامبدا به عنوان معماری مرجع ظاهر میشود که تجزیه و تحلیلهای زمان واقعی و تاریخی کارآمد را از طریق یک چارچوب قوی امکان پذیر میکند. هدف ارائه این معماری که توسط Nathan Marz مطرح شده ارائه یک چارچوب معماری برای پاسخگویی به انواع دادهها، قابلیت مقیاسپذیری و مدیریت خطاهای دادهای است که امروزه شاید به عنوان شناخته شدهترین معماری حوزه کلانداده مورد استفاده قرار میگیرد.معماری لامبدا به دلیل تکنیک پردازش دادهاش برای مدیریت حجم عظیمی از دادهها با بهرهگیری از هر دو لایه دستهای و لایه پردازش سرعت/جریان، محبوب است. این رویکرد خاص تلاش میکند با استفاده از پردازش دستهای برای ارائه نماهای جامع و دقیق از دادههای دستهای، تعادل تأخیر، توان عملیاتی و تحمل خطا را متعادل کند، در حالی که به طور همزمان از پردازش جریانی بلادرنگ برای ارائه نماهایی از دادههای آنلاین استفاده میکند. خروجی های لایه دسته ای و سرعتی را می توان قبل از ارائه ادغام کرد.
کارایی این معماری به شکل افزایش توان عملیاتی، کاهش تأخیر و خطاهای ناچیز آشکار میشود، در نتیجه یک معماری خطی مقیاسپذیر ایجاد میشود که به جای افزایش مقیاس، مقیاسپذیری را کاهش میدهد.معماری لامبدا با توجه به اصول زیر به مقیاس پذیری بالا و تاخیر کم می رسد:
معماری لامبدا مشکل محاسبه توابع دلخواه روی داده های دلخواه را در زمان واقعی با تجزیه مسئله به سه لایه حل می کند.
1. لایه دسته ای یا مسیر سرد(Batch): این لایه وظیفه انباشت اطلاعات را به عهده دارد. در واقع تک مرجع واقعیت دادهها در این لایه قرار میگیرد(SVOT = Single Version Of Truth). تکنولوژیهایی مانند Haoop، Pig/Hive در این لایه مورد استفاده قرار میگیرند. این لایه قابلیت مقیاسپذیری افقی را نیز فراهم میکند.
2. لایه سرعت یا مسیر داغ(Speed): این لایه مجموعه پردازشهای مبتنی بر یادگیری ماشین یا تجزیهوتحلیلهای سریع و در لحظه را پشتیبانی میکند. این لایه برای پاسخگویی به ذخیرهسازی حجم عظیمی از دادهها ساخته نشده است و صرفاً روی بخشهای کوچکی از دادهها پردازشهای تحلیلی خود را صورت میدهد.
3. لایه سرویس(Serving): این لایه وظیفه برقراری ارتباط با ۲ لایه پیشین را برعهده داشته و Queryهای لازم را برای خروج اطلاعات از سیستم را پس از ترکیب دادهها فراهم میکند. معمولاً در فضای عملیاتی این لایه است که با ابزارهای خارجی مانند برنامههای هوش تجاری (مانند PowerBi، Tableau و …) ارتباط برقرار مینماید.
نمونه استفاده از این معماری در معماری و سبد تکنولوژیهای شرکت Yahoo در استقرار معماری Lambda را میتوان در شکل زیر مشاهده نماییم.
البته معماری لامبدا چالشهایی را هم ایجاد می کنند.مانند، پیچیدگی بالا و یا پردازش دوباره سناریوهای خاص در هر بار چرخه دسته ای،که سودمند نیستند. همین چالشها باعث شده است تا معماریهای دیگری نیز به وجود بیایند. یکی از مهمترین آنها معماری Kappa است که با حذف لایه Batch و با استفاده از تکنولوژیهای ارسال و دریافت پیام، تلاش میکند که به صورت همزمان دریافت اطلاعات را انجام داده و سپس با پردازش آنها، دادههای پالایش شده را به لایه Serving تحویل دهد. معماری Kappa در مدیریت کلانداده ها را در شکل زیر مشاهده می کنیم.
در هر کدام از این لایه ها چارچوب هایی برای پردازش جریان داده ها استفاده می شود که امکان پردازش موازی و توزیع شده داده های حجیم را جهت دستیابی به سرعت بالای پردازش داده ها فراهم می کنند در جدول زیر برخی از این چارچوب های پرکاربرد را مشاهده می کنیم.
که در بین آنها هادوپ بیشتر از همه مورد توجه قرار گرفته است، هادوپ برای مدیریت فرایند کلان داده ها استفاده می شود. اصلاح هادوپ مجموعه ای از نرم افزارها و کتابخانه هایی است که پردازش حجم عظیمی از داده های توزیع شده را فراهم می کند. هادوپ، حجم زیادی از دادهها را پردازش و مدیریت می کند. چارچوب هادوپ شامل زیر پروژه نگاشت کاهش می باشد. نگاشت کاهش یک الگو برای پردازش داده های حجیم در هادوپ است. به عبارت دیگر، یک مدل برنامه نویسی ساده برای حل مسائل محاسباتی در مقیاس وسیع و به صورت توزیعی را ایجاد میکند.
امروزه در بسیاری از صنایع مانند پزشکی یا نفت وگاز به صورت ترکیبی از این دو معماری کنار هم استفاده می کنند، مثلا در صنعت نفت وگاز، با حجم عظیمی از داده ها که از منابع مختلف به دست می آید با سرعت بسیار بالایی سروکار دارد نیازمند روشهایی هستند که با استفاده از الگوها وچارچوب های مختلفی برای توزیع و پردازش داده های مختلف در سیستم پردازش داده های بزرگ بدون نیاز به طراحی مجدد یا بازسازی سیستم ترکیب و تغییر دهد. در این نوع صنایع نیازمند مدلهای ترکیبی که دو تکنیک پردازش زمان واقعی و پردازش دسته ای را با هم ترکیب کنند زیرا داده های عظیمی نیاز به پردازش با دقت بالا و زمان پردازش کم دارند. با این حال هیچ یک از دو تکنیک جداگانه نمی توانند این دو کار را با هم انجام دهند و نیاز به پردازش ترکیبی دارند، برخی از معماری های ترکیبی عمومی وجود دارند که هم پردازش زمان واقعی و هم پردازش جریانی کلان داده را ترکیب می کنند. رایج ترین آنها معماری لامبدا و کاپا هستند. در شکل زیر یک نمونه از مدل ترکیبی را در صنعت نفت وگاز مشاهده می نماییم.
همانطور که در شکل مشاهده می کنیم، اجزای پردازش دسته ای ، جریان داده دارای دو شاخه است. داده ای که نیازبه پرداز ش بلادرنگ دارد به مولفه پردازش Real-Timeمنتقل می شود. در حالی که داده هایی که نیازبه پردازش دسته ای دارند در یک مجموعه داده عظیم ذخیره می شوند که بعداً می تواند به دسته ارسال شود
جزءپردازش به عنوان داده های تاریخی برای پردازش دسته ای. کاربر در زمان اجرا می تواند تکنیک پردازش را با انتخاب از داشبورد تصمیم بگیرد. این را می توان با ارائه برخی از رابط های برنامه نویسی کاربردی (API)و فایل های پیکربندی موجود در لایه پردازش،باپیکربندی APIبا استفاده ازبرخی ابزارهای مدیریتAPIارائه شده در لایه نتیجه،به دست آورد.
سپس نتیجه پردازش به لایه نتیجه ارسال می شود که نمایش های Real-Timeو Views Batchرا در خود نگه می دارد. Real-Time Viewsزمان واقعی را ذخیره می کند. نتیجه پرداز شBatch Viewsنتیجه پردازش دسته ای ارسال شده از لایهBatchرا ذخیره می کند.
ویژگی مهم معماری پیشنهادی این است که کاربر می تواند کل نما را برای مقایسه یا انتخاب از داشبوردپرس و جو کند. ویژگی جالب دیگر معماری، ذخیره کل نتایج پردازش و بازگشت به مجموعه داده عظیم است. این به دلیل این است که؛ نتیجه می تواند به عنوان داده های تاریخی برای پردازش آینده استفاده شود.
سخن پایانی
برنامههایی که در حوزه کلانداده یا همان Big Data توسعه پیدامیکنند، نیاز دارند تا از الگوهایی تبعیت کنند که امکان پردازش لحظهای حجم بالایی از دادهها را در هر لحظه داشتهباشند. مهمترین عامل شکست یا بحرانهای سیستمهای نرمافزاری در فضای کلان داده، معماری نرمافزاری است و نه هیچ عامل دیگری. معماری نرمافزاری، به مراتب بیشتر از کمبود منابع کافی سختافزاری و سروری یا مشکلات امنیت اطلاعات، به کسبوکارهای مبتنی بر داده لطمه وارد کرده است.و انتخاب معماری نرمافزاری صحیح علاوه بر وجود یک دانش غنی، خیلی مبتنی بر تجربه و آزمونوخطا شکل میگیرد، در گزارش مکنزی به این موضوع صریحاً اشاره شده است که عدم در اختیار داشتن برنامهریزی در خصوص معماری فضای مدیریت داده در سازمانها، یکی از مهمترین چالشهایی است که کسبوکارهای مبتنی بر داده با آن مواجه بوده و البته خواهند بود.
«این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است»
منابع