elastic-search

آشنایی با الاستیک سرچ Elasticsearch

الاستیک سرچ چیست ، چگونه کار می کند و در چه مواردی قابل استفاده است؟

قبل از شروع، اگر پروژه ای دارید و سعی می کنید که دیتا های الاستیک سرچ خود را تجسم کنید ، به صفحه تجزیه و تحلیل (analytics) الاستیک سرچ ما نگاهی بیندازید همچنین می توانید با یکی از اعضای تیم ما تماس برقرار کنید.

وقتی مردم درمورد الاستیک سرچ میپرسند؟ ” ممکن است بعضی ها بگویند که “یک فهرست” ، “یک موتور جستجو” ، ” دیتابیس آنالیتیکس ” ، “یک راه حل دیتا ” ، “سریع و منعطف (برای مقیاس پذیر) ”  یا  ” شبیه گوگل است”.

با توجه به سطح شناخت شما از این تکنولوژی ، این پاسخ ها ممکن است باعث شود متوجه شوید یا اینکه شما را بیشتر سردرگم کند. ولی بطور کل، تمام این پاسخ ها درست است و این بخشی از جذابیت الاستیک سرچ است.

در این سال ها ، الاستیک سرچ و اکوسیستم اجزایی که در اطراف آن رشد کرده بنام “Elastic Stack” برای موارد زیادی استفاده شده است ، از جستجوی ساده در وب سایت یا سند ، جمع آوری و آنالیز دیتا “لاگ” ، تا ابزار هوش تجاری، برای آنالیز دیتا  و بصری سازی.

پس یک موتور جستجوی ساده که توسط بنیانگذار الاستیک (Shay Bannon) برای دستور آشپزی همسرش ایجاد شده، چگونه به پرطرفدار ترین موتور جستجوی سازمانی امروز و یکی از 10 محبوب ترین “DBMS” ها (سیستم مدیریت پایگاه داده)، تبدیل شده است؟

ما در این پست می فهمیم که “الاستیک سرچ” چیست ، چگونه کار می کند و در چه مواردی استفاده میشود، و با این ها به این سوال پاسخ می دهیم.

الاستیک سرچ چیست؟

در واقع، الاستیک سرچ سروری است که می تواند درخواست های JSON را پردازش کرده و دیتاهای JSON را به شما برگرداند.

الاستیک سرچ یک موتور جستجو و آنالیز منبع باز (open source) و غیر متمرکز است که بر (Apache Lucene) ساخته شده و در جاوا توسعه پیدا کرده است.

این برنامه به عنوان یک ورژن مقیاس پذیر از چارچوب جستجوی منبع باز “لوسین” شروع شد و توانایی مقیاس بندی هم تراز ایندکس های “Lucene” را اضافه کرد.

با کمک الاستیک سرچ می توانید، حجم بزرگی از دیتا ها را،سریع و نزدیک به (زمان حقیقی) ذخیره ، جستجو و آنالیز کرده و در عرض میلی ثانیه پاسخ دهید.

همچنین می تواند پاسخ های جستجوهای سریع، را به دست آورید چون به جای جستجوی متن ، فهرست را جستجو می کند. الاستیک سرچ از یک ساختار مبتنی بر سند به جای جداول و اسکیما ها استفاده می کند و برای ذخیره و جستجوی دیتا،(REST API) های گسترده ای دارد.

عملکرد الاستیک سرچ چگونه است؟

برای اینکه عملکرد الاستیک سرچ را بهتر بشناسید، اجازه دهید ابتدا بعضی از کانسپت های پایه از چگونگی سازماندهی دیتاها و اجزای “بک اند” آن را پوشش دهیم.

