آشنایی با معماریهای داده در طراحی سامانههای جریانپرداز
در قسمت قبل با اصول و مفاهیم پایه جریانپردازی به عنوان نسل نوین سامانههای کلان داده آشنا شدیم. در این قسمت به بررسی دو معماری مطرح در حوزه کلانداده برای طراحی سیستمهای اطلاعاتی یعنی معماری لامبدا و کاپا میپردازیم و با جنبههای مختلف آنها آشنا خواهیم شد.
برای پردازش و پایش مداوم شبکههای اجتماعی، به سامانهای نیاز داریم که بتواند به صورت لحظهای رخدادهایی مانند گذاشتن مطلب جدید، نظرات لحظهای کاربران و میزان مشاهده یک مطلب را دریافت و ذخیره کرده، پردازش نموده و به استخراج اطلاعات مفید از آنها بپردازد و نهایتاً نتایج را به صورت مناسب تصویرسازی کند. شکل ۱ معماری کلان یک سامانه جریانپرداز را نشان میدهد :
همانطور که در این شکل میبینید، بخش ابتدایی یک سامانه جریانپرداز، واحد دریافت و جمعآوری اطلاعات از منابع مختلف است. این رخدادها به ترتیب درون صفی قرار میگیرند و در نوبت پردازش قرار میگیرند. سپس پردازش شده و نهایتاً دادههای استخراج شده مورد استفاده قرار گرفته، گزارشهای مورد نیاز کاربران، تولید میشوند.
قبل از بررسی پروژههای متنبازی که برای پردازش جریان طراحی شدهاند، باید معماریهای کلان پیشنهادی برای سامانههای نوین اطلاعاتی را بررسی کنیم و در طراحی نهایی بر اساس اصول این معماریها حرکت کنیم.
منظور از معماری، مولفههای اصلی تشکیل دهنده یک سامانه اطلاعاتی و نحوه ارتباط و کارکرد هریک از آنهاست.
با توجه به اینکه سامانههای مقیاس بزرگ پردازش داده، سامانههایی توزیع شده بوده و از اجزای مختلف تشکیل شدهاند، وجود یک معماری کلان که تمام ملاحظات لازم را پوشش دهد، جزء ضروریات طراحی ما خواهد بود.
معماری لامبدا
پیشرفت فناوری و افزایش وسایل هوشمند و به تبع آن تولید بیوقفه دادهها در دنیای امروز، نیاز به پایش لحظهای و سریع اطلاعات در کنار ذخیره آنها برای پردازشهای تحلیلی، ما را به سمت ساختاری هدایت میکند که بتواند هر دو وجه از این نیازمندی یعنی پردازش جریانهای داده به صورت لحظهای و بدون تاخیر و پردازشهای انبوه و زمانمند را پاسخگو باشد.
البته پردازش کاملاً بلادرنگ و بدون تأخیر در سامانههای توزیع شده امروزی تقریباً غیرقابل دستیابی است و ما بیشتر به دنبال سیستمهایی هستیم که با کمترین تأخیر ممکن، به پردازش دادهها و استخراج اطلاعات مورد نیاز بپردازد.
معماری لامبدا دقیقاً با همین پیشزمینه توسط Nathan Marz از متخصصین داده شرکت توئیتر پیشنهاد شد. شکل ۲ ساختار این معماری سه لایه را نشان میدهد.
سه لایه اصلی پردازشی تشکیل دهنده این معماری رایج عبارتند از :
- لایه پردازش زمانمند(یا پردازش انبوه – Batch Layer) که بسته به نیاز کاربربه صورت موردی ویا در زمان های مشخص اقدام به پردازش انبوه داده های ذخیره شده کرده و نتایج مورد نظر کاربر را تولید میکند. استخراج آمار روزانه خرید و فروش یا اجرای یک جستجوی خاص بر روی داده ها از جمله موارد کاربرد این لایه است.
- لایه پردازش سریع (Speed Layer) : تمام پردازش هایی که باید به صورت لحظه ای روی داده ها صورت بگیرند، در این لایه پیاده سازی میشوند. محاسبه آمار لحظه ای یک سایت، پیشنهاد سریع یک مطلب جدید به کاربر بر اساس سابقه و سلایق او، بررسی خطاهای رخداده در سرورها و اتخاذ تصمیم مناسب از جمله مثالهایی است که میتوان برای کاربردهای لایه پردازش سریع زد.
- لایه کاربست و کاربرد (Serving Layer) : این لایه، وظیفه سرویس دهی به کاربر، اجرای پرس و جوهای مختلف (کوئری) و آماده سازی داده در شکل های مورد نیاز او را برعهده دارد. داده هایی که در دولایه پردازش سریع و پردازش زمانمند قبلاً ذخیره شده اند، توسط سرویسهایی که در این لایه ایجاد میشوند، در اختیار کاربران مختلف که هرکدام قالب و شکل خاصی از داده ها و گزارشات را نیاز دارند، قرار میگیرد.
این سه لایه، حداقل نیازمندی هایی است که یک سامانه پردازش اطلاعات باید داشته باشد. در ادامه سایر مولفه هایی که میتواند باعث بهبود این این چارچوب و تطبیق بیشتر آن با دنیای معاصر باشد را معرفی خواهیم کرد.
معماری کاپا
شکل خلاصه شده ای از معماری لامبدا با حذف لایه پردازش زمانمند به وجود آمده است که به معماری کاپا معروف شده است. در این ساختار برای ساده تر شدن مدیریت سامانه و عدم نیاز به دو بخش جداگانه پردازشی، تمام پردازش ها در لایه پردازش سریع انجام میگیرد و هرکاری که قرار است روی داده ورودی انجام شود، به صورت لحظه ای و بلادرنگ صورت خواهد پذیرفت.
اگر در آینده و بخاطر تغییر در منطق سازمانی و قوانین، نیاز به پردازش جدیدی روی داده ها باشد، این کار به صورت جداگانه و موردی انجام خواهد شد.
برای نیل به این هدف، معماری Kappa بر چهار اصل استوار است :
- هرچیزی، یک جریان است: با این اصل، پردازش زمانمند و انبوه هم جزئی از سامانه پردازش جریان قرار میگیرد با این تفاوت که داده های زمانمند و غیر لحظه ای، جریان های موردی تولید خواهند کرد که نیاز به پردازش دارد.
- تمام داده ها به صورت پایدار ذخیره میشوند: این اصل، تضمین میکند که داده ای از دست نمیرود و می توان در صورت نیاز، تمام محاسبات را از ابتدا بر روی داده ها انجام داد.
- تنها یک چارچوب برای پردازش مورد نیاز است: با توجه به اصل سادهسازی امور (KISS)، در این معماری تنها یک سامانه پردازشی خواهیم داشت که مدیریت و توسعه آن بسیار ساده تر است.
- تکرارپذیری عملیات پردازش داده : محاسبات و نتایج میتواند با ورود دادههای جدید و ترکیب آنها با دادههای قبلی، بهروز شود.
با این وجود، این معماری بیشتر برای کابردهایی مناسب است که منطق سازمانی حاکم بر آنها کاملاً مشخص و تقریباً بدون تغییر است. مثلاً برای بررسی و پردازش خطاهای نرم افزار و همچنین پایش وضعیت سرورها، میتوان از این معماری استفاده کرد چون غالب تصمیمات باید در لحظه گرفته شود و آمار مورد نیاز هم در همان حین دریافت اطلاعات قابل استخراج و ذخیرهسازی است. با این توضیح، معماری کاپا محدودیت بیشتری دارد و شکل خلاصه شده ای از معماری لامبدا است و برای سامانههای عمومی اطلاعاتی، معماری لامبدا که جامعتر بوده و امکان استفاده از ابزارهای بیشتری را فراهم میکند، ترجیح داده میشود. معماری پیشنهادی برای پایش شبکههای اجتماعی هم بر این معماری، متکی خواهد بود.
توسعه معماری لامبدا
معماری لامبدا تنها بر سه لایه پردازش سریع، پردازش زمانمند و لایه کاربست تاکید دارد در صورتی که در یک سامانه جامع اطلاعاتی به مولفهها و بخشهای حیاتی دیگری نیز نیاز داریم. به عنوان مثال، لایه ذخیره سازی دادهها بسیار مهم است و امروزه توصیه میشود برای این بخش، از معماری دریاچه داده استفاده شود تا تمامی نیازهای فعلی و آتی دادهای یک سازمان را بتوان به خوبی مدیریت نمود. درباره دریاچه داده، در بخش بعدی توضیح خواهیم داد.
با توجه به گستردگی منابع داده تولید کننده جریان، نیازمند چارچوبی هماهنگ برای دریافت دادهها و تزریق آن به خط پردازش داده هستیم. به این لایه، Data Acquisition Layer میگوییم که دادهها را با قالبهای مختلف دریافت کرده، آنها را به یک قالب استاندارد و یکپارچه تبدیل نموده و به مرحله بعد ارسال میکند. این لایه باید بتواند حجم عظیم دادههای ورودی را مدیریت کرده، با دادههای ساختاریافته مانند بانکهای اطلاعاتی و دادههای بدون ساختار مانند صفحات وب هم به خوبی کار کند.
برای کاربردهایی مانند تحلیل شبکههای اجتماعی، کارکرد اصلی این لایه، کتابخانهها و برنامههایی خواهد بود که هر کدام دادههای یک شبکه اجتماعی خاص را خوانده، آنها را به قالبی استاندارد تبدیل کرده و به مرحله پردازشی بعد تحویل دهد. شکل ۴ جایگاه این لایه را به عنوان بسط یافته معماری لامبدا نشان میدهد.
بخش مهم دیگری که در ساخت یک سامانه اطلاعاتی توزیع شده به آن نیازمندیم، لایه پیام رسانی است. (Messaging Layer). برای ایجاد یک خط تولید که بتواند به صورت توزیع شده در تمام شبکه به کار بپردازد و بتوان به راحتی سیستم را به صورت افقی گسترش داد، راهحلی که سالهاست به یک استاندارد در توسعه سامانههای توزیعشده تبدیل شده است، سامانههای پیام رسان مانند Kafka, RabbitMQ و ZeroMQ هستند که وظیفه آنها دریافت یک رخداد و تحویل آن به یکی از پردازههای بیکار در شبکه برای پردازش است. به این سامانههای پیامرسان، صفهای توزیع شده هم میگوییم. آپاچی پولسار جزء جدیدترین پروژه های آپاچی در این حوزه است.
در یک خط پردازش داده توزیعشده، تمام کارها برای پردازش درون این صفها قرار میگیرند و بعد از پردازش اولیه، نتایج برای پردازش بعدی، مجدداً وارد این صفهای توزیع شده میشوند تا به پردازه مورد نظر خود تحویل داده شوند و ادامه پردازش روی آنها صورت گیرد. این لایه، نقش واسط بین زیرسیستمها را ایفا میکند و از اصلیترین ارکان سامانههای اطلاعاتی معاصر هستند.
آخرین مولفهای که میتوان به معماری لامبدا اضافه کرد، لایه جذب داده است. در این بخش، تبدیلات و پیشپردازشهایی که باید قبل از ذخیره سازی داده روی آنها صورت گیرد، انجام میپذیرد. این لایه بیشتر یک لایه کمکی است که قبل از پردازش نهایی و ذخیره دادهها میتوان از آن استفاده کرد و قوانین مربوط به یکپارچهسازی و همگن سازی دادهها را در این لایه اعمال نمود.
دریاچه داده : لایه نوین ذخیره سازی دادهها
در تمامی معماریهای اطلاعاتی، یک لایه مهم و حیاتی وجود دارد با نام لایه ذخیره دادهها که وظیفه ذخیره و بازیابی اطلاعات را برعهده دارد. اگر بخواهیم بسته به کاربرد، مدل دادهای برای این لایه پیشنهاد کنیم معمولاً یا به قالبهای رایج ذخیره اطلاعات در کلانداده مانند HDFS, Parquet, ORC, Carbon Data و Kudu و یا به بانکهای اطلاعاتی NewSQL و NoSQL مانند کاساندرا، الاستیک سرچ، مانگو دی بی، پستگرس، اس کیو ال سرور و اوراکل میرسیم.
اما در سیستمهای اطلاعاتی معاصر، دو نیاز جدید هم علاوه بر بحث کلاسیک ذخیره و بازیابی توزیعشده اطلاعات بوجود آمده است. اول اینکه موضوع تحلیل حرفهای دادهها باید چارهاندیشی شود و انباره داده هم در کنار بانکهای اطلاعاتی معمول قرار بگیرد تا با تجمیع دادههای سازمان درون انباره داده، شاهد رونق هوش تجاری و تصمیم سازیهای مبتنی بر دادهها در آنها باشیم.
از طرفی، نیازمندیهای آتی سازمان به اطلاعات فعلی هم قابل پیش بینی نیست و بهتر است شکل خام دادهها تا حد امکان برای پردازشها و دادهکاویهای آینده حفظ شود. ایدهای که به ظهور مفهوم دریاچه داده و رواج آن در ادبیات حوزه کلانداده و معماریهای اطلاعاتی گردید.
جیمز دیکسون یکی از مهندسین شرکت پنتاهو در سایت اینترنتی این شرکت، هنگامی که در حال ارائه گزارشی از فعالیتهای اخیر این شرکت در حوزه هدوپ بود، دو مشکل اصلی را برای مواجهه با دادهها و انبارش آنها بیان کرد (منبع). اول اینکه تنها بخشی از خصوصیات داده برای تصمیم گیری استفاده میشود و تنها به سوالات خاصی میتوان پاسخ داد و دوم اینکه دادهها معمولاً متراکم و تجمیع میشوند و این امر، دادههای سطح پایینتر را از بین میبرد. دیکسون سپس اشاره میکند که ممکن است برای شرکت و سازمان در آینده سوالات جدیدی در باب دادهها بوجود بیاید و باید به نحوی دادههای موجود را با حداقل تغییر و خلاصهسازی، ذخیره کنیم. نهایتاً اصطلاح دریاچه داده به عنوان یک راهکار برای ذخیره خام دادهها با حداقل تغییر به منظور پاسخگویی به نیازهای فعلی و آتی یک سازمان را پیشنهاد میکند. مثالی هم که دیکسون استفاده میکند برای تبیین تفاوت مابین انبارهدادههای موجود و دریاچه داده، مقایسه بطریهای آب آماده شده در فروشگاهها با آب طبیعی موجود در یک دریاچه است که اولی فقط نیازهای نوشیدنی یک فرد را برطرف میکند اما دومی می تواند مصارف مختلفی از آبیاری و استحمام و نوشیدن و غیره داشته باشد.
می توانیم طبق تعریف دائره المعارف تخصصی techopedia دریاچه داده را اینگونه تعریف کنیم :
«یک مخزن متمرکز، قابل دسترسی سریع و حجیم شامل تمامی دادههای ساخیافته و بدون ساختار یک سازمان»
البته دریاچه داده بیشتر یک مفهوم کلان است که بر ذخیره دادهها با کمترین تغییر در یک سازمان تاکید دارد و معماریهای مختلفی برای نیل به این هدف توسط شرکتهای مختلف پیشنهاد شده است اما نکته اصلی این است که هنگام طراحی یک سامانه اطلاعاتی، نیم نگاهی هم به این نیازمندی داشته باشیم و درصورت داشتن فضای ذخیره سازی کافی، سعی کنیم دادههای ورودی را به همان شکل ذخیره کرده و سپس پردازشهای خود را روی آنها انجام دهیم و نتایج پردازش که خود دادههای جدیدی خواهند بود را به دریاچه داده سازمان اضافه کنیم.
البته نکته مهمی که درباره دریاچه داده مطرح است عدم تبدیل آن به یک باتلاق داده است (ر. ک. مقاله دریاچه داده: فرصتی برای کشف بینش و خلق ارزش) یعنی به قدری در ذخیره خام دادههای یک سازمان تاکید کنیم که استفاده از آن تحت الشعاع قرار گیرد و درگیر مسائلی مانند فضای ذخیره سازی و مدیریت فرادادهها شویم بدون اینکه استفاده خاصی از خود دادهها به عمل آوریم .
سلام و تشکر از توضیحات خیلی خوب شما – استفاده کردم