معماری پیشنهادی برای پردازش لحظهای دادههای بورس
پردازش داده های بورس همواره یکی از حوزه های جذاب کاربردهای هوش مصنوعی و یادگیری ماشین در سالیان اخیر بوده است. با توجه به حجم بسیار بالای داده های تبادل شده در این صنعت و نیاز به اخذ تصمیمات لحظه ای، نیازمند یک معماری کامل و جامع و با نگاه به نیازمندیهای آینده هستیم .
معمولا هنگام کار با داده های بورس، تمرکز کارشناسان فنی بر انتخاب درست بانک اطلاعاتی است و تمام گزارشات و تصمیمات بر اساس پرس و جوهای ارسال شده به این بانک اطلاعاتی اخذ می شود اما در یک معماری جامع، بانک اطلاعاتی یک بخش از چندین مولفه تشکیل دهنده سامانه پردازشی خواهد بود آنهم با این فرض که انتخاب بانک اطلاعاتی هم درست صورت گرفته باشد.
در حوزه پردازش داده های بورسی نیازمندیهای زیر باید توسط معماری داده پیشنهادی پوشش داده شود :
- امکان دریافت اطلاعات مرتبط با بورس از سامانه های مختلف
- توزیع داده ها برای پردازش موازی در شبکه
- امکان ایجاد خط پردازش که بتوان بسته به نیاز، مراحلی را به آن کم یا زیاد کرد
- به روز رسانی لحظه ای اندیکاتورها و تولید سیگنال های خرید و فروش
- اعلان لحظه ای تغییرات مورد نیاز کاربران مشترک (مشتریان) و تحلیل گران
- پایش و مانیتورینگ مداوم بازار و به روز شدن آمار با ورود داده های جدید به صورت بلادرنگ
- تولید داده های مدیریتی و تحلیلی در انباره داده و به روز رسانی لحظه ای آن
- استفاده از سامانه های پردازشی کلان داده برای کار با هر حجمی از اطلاعات بخصوص پردازش دادههای جریانی
- امکان کار با هر نوع داده و ذخیره و بازیابی دادهها از هر منبع
- ذخیره خام داده های دریافت شده برای آنالیزهای بعدی (ایجاد دریاچه داده)
- کار با ابزارهای متن باز و اپن سورس (به دلیل مسایل مالی و نیز اطمینان از امنیت بالای آنها)
- امکان ایجاد داشبوردهای متنوع برای مدیران و کارشناسان واحدهای مختلف بورس
- امکان ایجاد تحلیل های سفارشی و تولید انواع گزارش به صورت ساده و کاربردی برای تحلیلگران و مدیران
- وجود یک ساختارداده یکپارچه در کل سازمان (Schema Management)
- لحاظ موارد امنتیتی و راهبری داده در سازمان
- سهولت عملیات توسعه (DevOps) برای نگهداشت و مدیریت بخش فنی کار
معماری داده پیشنهادی
برای سیستمی با نیازمندیهای فوق معماری پیشنهادی آقای «تیم اسپن[۱]»که در نوامبر ۲۰۱۸ منتشر شده است[۲]را به عنوان مبنای کار، انتخاب می کنیم. در این مقاله که با عنوان «Real-Time Stock Processing With Apache NiFi and Apache Kafka» منتشر شده است، یک معماری جامع و به روز معرفی شده است که مولفه های اصلی این معماری در شکل زیر مشخص شده است.در ادامه، تک تک آنها را توضیح میدهیم:
بخش دریافت و جذب دادهها
اولین بخش از این سامانه، بخش دریافت یا Ingestion است که وظیفه اتصال به منابع داده ای مختلف مانند توابع ارائه شده توسط شرکتهای زیر ساخت بورسی را به صورت مطمئن و پایدار برعهده دارد.
همچنین دریافت اطلاعاتی مانند اخبار خبرگزاری ها، داده های شبکه های اجتماعی و مانند آن هم در این بخش انجام خواهد شد.
برای مدیریت دریافت داده ها از نرم افزار Apache Nifi (آپاچی نایفای) استفاده می کنیم که بتوانیم به صورت گرافیکی، منابع داده ای را مشخص کرده، کدهای لازم برای پردازش اولیه آنها قبل از ورود به خط پردازش داده اصلی را مدیریت کنیم.
با توجه به اینکه اطلاعات خام از منابع داده ای مختلف جمع آوری خواهند شد، وجود این بخش به عنوان هماهنگ کننده و توزیع کنندهداده های خام در کانالهای پردازشی ضروری است.
از طرفی وجود ابزار گرافیکی نایفای، به مدیران و تیم تحلیل، امکان توسعه و گسترش خط پردازش را به سرعت و سهولت زیاد، فراهم می کند.
در ادامه، نمایی از محیط گرافیکی نایفای در یک پروژه واقعی و تنظیمات گرافیکی هر مرحله از پردازش به نمایش گذاشته شده است :
کانال های توزیع پیام
پس از دریافت داده های خام، با توجه به اینکه قرار است مراحل پردازشی مختلفی روی داده ها صورت گیرد و از طرفی، حجم بالای داده ها نیاز به توزیع پردازش را در شبکه ای از سیستم ها، ضروری می نماید، نیاز به یک کانال ارتباطی امن و با توان عملیاتی بالا برای توزیع داده ها در شبکه خواهیم داشت.
در سالیان اخیر و در حوزه کلان داده، پروژه متن باز کافکا به یک استاندارد در طراحی سیستم های کلان اطلاعاتی تبدیل شده است. وظیفه اصلی کافکا هم دقیقا توزیع و تحویل پیام ها در کانال های ارتباطی مختلف به پردازش کننده هاست. (معماری داده شرکت اوبر از جمله مقالات اخیر در این حوزه است)
اگر بخواهیم کمی دقیق تر صحبت کنیم، بعد از دریافت داده خام در مرحله اول، بسته به اینکه چه کاری قرار است روی این داده صورت گیرد، داده خام یا داده غنی شده (داده ای که اطلاعاتی مانند ساعت دریافت، منبع دریافت و … به آن اضافه شده است) به یک یا چند کانال در کافکا ارسال می شود.
فرآیندهایی که کارشان پردازش آن نوع داده خاص است و در کل شبکه حضور دارند، ورودی خود را از کافکا می گیرند و پردازش لازم را بر روی آن صورت می دهند. با اتمام مرحله اول پردازش که می تواند تغییر قالب، اعمال یک الگوریتم خاص، ذخیره در دیتابیس و مانند آن باشد، داده جدید یا همان داده قبلی وارد کانال دیگری در کافکا می شود تا پردازش بعدی روی آن صورت گیرد. پردازش بعدی هم توسط یک پردازشگر دیگر، در بخش دیگری از شبکه که حافظه یا سی پی یو آزاد داشته باشد، صورت می گیرد.
حال اگر در این بین، داده ای توسط یک پردازشگر دریافت شده و به هر دلیلی، پردازش مربوط به آن انجام نشود، خود کافکا داده را برای پردازش لازم به یک پردازشگر دیگر در شبکه تحویل میدهد.
خوبی این روش پردازشی این است که هم پردازش بلادرنگ را فراهم می کند چون به محض دریافت داده، اولین سیستمی در شبکه که منابع آزاد داشته باشد، شروع به پردازش آن خواهد کرد، از طرفی طراحی خطوط پردازش داده هم به کمک کانال های مختلف ارتباطی کافکا به سادگی امکان پذیر است. گارانتی تحویل و پردازش هم توسط کافکا، داده می شود.
البته در سالیان اخیر، بنیاد آپاچی حمایت از پروژه پولسار را هم در برنامه خود دارد که این پروژه هم یک صف توزیع شده با امکانات حرفه ای تر از کافکا است اما هنوز در اکوسیستم کلان داده به بلوغ لازم نرسیده است و بهتر است فعلا از کافکا استفاده شود.
بخش پردازش
مهم ترین بخش سامانه پردازش داده ، پردازش و مدیریت داده های ورودی است. با توجه به ماهیت جریانی داده های ورودی، باید از سامانه پردازشی ای استفاده کرد که هم بتواند داده های جریانی و در حال ورود را به سرعت پردازش کند و هم بتواند بر روی داده های زمان مند و قدیمی و موجود در سیستم ، کار کند.
در اکوسیستم کلان داده، اکثر چارچوب های پردازشی موجود از هر دو حالت پردازش داده یعنی پردازش جریانهای داده و پردازش انبوه و زمانمند پشتیبانی می کنند.
چارچوب های پردازشی که امروزه برای پردازش حجم بالای داده به صورت متن باز موجودند عبارتند از :
از بین سیستم های فوق، محبوبیت و رواج استفاده اسپارک از بقیه سامانه ها بیشتر است و بنابراین در مدل پیشنهادی، از این چهارچوب استفاده شده است. نایفای هم مانند قبل برای طراحی گرافیکی بخش پردازش و مدیریت بصری فرآیندها و تحویل آنها به اسپارک به کار رفته است. از خوبیهای اسپارک، امکان کدنویسی راحت آن با پایتون و وجود بخش Spark Streaming است که اجازه می دهد بتوان داده های جریانی را مشابه با داده های انبوه و ذخیره شده، به سهولت پردازش و مدیریت کرد.
اگر با دید درازمدت بخواهیم به این پروژه نگاه کنیم بهتر است که از آپاچی بیم استفاده شود و موتور پردازشی آن، اسپارک انتخاب شود که در ادامه مسیر، اگر تصمیم به تغییر چارچوب پردازشی داشتیم، بدون تغییر در کدهای نوشته شده، به سرعت امکان آن برایمان فراهم باشد.
بخش دسترسی به داده و بانکهای اطلاعاتی
برای ذخیره دادهها به صورت خام و تشکیل دریاچه داده که در آینده هم بتوان پردازشهای جدیدی روی آنها انجام و داده های تحلیلی نوینی تولید کرد، می توانیم از سیستم مدیریت فایل توزیع شده هدوپ به نام HDFS استفاده کنیم و برای داده های عملیاتی و روزانه هم از دیتابیس هایی مانند Sql Server، پستگرس و یا مایاسکیوال استفاده شود.
البته استفاده از Sql Server این ریسک را به همراه دارد که با پیوستن ایران به سازمان تجارت جهانی ، مجوز تجاری استفاده از آن الزامی شود که تهیه لایسنس تجاری آن، بسیار هزینه بر است و بهتر است به جای آن از دیتابیس های پیشرفته و رایگانی مانند پستگرس و یا هایو بر روی HDFS استفاده کرد.
اگر بخواهیم بخش مدیریت داده را به کلود و سامانه های ابری داخل یا خارج کشور منتقل کنیم ، بهتر است از آلکسیو به عنوان واسط ذخیره و بازیابی اطلاعات استفاده شود. از طرفی، استفاده از قالبهایی مانند کیودو یا پارکوئت، میتواند فضای ذخیره سازی بهینهتری در اختیار ما قرار دهد.
بخش انباره داده (داده های تجمیعی و تحلیلی)
یکی از مهم ترین بخش های سیستم برای تیم تحلیل و آنالیز دادهها، انباره داده سامانه است که در آن اطلاعات آماری و تجمعی هر سهم مانند میزان خرید و فروش روزانه، ساعتی، ماهیانه و … ذخیره می شود و امکان تولید انواع گزارش بر اساس آن وجود دارد.
برای این منظور، نیازمند یک سامانه انبارش داده ای داریم که بتواند به صورت بلادرنگ و درلحظه، داده های خود را به روز رسانی نماید.
بنیاد آپاچی با درک ضرورت این مولفه و نیاز به آن در اکثر سامانه های کلان داده دنیا، پروژه دروید (Druid) را روانه بازار کرده است که دقیقا با هدف ساخت یک انباره داده توزیع شده و با قابلیت به روز رسانی لحظه ای دادهها، مورد حمایت این بنیاد قرار گرفته است.
بنابراین با ورود داده های جدید و پردازش آنها توسط اسپارک، هر زمان که آمار جدیدی باید به روز رسانی شود، این اطلاعات به دروید ارسال شده و توسط داشبوردهای مدیریتی که داده های خود را از این انباره داده می خوانند به سرعت به اطلاع ذی نفعان خواهد رسید و تحلیلگران هم همیشه به دادههای به روز و لحظه ای، دسترسی دارند و تیم تحلیل شرکت، با این بخش از سامانه بیشتر سر و کار خواهد داشت (البته از طریق ابزارهای گرافیکی و هوش تجاری )
داشبوردهای مدیریتی
یکی دیگر از بخش های اصلی این سیستم، بخش پایش و مانیتورینگ و داشبوردهای مدیریتی است.
می توان از آپاچی سوپرست به عنوان موتور تولید داشبورد استفاده نمود (فعلا البته یک پروژه سطح بالا نیست و در مرحله رشد قرار دارد) و یا از ابزارهای دم دستی و معتبر هوش تجاری موجود مانند پاور بی آی، تبلو و کیولیک ویو استفاده کرد.
نمایی از داشبوردهای ساخته شده توسط آپاچی سوپرست، در زیر نمایش داده شده است :
بخش امنیت و راهبری داده
برای لحاظ امنیت و نیز راهبری داده و تعریف روالهای استاندارد در کل شرکت برای کار با داده ها، از آپاچی اطلس و نیز آپاچی رنجر استفاده خواهیم کرد.
بخش عملیات توسعه و راهبری شبکه
یکی دیگر از دغدغه های مهم در تولید سامانه های پردازش داده، بحث مدیریت شبکه و سیستم های مختلف است که برای آن هم می توان از آپاچی آمباری و اسمارت سنس استفاده کرد.
[۱] https://dzone.com/users/297029/bunkertor.html
[۲] https://dzone.com/articles/real-time-stock-processing-with-apache-nifi-and-ap