مفاهیم  استدلالی :

  • اسناد : اسناد واحد پایه ی اطلاعاتی هستند که می توانند در الاستیک سرچ ایندکس (فهرست بندی) شوند که در JSON ، که یک فرمت جهانی مبادله دیتای اینترنت است ، فهرست شوند.  شما می توانید به یک سند مانند یک ردیف در دیتابیس رابطه ای، که یک مؤسسه مشخص را نشان می دهد،یعنی همان چیزی که در جستجوی آن هستید، فکر کنید.
    در الاستیک سرچ ، یک سند می تواند چیزی بیشتر از یک متن باشد ، می تواند دیتا ی ساختار یافته ای باشد که در” JSON” رمزگذاری شده . این دیتاها می توانند شامل مواردی مثل اعداد ، ردیف ها و تاریخ باشد. هر سند  یک آیدی منحصر به فرد و یک دیتای مشخص دارد ، که نوع نهاد سند را نشان می دهد.
    مثلا، یک سند می تواند یک مقاله دانشنامه یا ورودی های  یک سرور وب را نشان دهد.
  • ایندکس ها (فهرست ها) : ایندکس، مجموعه ای از اسناد با مشخصاتی مشابه، است.
    ایندکس، بالاترین سطح موجودیت است که می توانید در الاستیک سرچ  از آن درخواست کنید.
    شما نیز میتوانید “ایندکس” را شبیه یک پایگاه داده، در اسکیمای “پایگاه داده رابطه ای” تصور کنید.
    سندهای موجود در یک فهرست(ایندکس) معمولاً مرتبط هستند.
    مثلا در وب سایت تجارت الکترونیک ، می توانید یک فهرست برای مشتریان ، یکی برای محصولات و یکی برای سفارشات و موارد دیگر داشته باشید.
    یک ایندکس با نامی که در زمان فهرست سازی، جستجو، آپدیت،و فرایند حذف در برابر اسناد موجود در آن به آن اشاره می شود، شناخته می شود.
  • ایندکس معکوس: ایندکس در الاستیک سرچ، ایندکس معکوس نامیده می شود و درواقع مکانیزمی است که همه موتورهای جستجو با آن کار می کنند.
    این بعنوان یک ساختمان داده، نگاشتی از یک محتوا ، مانند کلمات یا اعداد ، را در مکانهای آن در یک سند یا مجموعه ای از اسناد، ذخیره می کند. در کل این یک ساختمان داده، شبیه “hashmap “است که میتواند شما را از یک کلمه به یک سند منتقل کند.
    ایندکس معکوس، رشته ها را بصورت مستقیم ذخیره نمی کند بجای آن هر سند را به عبارت های جستجوی جداگانه، تقسیم می کند. ( بعبارتی هر کلمه) و سپس این عبارات جستجو را به اسنادی که در آن وجود دارند، تطابق می دهد.
    به تصویر زیر توجه کنید ، عبارت “بهترین” در سند 2 قرار دارد ، بنابراین در آن سند ترسیم شده و تطابق یافته.
    ایندکس معکوس، درباره یافتن عبارات جستجو در یک سند مشخص، خیلی سریع جستجو را انجام داده و مکان آن را شناسایی می کند.
    الاستیک سرچ  با استفاده از ایندکس های معکوس توزیع شده،  بهترین جستجوهای مناسب را برای جستجوهای full text، حتی از مجموعه ای بزرگ از داده ها، خیلی سریع پیدا می کند.

اجزای بک اند   :

  • کلاستر (گروه) : یک؛کلاستر الاستیک سرچ، مجموعه ای از یک یا چند “نود” است که به هم متصل شده اند. قدرت یک “کلاستر الاستیک سرچ” در توزیع وظایف ، جستجو و ایندکس کردن، در تمام نود های موجود در کلاستر، قرار دارد.
  • نود (گره) : نود، یک سرور واحد و قسمتی از یک کلاستر است. یک نود، دیتاها را ذخیره کرده و در ایندکس کردن و قابلیت های جستجو شرکت می کند.
    یک نود (گره) الاستیک سرچ، در اشکال مختلفی پیکربندی می شود:Master Node: “مستر نود”
    مستر نود، کلاستر الاستیک سرچ، را کنترل می کند و مسئول تمامی عملیات کلاستر، مانند ساخت یا حذف یک ایندکس و افزودن یا حذف” نود”ها می باشد. Data Node: “دیتا نود”
    دیتا نود، وظیفه ذخیره کردن دیتاها را به عهده دارد و فرایندهای مربوط به داده مانند جستجو و تراکم را اداره می کند.
    Client Node  :
    درخواست های کلاستر را به” مستر نود” و درخواست هایی که به داده ها مرتبط هستند  را به ” دیتا نود ”  ارسال می کند.
  • shards:
    الاستیک سرچ، باعث می شود که ایندکس را به چندین قسمت به نام “shards” تقسیم شود که هر تکه(shard)، خودش یک ” ایندکس” کاربردی و مستقل محسوب می شود، که می تواند بر روی هر نود (گره) ادر یک کلاستر قرار بگیرد
    “الاستیک سرچ” با توزیع اسناد در یک “ایندکس” در چندین shard و توزیع این shard ها(تکه ها) در چندین نود (گره) ، باعث تضمین افزونگی شود ، که این افزونگی، هم از سخت افزار در مقابل آسیب و خرابی های احتمالی محافظت می کند و با اضافه شدن ” نود “ها در یک کلاستر ، ظرفیت  کوئری را افزایش می دهد.

