معماری نرم افزار در سیستم های کلان داده (BigData)

کلان داده (Big Data) به حجم عظیمی از داده های ساختاریافته، نیمه ساختاریافته و حتی بدون ساختار اشاره دارد که میتواند توسط منابع مختلفی مانند رسانه های اجتماعی، تراکنش های آنلاین و دستگاه های مبتنی بر حسگر تولید شوند. این داده ها بیش از حد بزرگ و پیچیده هستند و نمی توان آنها را با استفاده از تکنیک های مدیریت و پردازش سنتی داده ها پردازش و تجزیه و تحلیل کرد. در نتیجه، سازمان ها برای مدیریت، ذخیره سازی، پردازش و تجزیه و تحلیل این داده ها به سیستم های تخصصی Big Data روی می آورند. سیستم‌های کلان داده برای رسیدگی به مقیاس و پیچیدگی عظیم داده‌های بزرگ و ارائه پردازش و تحلیل سریع و کارآمد طراحی شده‌اند. این سیستم ها معمولاً از ترکیبی از فناوری های ذخیره سازی و پردازش توزیع شده مانند Hadoop و Spark برای توزیع داده‌ها و اجرای وظایف پردازش در چندین ماشین استفاده می کنند. همچنین از الگوریتم ها و تکنیک های تخصصی مانند MapReduce و یادگیری ماشینی برای پردازش و تجزیه و تحلیل داده‌ها نیز، در این سیستم ها استفاده میشود.نمونه ای اجزای پردازش و ذخیره سازی دریک سیستم کلان داده هدف معماری نرم‌افزار داده‌های بزرگ، ارائه چارچوبی مقیاس‌پذیر و انعطاف‌پذیر برای مدیریت حجم زیادی از داده‌ها در قالب‌های مختلف، و امکان پردازش و تحلیل کارآمد و مؤثر آن داده‌ها است.چند مؤلفه کلیدی که باید در معماری نرم افزار کلان داده به آنها توجه شود:۱- ذخیره سازی داده ها: این مؤلفه وظیفه ذخیره و مدیریت حجم زیادی از داده ها را در قالب های مختلف از جمله داده های ساختار یافته، نیمه ساختاریافته و بدون ساختار بر عهده دارد. نمونه‌هایی از راه‌حل‌های ذخیره‌سازی داده برای داده‌های بزرگ عبارتند از Hadoop HDFS، پایگاه‌های داده NoSQL و راه‌حل‌های ذخیره‌سازی داده مبتنی بر ابر.۲- پردازش داده ها: این مؤلفه وظیفه پردازش و تجزیه و تحلیل حجم زیادی از داده ها را در زمان واقعی یا تقریباً واقعی بر عهده دارد. نمونه هایی از چارچوب های پردازش داده برای داده های بزرگ عبارتند از Apache Spark، Apache Flink و Apache Storm.۳- تجزیه و تحلیل داده ها: این جزء مسئول انجام وظایف پیچیده تجزیه و تحلیل داده ها، مانند یادگیری ماشین، تجزیه و تحلیل پیش بینی و تجسم داده ها است. نمونه هایی از ابزارهای تجزیه و تحلیل داده برای داده های بزرگ عبارتند از Apache Mahout، Apache Hadoop MapReduce و Apache Spark MLlib.۴- حاکمیت داده (Data Governance): این مؤلفه مسئول مدیریت چرخه عمر داده ها، از ابتدا تا بایگانی است. این مولفه همچنین مسئول کیفیت داده، مدیریت متادیتا و امنیت داده ها نیز میباشد.ویژگی های کیفی دو مسئله مهم که در سیستم های کلان داده مورد توجه است یکی آسانی مدیریت پردازش و ذخیره سازی و دیگری توانایی گسترش است. همچنین مهم است که تأثیر معماری بر سیستم کلی و همچنین هرگونه خطرات احتمالی یا ملاحظات امنیتی در این طراحی در نظر گرفته شود. طراحی و پیاده سازی صحیح یک معماری نرم افزار برای سیستم های کلان داده کمک میکند این سیستمابزاری ارزشمند برای پردازش و تحلیل داده ها باشد. نکته مهم در انتخاب و طراحی یک معماری نرم‌افزار مناسب پیدا کردن ویژگی های کیفی مورد نیاز در سیستم و تمرکز بر روی آنهاست و با توجه به این دو مسئله در سیستم های کلان داده مهمترین ویژگی های کیفی را اینگونه میتوان تحلیل کرد:کارایی (performance): کارایی در سیستم های کلان داده اهمیت بالایی دارد و یکی از اهداف مهم در این سیستم با توجه به حجم عظیم داده ،سرعت پردازش و ذخیره سازی و مشاهده داده‌هاست.دسترس پذیری (availability) : با توجه به این که در اکثر سیستم های کلان داده جریان اطلاعات همواره به سمت سیستم وجود دارد و نیاز به پردازش آنها یک نیاز همیشگی است، در صورت عدم وجود قابل قبول دسترس پذیری،کل سیستم دچار مشکل میشود.مقیاس پذیری (scalability) : ویژگی کیفی مهم دیگر مقیاس پذیری است چرا که با توجه به رشد داده‌ها و نیاز به ذخیره سازی و گسترش سیستم مهم است که به این ویژگی اهمیت داده شود. نکته‌ای که در مسئله مقیاس پذیری حائز اهمیت است هزینه گسترش سیستم میباشد و طراحی معماری نرم‌افزار این سیستم ها باید بگونه‌ای باشد که در صورت نیاز به رشد نمایی ظرفیت هزینه ها به شکل خطی افزایش یابند.علاوه بر ویژگی های کیفی ذکر شده در بالا برای معماری نرم افزار سیستم های کلان داده ویژگی های انعطاف پذیری و قابلیت نگهداری نیز بسیار مهم است. این تضمین می‌کند که معماری می‌تواند حجم زیادی از داده‌های تولید شده و پردازش شده را در خود جای دهد و می‌تواند با نیازها و فناوری‌های در حال تغییر در طول زیست خود سازگار شود. چندین رویکرد مختلف برای طراحی معماری نرم افزار برای سیستم های داده های بزرگ وجود دارد و انتخاب رویکرد به نیازهای خاص سازمان و داده های در حال پردازش بستگی دارد. در ادامه این مطلب به بررسی دو معماری معروف و کارآمد در سیستم های کلان داده و مقایسه این دو میپردازیم.معماری لامبدا (Lambda Architecture) :معماری لامبدا یک الگوی طراحی برای سیستم‌های کلان داده است که قابلیت‌های پردازش همزمان و دسته‌ای را ارائه می‌کند.در این معماری داده‌ها را به دو جریان، یکی برای پردازش بلادرنگ و دیگری برای پردازش دسته‌ای جدا می‌شوند و سپس نتایج را ترکیب می‌کند تا دید یکپارچه‌ای از داده‌ها را ارائه دهد. این معماری به مدیریت مقیاس عظیم و پیچیدگی سیستم‌های کلان داده کمک می‌کند و پردازش با تأخیر کم و پردازش با سرعت بالا را فراهم می‌کند. معماری لامبدا برای رسیدگی به مجموعه داده های کوچک و بزرگ و همچنین برای تطبیق منابع داده جدید و نیازهای متغیر طراحی شده است. جریان داده در معماری لامبدااین معماری مشکل محاسبه توابع مختلف روی داده های دلخواه را در زمان واقعی (real time) با تجزیه مسئله به سه لایه حل می کند: لایه دستهای (batch layer)، لایه سرویس دهنده (serving layer) و لایه سرعت (speed layer). در این معماری مولفه پردازش بلادرنگ می تواند مجموعه داده های کوچک را مدیریت کند و نتایج سریع ارائه دهد، در حالی که جزء پردازش دسته ای می تواند مجموعه داده های بزرگ را مدیریت کند و نتایج دقیق تری ارائه دهد. داده های دریافتی برای پردازش به هر دو لایه دسته ای و لایه سرعت ارسال می شوند که آپاچی کافکا فناوری اجرای این فرآیند است. وظایف هر کدام از این لایه ها به شرح زیر است: لایه دسته ای (batch layer) شامل مجموعه داده های اصلی در حال رشد است که در یک سیستم فایل توزیع شده مانند HDFS ذخیره شده و نماهای دسته ای تولید می کند. برای پردازش داده های دسته ای از MapReduce استفاده می شود که مدل برنامه نویسیHadoop است.لایه سرویس دهنده (serving layer) کار بارگذاری و نمایش داده‌ها و نماهای دسته‌ای را بر روی یک مخزن داده بر عهده دارد، که در آنجا بتوان اطلاعات را جستجو کرد و روی آنها پرس و جو انجام داد . این ذخیره‌سازی داده لایه سرویس‌دهنده نیازی به نوشتن تصادفی ندارد، اما باید به‌روزرسانی‌های دسته‌ای و خواندن تصادفی را پشتیبانی کند و بنابراین می‌تواند فوق‌العاده ساده باشد. آخرین لایه، لایه سرعت (speed layer) است که فقط با داده های جدید سروکار دارد و به روز رسانی های با تاخیر بالا در لایه سرویس دهنده را جبران می کند. در این لایه از سیستم پردازش جریانی مانند Storm استفاده می‌شود که با داده های اخیر، فقط برای محاسبه نماهای زمان واقعی سروکار دارد. این نماهای محاسبه‌شده تا زمانی که داده‌ها راه خود را از طریق لایه دسته‌ای و سرویس‌دهی پیدا نکنند، باقی می‌مانند.معماری لامبدا را می توان با استفاده از ابزارها و فناوری های مختلفی پیاده سازی کرد، از جمله:سیستم های ذخیره سازی توزیع شده داده ها مانند Apache Cassandra، Apache HBase .فریمورک‌های پردازش جریان مانند Apache Kafka, Apache Flink, and Apache Spark Streaming.فریمورک‌های پردازش دسته ای مانند Apache Hadoop MapReduce و Apache Spark.نمایه سازی و موتورهای جستجو مانند Apache Solr و Elasticsearch.نمایه سازی و موتورهای جستجو مانند Apache Solr و Elasticsearch.بزارهای پردازش و تبدیل داده مانند Apache Pig و Apache Hive.ابزارهای پرس و جو و تجسم مانند Apache Drill و Tableau.این ابزارها را می توان به روش های مختلف ترکیب و پیکربندی کرد تا یک سیستم معماری لامبدا بسازد که الزامات خاصی را برآورده کند.معماری لامبدا به طور گسترده در حوزه های مختلفی مانند خدمات مالی، تجارت الکترونیک و تبلیغات آنلاین استفاده می شود. این معماری یک انتخاب محبوب برای ساخت سیستم های داده های بزرگ مقیاس پذیر و انعطاف پذیر است که می تواند انواع موارد استفاده و نیازهای متغیر را مدیریت کند. این معماری از توابع لایه دسته ای و لایه جریان استفاده می کند و همچنان داده های جدید را به حافظه اصلی اضافه می کند و در عین حال اطمینان می دهد که داده های موجود دست نخورده باقی می مانند. شرکت هایی مانند توییتر، نتفلیکس و یاهو از این معماری برای رعایت استانداردهای کیفیت خدمات استفاده می کنند.معماری کاپا (Kappa Architecture)معماری کاپا نیز یک الگوی طراحی برای ساخت سیستم های پردازش داده است که بر سادگی و مقیاس پذیری تمرکز دارد و به طور خاص برای مدیریت حجم بالایی از داده هایی که به شکل سریع تولید میشوند (مانند سیستم های تراکنش های بانکی)، طراحی شده است. در یک سیستم معماری کاپا، تمام داده ها به عنوان یک جریان پردازش می شوند و در یک سیستم ذخیره سازی بادوام و توزیع شده مانند آپاچی کافکا ذخیره می شوند. این سبک از ذخیر سازی امکان پردازش داده ها با تاخیر بسیار کم را فراهم می کند و نیاز به لایه پردازش دسته ای جداگانه را از بین می برد و برای جایگزینی پردازش دسته ای، داده ها صرفاً از طریق سیستم جریان به سرعت منتقل می شوندجریان داده در معماری کاپا یکی شدن لایه دسته ای و لایه جریان با استفاده از ترکیبی از نرم افزارها و اجزای مورد نیاز برای ساخت و اجرای سیستم ذخیره سازی و پردازش کلان داده می شود که بزرگترین مزیت معماری کاپا است. این معماری برای پردازش داده های بلادرنگ مانند داشبوردهای بلادرنگ(real time) و یا KPI ها (معیارهایی که برای اندازه گیری عملکرد یک کسب و کار، پروژه یا فرد در برابر اهداف و اهداف خاص استفاده می شود)، نظارت و... بسیار مناسب است. ایده اصلی پشت معماری کاپا در سیستم‌های کلان داده، ارائه جایگزین ساده‌تر و کارآمدتر برای معماری لامبدا بود و مانند معماری لامبدا، معماری کاپا راه حلی مقیاس پذیر، مقاوم در برابر خطا، و قابلیت پردازش داده های بزرگ ارائه می دهد. همچنین این دو معماری از پشته فناوری (ترکیبی از نرم افزارها و اجزای مختلف فناوری که برای ساخت و اجرای یک برنامه نرم افزاری یا یک سیستم استفاده می شود.) یکسانی برای رسیدگی به پردازش جریان بی‌درنگ و پردازش دسته‌ای تاریخی استفاده می‌کنند. با این حال، معماری کاپا اغلب به عنوان یک رویکرد ساده تر و کارآمدتر در نظر گرفته می شود، زیرا همان طور که گفته شد نیاز به سیستم های پردازش دسته ای و جریانی جداگانه را از بین میبرد.برخی از انواع برنامه های شبکه های اجتماعی، دستگاه های متصل به سیستم مانیتورینگ مبتنی بر ابر و اینترنت اشیا (IoT) از نسخه بهینه سازی شده معماری لامبدا استفاده می کنند که عمدتاً از خدمات لایه سرعت ترکیب شده با لایه جریان برای پردازش داده ها بر روی دریاچه داده (data lake) استفاده می کنند که به معماری کاپا نزدیک اند.مقایسه دو معماریمعماری لامبدا راه حلی جامع برای پردازش دسته ای و در زمان واقعی برای حجم زیادی از داده ها ارائه می دهد و برای سازمان هایی که نیاز به پردازش داده های تاریخی و فعلی دارند، مناسب است. معماری لامبدا همچنین برای سازمان هایی که به انعطاف پذیری و مقیاس پذیری بالایی در سیستم های پردازش داده خود نیاز دارند نیز میتواند بکار گرفته شود. از سوی دیگر، معماری کاپا برای ساده سازی پردازش داده های سریع با استفاده از یک خط لوله واحد و یکپارچه در زمان واقعی طراحی شده است. این معماری برای سازمان‌هایی که نیاز به پردازش با تأخیر کم و پردازش رویداد محور داده‌ها دارند، و همچنین برای سازمان‌هایی که سادگی و کارایی را در سیستم‌های پردازش داده‌شان در اولویت قرار می‌دهند، مناسب است. در نهایت، انتخاب بین معماری کاپا و معماری لامبدا به الزامات و اهداف خاص یک سازمان بستگی دارد. هر دو معماری راه‌حل‌های مقیاس‌پذیر و کارآمدی را برای پردازش داده‌های بزرگ ارائه می‌کنند، اما آنها از دیدگاه‌های متفاوتی به مسئله نزدیک می‌شوند و ممکن است هر کدامبرای موارد استفاده مختلف مناسب‌تر باشند.نتیجه گیریمعماری نرم‌افزاری سیستم‌های کلان داده یک جنبه حیاتی برای مدیریت و پردازش موثر مقادیر زیاد داده است. یک معماری نرم‌افزاری که به خوبی طراحی شده باشد باید مقیاس‌پذیری، عملکرد و قابلیت نگهداری را برای مواجهه با حجم کثیر داده‌ای که تولید و پردازش میشود دارا باشد. همچنین همانطور که گفته شد هزینه هایی این فناوری ها و نرم افزار ها با خود همراه دارند و هزینه هایی که برای گسترش طولی و عرضی سیستم مورد نیاز است را برای ذینفعان پروژه پایین نگه دارد، در نتیجه انتخاب یک معماری نرم افزار مناسب بسیار با توجه با کاربری سیستم حائز اهمیت است.منابع:Avci, C., Tekinerdogan, B. & Athanasiadis, I.N. Software architectures for big data: a systematic literature review. Big Data Anal 5, 5 (2020). https://doi.org/10.1186/s41044-020-00045-1Architecting for Scale: High Availability for Your Growing Applications (Lee Atchison)J. Lin, "The Lambda and the Kappa," in IEEE Internet Computing, vol. 21, no. 5, pp. 60-66, 2017, doi: 10.1109/MIC.2017.3481351.Hasani, Zirije, Margita Kon-Popovska and Goran Velinov. “Lambda Architecture for Real Time Big Data Analytic.” (2014).Feick, M., Kleer, N. & Kohn, M., (2018). Fundamentals of Real-Time Data Processing Architectures Lambda and Kappa. In: Becker, M. (Hrsg.), SKILL 2018 - Studierendenkonferenz Informatik. Bonn: Gesellschaft für Informatik e.V.. (S. 55-66).Software Architecture for Big Data Systems, Software Engineering Institute | Carnegie Mellon University discussionhttps://towardsdatascience.com/a-brief-introduction-to-two-data-processing-architectures-lambda-and-kappa-for-big-data-4f35c28005bbhttps://hazelcast.com/glossary/lambda-architecture/این مطلب، بخشی از تمرینهای درس معماری نرم‌افزار در دانشگاه شهیدبهشتی است.