الستیک سرچ (elastic search) مسیله این است...

توی این پست میخوام یکم در مورد الستیک سرچ که یه ابزار برای تحلیل و بررسی داده های عظیمه حرف بزنم و یه مقدار روش کار کردن باهاش و ابزارایی که بهش وصل میشن رو توضیح بدم پس اگه میخواید با ابزار های big data آشنا بشید این پست میتونه شروع خوبی براتون باشه.بزارید از اول توضیح بدیمالستیک سرچ چیه ؟الستیک سرچ برنامه ای متن باز برای تحلیل و بررسی هر نوع داده شامل متن , عدد و داده های جغرافیایی و ... هست که در واقع بهشتی برای اونها که با بیگ دیتا سر و کار محسوب میشه چون برای همین کار طراحی و توسعه داده شده زبانی که باهاش کار میکنه جاوا هست و بر روی کتابخونه lucene توسعه داده شده.در واقع الستیک سرچ هسته اصلی اکوسیستم elastic هست که شامل ابزار های زیادی از جمله kibana و logstash , beats و ... میشه که اکثرشون به صورت مسقیم یا غیر مستقیم به هسته اصلی(elastic search) وصل میشن و کارشون رو انجام میدن همه این ابزارها روش هایی رو برای راحت تر کردن کار با elasticsearch ارایه میدن که در ادامه در مورد همشون حرف میزنم الستیک سرچ یه کتابخونه برای زبان برنامه نویسی یا حتی پلتفرم برنامه نویسی هم نیست کاملا یه ابزار مستقله که روش کار کردن خودش رو داره و باید باهاش خیلی کار کرد تا جزییاتش دست آدم بیاد و با توجه به قدرت مند بودنش مسلما تنظیمات و کار کردش یه مقدار پیچیدس و صبر و حوصله زیادی از آدم میبره مخصوصا اگه بخوایم با داکر ازش استفاده کنیم ( ۲ روز طول کشید تنظیمات درست داکرش رو پیاده کنم :)) )برای کار با این برنامه واقعا خفن! باید از rest api هایی که در اختیار ما قرار میده استفاده کنیم و مثل هر برنامه عادی که با متودولوژی rest ساخته میشه اطلاعات رو با put اپدیت کنید , با delete پاک کنید و ... این قسمتش برای کسایی که مثل من از قبل چند تا برنامه با rest ساختن خیلی آشنا و ساده میاد ولی قسمت جالبش موقع سرچ در داخل دیتاها و به اصلاح query زدن هست که خیلی جالب پیاده شده و خیلی آدم رو یاد Graph QL میندازه ولی Graph QL نیست و با توجه به نیاز الستیک سرچ کاستومایز شده این قسمت که چطور از روش های مختلف استفاده کردن تا در نهایت به یک راه حل جامع برسند من رو واقعا به وجد میاره چطور کار میکنه ؟اسلتیک سرچ درواقع یک موتور تحلیل داده محسوب میشه ولی میتونه اطلاعات رو به خوبی در خودش نگه داره و حتی برای جلوگیری از ازبین رفتن اطلاعات میتونه به صورت اتوماتیک از اونها بک اپ بیگیره همچنین توی سرور های مختلط توضیع بشه وقتی دیتا خیلییییی بزرگ بودن بتونه اطلاعات رو تقسیم کنه تا سرعت کار بالا بره سیستم کلی ذخیره سازی داده به این صورت هست که به کل سرور های elasticsearch که ما ران کردیم تا یه وظیفه مشخص انجام بدن cluster گفته میشه و به هر کدوم از اون سرور ها node گفته میشه همچنین اطلاعات اصلی در قسمتی به اسم shard ذخیره میشن ( بهش primary data هم میگن) و همیشه بک اپ هایی از داده های اصلی توی node های دیگه وجود داره تا موقع از دست دادن node اصلی بقیه node ها بتونن کار خودشون رو ادامه بدن مثل تصویر پایین دیگه چی دار ؟یه محیط گرافیکی به اسم kibana هم داره که برای مستقیم کار کردن با الستیک سرچ هست و خیلی هم خوشگل طراحی و پیاده شده انصافا من پسندیدم!همچنین برنامه ای فوق العاده به اسم logstash هست که اطلاعات مورد نیازمون رو از لاگ های apache , nginx یا فایل های csv و یا حتی مستقیما از دیتابیس سرور مثلا mysql یا postgresql جمع میکنه و اون های رو به فرمت json ( که فرمت قابل فهم الستیک سرچ هست) تبدیل میکنه و به الستیک سرچ میفرسته .حتی خیلی از اطلاعات رو به صورت اتوماتیک خودش از داده های اصلی تولید میکنه مثلا میتونه با استفاده از ip های موجود در لاگ های آپاچی موقعیت مکانی و جغرافیایی یوز هامون رو مشخص کنه... البته درسته مخصوص الستیک سرچ ساخته شده ولی خیلی جاهای دیگه هم میشه ازش استفاده کرد بعلاوه اینها مجموعه ای از برنامه ها به اسم beats هست که برای جمع آموری اطلاعات در لحظه هستن مهم ترینشون filebeat هست که از تنظیماتش یه سری فایل رو براش مشخص میکنیم که رصد کنه و خودش به صورت اتوماتیک هر موقع فایل توسط برنامه های خارجی تغییر کرد یه نسخه از فایل رو به logstash میفرسته تا اطلاعات جدید روی elastic search اپدیت بشن سخن آخریادگیری یه همچین ابزارهایی واقعا فانه و دیدگاه تازه ای رو به روش های پیاده سازی نرم افزار به آدم میده که چه طور میشه یه نیاز کلی رو به قسمت های کوچیک تقسیم کرد و هر قسمت رو جداگانه توسعه داد هر چند شاید این ابزار هنوز به دردمون نخور و بیش از حد نیازمون باشن ولی آشنا بودن با آنها باعث میشه موقع تصمیم گیری برای پیشبرد پروژه هامون بدونیم چطور میخوایم عمل کنیم تنظیمات داکرتون رو میتونید از لینک زیر بردارید و با docker-compose اولین سرورتون رو بیاری https://gist.github.com/amirhoseinBK/baca25030a64b30197011c5da8b214dd