Replica: ( نسخه کپی و جایگزین)

با استفاده از ” الاستیک سرچ ” می توانید یک یا چند کپی از (index shard) خود بسازید که(Replica shard)  یا فقط ” Replica ” نامیده می شوند. در واقع ، “Replica shared” یک کپی از یک “shard” اولیه است.

هر سند موجود در یک ایندکس، مربوط به یک shard (تکه) اصلی است. “Replica” ها برای محافظت از دیتا در برابر آسیب سخت افزار و افزایش ظرفیت  درخواست هایی مثل جستجو یا بازیابی سند ، یک نسخه کپی اضافه تهیه می کنند.

Elastic stack  :

(ELK)

الاستیک سرچ، عنصر مرکزی “Elastic stack” ، مجموعه ای از  ابزار منبع باز(open source) برای “data ingestion”  ، غنی سازی ، ذخیره  ، آنالیز و بصری سازی است.

معمولاً به عنوان  ” ELK stack ”  شناخته میشود؛ بدلیل اجزای  Elasticsearch  ، Logstash  و Kibana  و اکنون  شامل Beats، هم میباشد.

و با وجود داشتن یک موتور جستجو در  مرکز خود ، کاربران برای دیتای ورود از الاستیک سرچ، استفاده کردند و همچنین راهی می خواستند که بتوانند، آنها را دریافت (ingest) کرده و تجسم کنند.

Kibana:

کیبانا، یک ابزار بصری ساز دیتا و مدیریت برای الاستیک سرچ است که هیستوگرام های “زمان حقیقی” ، نمودارهای خطی ، نمودارهای دایره ای (pie) و نقشه ها را فراهم می کند.

با استفاده از کیبانا،. می توانید داده های الاستیک سرچ خود را بصری سازی کرده و الاستیک استوک (Elastic Stack) را پیش ببرید.

شما می توانید برای انتخاب شیوه شکل دهی به دیتا را با یک سوال شروع کنید، تا متوجه شوید که بصری سازی تعاملی شما را به کجا می رساند.

مثلا، چون کیبانا معمولا در آنالیز گزارش ها کاربرد دارد ، با کمک آن میتوانید به سوالاتی  درمورد  اینکه ” بازدیدهای صفحات سایت از کجا می آید ” ، توزیع URL ها و…  پاسخ دهید.

اگر اپلیکیشن شخصی خود را بر بالاترین نقطه الاستیک سرچ ایجاد نمی کنید ، “کیبانا” یک روش بسیار خوب است که میتوانید با یک UI قوی و منعطف، ایندکس خود را جستجو کرده و بصری سازی کنید.

با این وجود، مشکل اینجاست که هر بصری سازی، فقط در برابر یک الگوی ایندکس یا ایندکس کار کند.  پس اگر ایندکس هایی دارید که داده های متفاوتی دارند، برای هریک از آنها بصری سازی جداگانه ای بسازید.  برای موارد پیشرفته تر ، “Knowi” گزینه خوبی است. با کمک (Knowi) می توانید داده های الاستیک سرچ خود را در چندین ایندکس وارد کرده و آنها را با منابع داده SQL/NoSQL/REST-API ترکیب کنید ، سپس بصری سازی هایی از آن را در یک UI  کاربر پسند، بسازید.

Logstash:

با استفاده از ابزار ” Logstash” داده ها را جمع آوری و پردازش داده کرده و آنها را به “الاستیک سرچ” ارسال می کنند. این یک پایپ لاین (خط لوله) برای پردازش داده منبع باز و سرور ساید (سمت سرور) است که داده ها را از چند منبع، دریافت(ingest) می کند، تغییر میدهد و برای جمع آوری می فرستد.  وقتی فیلدهای نامگذاری شده، برای ایجاد یک ساختار و تبدیل آنها به یک پیوست در فرمت معمول ،شناسایی شود، داده را بدون در نظر گرفتن فرمت، تغییر داده و آماده می کند.

