علاوه بر خواندن این راهنما ، توصیه می کنیم بررسی سلامت Elasticsearch را انجام دهید. این مسائل را با تجزیه و تحلیل اندازه های Shard ، Threadpools ، حافظه ، عکس های فوری ، علامت های دیسک و موارد دیگر ، عملکرد Elasticsearch شما را بهبود می بخشد. بررسی Elasticsearch رایگان است و نیازی به نصب ندارد.
برای ارزیابی استفاده خود از تجمع در Elasticsearch ، توصیه می کنیم Autoops را برای Elasticsearch امتحان کنید. Autoops همچنین به شما در بهینه سازی سایر تنظیمات و فرآیندهای مهم در Elasticsearch برای بهبود عملکرد و اطمینان از در دسترس بودن زیاد برای داده های مهم خود کمک می کند. آن را به صورت رایگان امتحان کنید.
بهبود عملکرد جمع در Elasticsearch
حتی اگر Elasticsearch بیشتر به دلیل قابلیت جستجوی متن کامل آن شناخته شده باشد ، بسیاری از موارد استفاده نیز از ویژگی های بسیار قدرتمند دیگری استفاده می کنند که Elasticsearch از جعبه خارج می شود: چارچوب مصالح.
جمع آوری در همه جای Kibana استفاده می شود. هر داشبورد با تجسم که خلاصه ای از داده های جمع آوری شده از عوامل Beats است از مصالح استفاده می کند. APM Elastic ، که جایگزین Elastic برای ابزار دقیق و نظارت بر عملکرد برنامه ها است ، دارای برنامه ای در Kibana است که به شدت از جمع آوری برای ارائه داده ها به کاربر نیز استفاده می کند. همین مورد با برنامه یادگیری ماشین و SIEM.
حتی اگر مورد استفاده از جستجوی شما ممکن است یک بخش "AGGS" را مستقیماً در بدنه درخواست قرار ندهد ، ممکن است شما هنوز هم در Kibana یا هر ابزار تجسم دیگری از تجمع ها استفاده کنید.
اگر در مورد استفاده خود از تجمع استفاده می کنید (یا اگر قصد دارید) ، برخی از احتیاط ها باید به آنها توجه کنید تا از تصمیمات و تنظیمات مضر طراحی جلوگیری کنید ، می توانید اطمینان حاصل کنید که تجمع های شما تا حد ممکن کارآمد است.
نحوه بهبود عملکرد جمع آوری Elasticsearch:
1. با فیلتر کردن اسناد به بیرون ، دامنه را محدود کنید
اول چیزها اول: هرچه اسناد بیشتری بتوانید فیلتر کنید ، بهتر و این همان چیزی است که می توانید با یک بند پرس و جو به دست آورید. به عنوان یک سیستم توزیع شده ، برای محاسبه مقادیر جمع شده مورد درخواست ، هرچه Data Elasticsearch بیشتر به آن دسترسی پیدا کند ، تلاش بیشتر ارکستر و شبکه بیشتر نیاز خواهد بود و به عملکرد نهایی و زمان پردازش اضافه می شود.
اگرچه برخی از مقادیر تجمیع شده یک مقدار دقیق نیستند، بلکه یک مقدار تقریبی هستند، هنوز ارزش دارد که حجم دادههایی را که Elasticsearch باید در نظر بگیرد، کاهش دهیم. بنابراین، اگر مورد استفاده شما به شما اجازه می دهد که به سادگی بر اساس یک جستجوی محدوده فیلتر کنید، با توجه به اینکه رابط کاربری شما حتی گزینه های فیلتر کاربر را که نشان دهنده سطل های قدیمی تر از سه ماه گذشته هستند، نمی دهد، از آن استفاده کنید و دامنه را کاهش دهید. درخواست شما به منظور بهبود پردازش انبوه.
2. با تنظیمات مختلف اشتراک گذاری آزمایش کنید
Sharding یکی از مؤلفههای کلیدی معماری Elasticsearch است که پردازش توزیع شده و ویژگیهای دسترسی بالا را ممکن میسازد. وقتی صحبت از تجمیع ها می شود، داشتن تعداد صحیح خرده ها می تواند عملکرد را در مرحله جستجوی پرس و جو به شدت بهبود بخشد. این راهنما را برای نکاتی در مورد چگونگی یافتن تعداد صحیح خردهها در هر شاخص ببینید.
تلاش برای یافتن تعداد مناسب برای یک شاخص در واقع کار آسانی نیست. حتی الاستیک این را یک سوال «میلیون دلاری» میداند که پاسخ آن اغلب «بستگی دارد». از آنجایی که هیچ پاسخ صحیحی برای همه موارد استفاده وجود ندارد، ارزش آزمایش را دارد.
با توجه به اینکه با توجه به طراحی شاخص Elasticsearch، تغییر تنظیمات شاخص index. number_of_shards بدون نیاز به فهرست مجدد آن ممکن نیست. برای تغییر تعداد خرده ها باید فهرست خود را مجدداً نمایه کنید، اما باید بتوانید این کار را همانطور که می خواهید انجام دهید، یا برای انطباق با سناریوهای جدید یا فقط برای آزمایش، و باید بتوانید این کار را بدون هیچ گونه خرابی انجام دهید.
یکی از راه های رسیدن به آن استفاده از الگوی مستعار است. با این الگو، شما اساساً شاخص های واقعی را در پشت نام مستعار پنهان می کنید، که به ما اجازه می دهد:
- در حالی که نسخه فهرست فعلی خود را در دسترس نگه میدارید، فرآیندهای نمایه مجدد طولانی مدت را فعال کنید.
- نسخههای مختلف شاخصهای خود را در دسترس دارید، بنابراین میتوانید به راحتی از یکی به دیگری تغییر دهید، چه برای مقاصد آزمایشی/آزمایشی، چه به دلیل مشکلی که در زمان تولید نسخه جدید شناسایی شده است.
- تست A/B را انجام دهید.
وقتی نوبت به آزمایش شاردینگ میرسد، الگوی مستعار به ما اجازه میدهد تا یک نمایه مجدد کامل به نمایه دیگری با تنظیمات index. number_of_shards متفاوت راهاندازی کنیم، منتظر بمانیم تا این فهرست مجدد تکمیل شود، سپس نام مستعار را تغییر دهیم، نسخه جدید را برای مدتی آزمایش کنیم و در نهایتبا خیال راحت نسخه قدیمی ایندکس را حذف کنید.
راه دیگر برای تغییر تعداد قسمتهای شاخص شما استفاده از API کوچک یا تقسیم است. شما از اولین استفاده می کنید تا تعداد قسمتهای اصلی یک شاخص و بعداً برای افزایش آن کاهش یابد. این API ها فرآیند ایجاد یک شاخص جدید را تغییر می دهند ، تنظیمات آن را تغییر می دهند و اسناد را به آن منتقل می کنند. آنها سعی می کنند از طریق فرایندی که شامل اتصال سخت بخش ها از شاخص منبع به شاخص هدف ، در صورت امکان است ، به این نتیجه برسند. حتی اگر این API ها احتمالاً سریعتر از یک reindex باشند ، آنها برخی از الزامات را تحمیل می کنند ، مانند:
- شاخص باید فقط خواندنی باشد
- قسمتهای اولیه باید به همان گره ساکن شوند (یا منتقل شوند)
- شاخص باید وضعیت سبز داشته باشد
- توصیه می شود تمام قسمتهای ماکت را حذف کنید (پس از اتمام عملیات می توانید آنها را برگردانید)
- تعداد جدید قسمتها باید عاملی از تعداد تعیین شده فعلی باشد
یکی دیگر از مشکلات رایج در هنگام تعیین تعداد قسمتهای ، قرار دادن آن به مبلغی است که در واقع باعث می شود خوشه از مرز عبور کند که در آن Sharding مزایایی را با پردازش موازی توزیع شده به ارمغان می آورد و شروع به ایجاد تنگناهای سربار می کند: بیش از حد.
این یکی از دلایلی است که شما باید بتوانید با تعداد قسمتهایی که به یک فهرست تنظیم شده اید ، آزادانه آزمایش کنید و همچنین در هر زمان که خوشه شما روی گره ها رشد کند ، برای تجدید نظر در تعداد تکه ها آماده باشید.
3. زمینه های مربوط به سایت بالا و ترتیب های جهانی را ارزیابی کنید
در بیشتر موارد ، یک اصطلاح تجمع مشکلات عملکردی را ارائه نمی دهد. معمولاً وقتی یک ترکیب اصطلاحات را در زمینه ای اعمال می کنید که تعداد سطل های تولید شده به طور کلی کم باشد ، خوشه مشکلی برای محاسبه تجمع معیارهای شما برای هر سطل نخواهد داشت. این مورد اگر به عنوان مثال ، جمع بر اساس کشور ، دسته بندی محصولات ، جنسیت و غیره است.
اما هر زمان که شما نیاز به انجام یک ترکیب اصطلاحات در زمینه ای داشته باشید که مقادیر احتمالی منحصر به فرد زیادی برای آن وجود دارد ، این یک چالش را برای خوشه ای که به عنوان موضوع جمع آوری شرایط در سطح بالا شناخته می شود ، ایجاد می کند. شما می توانید به یک مورد استفاده مربوط به تجارت الکترونیکی فکر کنید ، جایی که خوشه باید با استفاده از نامه های الکترونیکی کاربر (احتمالاً میلیون ها نفر ، اگر ما در مورد تجارت الکترونیکی واقعاً موفق صحبت می کنیم) جمع آوری جمع آوری را با استفاده از نامه های الکترونیکی کاربر (احتمالاً میلیون ها نفر) انجام دهند. به عنوان نمونه ای از یک زمینه دیگر ، یک راه حل امنیتی اطلاعات را تصور کنید که در آن باید سطل و گزارش یک متریک برای هر آدرس IP منبع کنید.
تجمع اصطلاحات به ساختار داده داخلی معروف به نظم های جهانی متکی است. این ساختارها آماری را برای هر مقدار منحصر به فرد یک قسمت خاص حفظ می کنند. این آمار محاسبه و در سطح Shard نگهداری می شود و در مرحله کاهش بیشتر ترکیب می شود تا نتیجه نهایی حاصل شود.
عملکرد تجمع اصطلاحات در یک قسمت معین می تواند به عنوان تعداد مقادیر منحصر به فرد برای آن قسمت افزایش یابد ، بلکه به این دلیل است که به طور پیش فرض این آمار با تنبلی محاسبه می شود ، به این معنی که اولین تجمع پس از آخرین تازه کردن باید آنها را محاسبه کند. اگر سناریویی دارید که در آن میزان نمایه سازی سنگین اسناد وجود دارد که حاوی زمینه هایی با کاردینال بالایی است و مرتباً اصطلاحات مربوط به آن زمینه ها را اجرا می کنید ، ممکن است خوشه شما با این مسئله دست و پنجه نرم کند ، زیرا دستورالعمل های جهانی اغلب محاسبه می شوند.
برای کسب اطلاعات بیشتر در مورد احکام جهانی و چگونگی ارزیابی تأثیر بر عملکرد جمع آوری خود ، این راهنما را بخوانید.
4- فاصله تازه را افزایش دهید
هر بار که یک سندی ایجاد شود ، به روز شود یا حتی حذف شود ، این عمل برای اولین بار بر روی یک ساختار موقتی که به عنوان یک بافر نمایه سازی شناخته می شود اجرا می شود. Elasticsearch محتوای این ساختارهای موقت را به سایر ساختارهای داده بر روی دیسک معروف به بخش ها یا هر بار که بخش کامل باشد یا وقتی به حد یک بازه تازه سازی تعریف شده رسیده است ، می اندازد. به طور پیش فرض این فاصله تازه به هر 1 ثانیه تنظیم می شود.
مشکل ادغام بخش ها در بخش های بزرگتر هر چند وقت یکبار این است که این هزینه سربار را اضافه می کند ، که اگر واقعاً به داده های اخیراً مصرف شده خود نیاز دارید ، نمی توانید از آن جلوگیری کنید تا در اسرع وقت برای جستجو در دسترس باشد. از طرف دیگر ، اگر بتوانید فاصله تازه سازی شاخص را افزایش دهید ، این می تواند نه تنها سود عملکرد برای مصرف داده ها را نشان دهد ، بلکه می تواند برخی از منابع خوشه را که برای اجرای نمایش داده شد ، آزاد کند.
به غیر از این ، تازه های کمتر مکرر به معنای محاسبه کمتر نظم های جهانی است ، که همچنین می تواند به بهبود عملکرد کلی اجرای تجمع کمک کند.
فاصله تازه سازی با تغییر تنظیمات refresh_interval مانند این ، روی یک شاخص تنظیم می شود:
5. پارامتر اندازه را روی 0 تنظیم کنید
الاستیک توصیه می کند که هر زمان که نیازی به بازدید از جستجو ندارید ، پارامتر اندازه را روی 0 تنظیم می کنید. این به شما کمک می کند تا از پر کردن حافظه نهان درخواست Shard جلوگیری کنید ، که می تواند عملکرد تجمع را بهبود بخشد.
6. از ذخیره گره/Shard استفاده کنید
به طور پیش فرض ، هر درخواست به خوشه به هر یک از گره ها و بند های موجود و واجد شرایط اختصاص می یابد. API _Search می تواند یک پارامتر اولویت را دریافت کند ، که می تواند بر نحوه انتخاب خوشه گره/سپرهایی را که مسئولیت تحقق درخواست را بر عهده دارند ، تأثیر بگذارد. شما می توانید از این پارامتر برای استفاده از حافظه نهان گره/Shard استفاده کنید ، زیرا خوشه درخواست ها را با همان رشته اولویت ارائه شده به همان قسمت ها به همان ترتیب مسیریابی می کند ، تا زمانی که حالت خوشه و قسمتهای انتخاب شده تغییر نکنند.
شما می توانید هر رشته ای را که با کاراکتر شروع نمی شود ، به عنوان رشته اولویت خود تعریف کنید. اگر وضعیت خوشه ای و قسمتهای انتخاب شده تغییر نکنند ، جستجوها با استفاده از همان مقدار رشته به همان ترتیب به همان قسمت ها منتقل می شوند. با استفاده از مقداری که نشانگر جلسه کاربر است ، توصیه می شود ، زیرا یک کاربر معمول است که چندین نمایش داده شده را به صورت پشت سر هم شروع کند و فقط نتایج را تنگ می کند. این امر مانع از توزیع درخواست جستجو در یک گره دیگر و عدم استفاده از حافظه پنهان سطح گره می شود.
یک مقدار ویژه که می توانید برای پارامتر اولویت تنظیم کنید _local است. با این کار گره ای که در حال حاضر درخواست را حل می کند ، فقط در صورت وجود از قسمتهای موجود در محلی استفاده می شود تا از سربار شبکه جلوگیری شود. اگر برای حل درخواست ، به داده هایی از قسمت هایی که فقط در یک گره دیگر در دسترس هستند ، نیاز دارد ، از آن استفاده می کند که از انتخاب ماکت سازگار به عنوان یک بازپرداخت استفاده می کند.
همچنین می توانید از پارامتر اولویت برای زور استفاده کنید یا ترجیح می دهید که درخواست به گره های خاص هدایت شود ، که می تواند مفید باشد اگر به عنوان مثال ، می خواهید به کاربران ویژه درمان ویژه ای بدهید ، بنابراین درخواست های آنها را با سریعترین سخت افزار به گره ها منتقل می کنید. در اینجا برخی از مقادیر خاص دیگر که پارامتر ترجیح می تواند دریافت کند:
7. فقط آنچه را که شما نیاز دارید جمع کنید
به نظر می رسد واضح است ، اما یادآوری به شما ضرری ندارد: تجمع می تواند در مورد منابع خوشه ای شما بسیار خواستار باشد و به همین دلیل باید به خوبی آگاه باشید که چه تجمع هایی را درخواست می کنید و اگر واقعاً به آنها احتیاج دارید. در موارد بحرانی ، اگر درخواست شما توسط بخش های پرس و جو و جمع آوری تشکیل شود ، یک جمع ناکام می تواند باعث شود کل درخواست شما از بین برود.
بنابراین ، اطمینان حاصل کنید که واقعاً به تمام AGG هایی که از خوشه درخواست می کنید برای حل کردن شما نیاز دارید. همچنین ، درخواست تجمع آمار در این زمینه ، اما فقط با استفاده از میانگین؟آن را به جمع AVG تغییر دهید. باز هم ، از آنچه نیاز دارید آگاه باشید و فقط از این خوشه بخواهید.
مشکلات Elasticsearch را پیدا و رفع کنید
Opster Autoops بر اساس تجزیه و تحلیل صدها معیار ، مسائل مربوط به Elasticsearch را تشخیص داده و رفع می کند.