چون داده ها  در سیستم های مختلف،بصورت فرمت (قالب) های متفاوتی قرار دارند ، “Logstash” به شما کمک می کند تا سیستم های مختلفی مثل وب سرور ها، دیتابیس ها، خدمات آمازون و…. را در کنار هم گردآوری کرده و داده ها را در جایی که نیاز است به صورت مداوم جریان داشته باشد ، منتشر کنید.

Beats:

بیتس (Beats) مجموعه ای از عوامل یک منظوره و سبک است که برای انتقال داده کاربرد دارد و توسط آن داده را از صدها یا هزاران دستگاه و سیستم به “Logstash “یا “الاستیک سرچ ” ارسال می کنند.

بیتس(Beats) ابزار بسیار خوبی برای جمع آوری داده ها است، چون می تواند روی سرورهای شما ، با کانتینر ها قرار بگیرد یا اینکه داده ها را در “الاستیک سرچ” متمرکز کند.  مثلا  “Filebeat” می تواند روی سرور شما قرار گرفته ، فایل های ورود را در زمان واردشدن،مانیتور کند ، و آنها را تجزیه کرده و در ” زمان حقیقی” در “الاستیک سرچ” وارد کند.

“الاستیک سرچ” در کجا استفاده می شود:

اکنون از “الاستیک سرچ” ، کانسپت های استدلالی و منطقی که در پشت آن قرار دارد و معماری به یک درک کلی رسیده ایم ، علت و چگونگی استفاده از آن برای موارد متنوع را بهتر می فهمیم.

در قسمت زیر ، بعضی از موارد پایه در استفاده از الاستیک سرچ، آزمایش شده و نمونه هایی از نحوه استفاده شرکت ها از الاستیک سرچ قرار داده شده است.

موارد استفاده پایه و مقدماتی:

+  جستجوی اپلیکیشن  :

برای اپلیکیشن هایی که برای دسترسی ،بازیابی و گزارش دیتا به پلتفرم جستجو متکی هستند.

+ جستجوی وب سایت:

برای وب سایت هایی که محتوای زیادی را ذخیره میکنند، برای جستجوی دقیق و مؤثر، الاستیک سرچ  ابزار بسیار خوبی است.

تعجبی ندارد که “الاستیک سرچ” در زمینه جستجوی سایت در مدام در حال پیشرفت است.

+ جستجوی اینترپرایز ( شرکت ها):

با “الاستیک سرچ”  طیف وسیعی از جستجوی ها را میتوان انجام داد؛ شامل جستجوی اسناد ، جستجوی محصولات تجارت الکترونیک ، جستجوی وبلاگ ، جستجوی اشخاص و هر نوع جستجویی است که بخواهید انجام دهید.

در واقع،  به صورت مستمر و پیوسته در راه حل های جستجوی بیشتر وب سایت هایی که روزانه از آنها استفاده شود، راه پیدا کرده و جایگزین آنها شده است.

از نظر بیشتر شرکت ها ، “الاستیک سرچ” برای موفقیت عالی در شبکه های داخلی شرکت استفاده می شود.

+ ورود به سیستم و آنالیز ورود (log) :

همانطور که گفته شد، “الاستیک سرچ” برای دریافت (intranet) و آنالیز دیتا ی ورود  در زمان حقیقی (realtime) و به روش مقیاس پذیر استفاده می شود. همچنین یک دید کاربردی مهم برای معیارهای ورود به سیستم برای فعالیت، فراهم می کند.

+ معیارهای مؤثر بر زیرساخت (مجموعه ای از سیستم هاست) و مانیتورینگ کانتینرها :

بسیاری از سازمان ها برای آنالیز معیار های مختلف خود از “استک ELK” استفاده می کنند.این کار شامل جمع آوری داده ها در تعدادی پارامتر عملکردی باشد که در موارد متفاوتی استفاده می شود.

+ تحلیل و آنالیز امنیت :

یکی دیگر از برنامه های عمده در “الاستیک سرچ”، برنامه تحلیلگر امنیت (Security Analyst) است.

لاگ های دستیابی  و لاگهای مشابه که مربوط به امنیت سیستم هستند، با   ” ELK stack”  تجزیه و تحلیل می شود و تصویر کاملی از چیزی که در سیستم های شما در زمان حقیقی(realtime) در جریان است، فراهم می کند.

+ آنالیز و تحلیل بیزینس:

بسیاری از ویژگی های داخلی” ELK Stack” آن را تبدیل به یک ابزار خوب تحلیلگر بیزینس کرده است.

گرچه برای اجرای این محصول و در بیشتر سازمانها، یک منحنی یادگیری تیز وجود دارد.

این موضوع، بخصوص در مواقعی که شرکت ها علاوه بر “الاستیک سرچ”  منابع داده دیگری هم دارند، صدق می کند ، چون کیبانا فقط با دیتا ی “الاستیک سرچ” کار می کند.

پلتفرم “Knowi” ، جایگزین خوب محسوب می شود ، knowi یک پلتفرم تحلیل گر است که بطور طبیعی با “الاستیک سرچ” ترکیب شده و حتی به  کاربران بیزینس های غیر فنی اجازه می دهد تا بدون داشتن دانش قبلی در “ELK Stack”،  بصری سازی و تحلیل داده های”الاستیک سرچ” را انجام دهند.

[ موارد استفاده شرکت ها:

+  Netflix :

پلتفرم نتفلیکس، برای مانیتورینگ و تحلیل خدمات مشتری و لاگ های امنیتی، در موارد متفاوت استفاده، به “ELK Stack”  متکی است.

مثلا، “الاستیک سرچ” موتور اساسی در پشت سیستم پیام رسانی آنها است.

همچنین این شرکت، الاستیک سرچ  را به دلیل: (sharding) و تکثیر خودکار ، اسکیما ی منعطف ، مدل خوب توسعه و اکوسیستمی که پلاگین های زیادی دارد، انتخاب کرده است.

پلتفرم “نتفلیکس” بصورت پیوسته، استفاده از “الاستیک سرچ” را از چند موضع مجزا و تکی به بیش از ده ها کلاستر متشکل از صدها Node (گره) ،افزایش داده است.

+ Ebay:

با وجود موارد بسیار زیاد جستجوی متن و تحلیل های مهم تجاری که از الاستیک سرچ به عنوان بک بن (Back bone) استفاده می کنند ، شرکت “ebay”  یک پلتفرم سفارشی

“Elasticsearch-as-a- Service”

ساخته، تا “کلاستر الاستیک سرچ” به سادگی در پلتفرم ابری داخلی آنها که مبتنی بر “OpenStack” است، تهیه شود.

+Walmart:

شرکت والمارت از Elastic Stack برای آشکارسازی ظرفیت های پنهان دیتاهای خود برای فهمیدن الگوی خرید مشتریان ، پیگیری معیارهای فعالیت فروشگاه و تحلیل تعطیلات، در زمان حقیقی (real time) استفاده می کند.

این ابرشرکت، همچنین از ویژگی های امنیتی “ELK” برای ایمنی با SSO ، هشدار تشخیص ناامنی و مانیتورینگ (نظارت)  DevOps استفاده می کند.

خلاصه :

در این پست سعی کردیم که به سوالاتی مانند الاستیک سرچ چیست؟، چگونه کار میکند و چه استفاده ای دارد، پاسخ دهیم و ما هنوز همه چیز را در مورد آن نمی دانیم.

ولی طبق توضیحاتی که گفته شده می توانیم به طور خلاصه بگوییم که “الاستیک سرچ” یک موتور جستجو است که ساختار اصلی و اجزای آن باعث شده که سریع و مقیاس پذیر شود و در مرکز یک اکوسیستم ابزارهای تکمیل کننده قرار بگیرد که می توانند باهم برای مواردی مثل : جستجو ، تحلیل ، و پردازش داده و ذخیره سازی استفاده شوند.

اگر میخواهید درمورد “الاستیک سرچ ”  ، مطالب بیشتری بدانید و آن را امتحان کنید، می توانید از اینجا شروع کنید.

برای موارد استفاده ی پیشرفته تر، که می خواهید داده های “الاستیک سرچ” خود را در چند ایندکس و سایر منابع داده SQL/NoSQL/REST-API، ترکیب کنید، Knowi را چک کنید.

پلتفرم “Knowi”، یک پلت فرم تحلیل گر است که بصورت طبیعی با “الاستیک سرچ” ترکیب شده و برای هر دو بخش فنی و غیرفنی قابل دسترسی است.

دیدگاهتان را بنویسید