Еластично търсене

Elasticsearch Най-добри практики и повишаване на ефективността

Elasticsearch Най-добри практики и повишаване на ефективността
В тази публикация ще се опитаме да съберем най-добрите практики и също така какви неща да избягваме при работа с Elasticsearch и подаване на данни в него. По този начин ще знаем за какви неща трябва да се грижим, преди дори да започнем да работим с тази отлична търсачка.

Най-добри практики за Elasticsearch

Ще започнем да работим с най-добрите практики, които да следваме с Elasticsearch и какви проблеми може да създаде, когато избягваме тези точки. Да започваме.

Винаги дефинирайте ES Mappings

Едно нещо, което ES със сигурност може да направи, е да работи без картографиране. Така че, когато започнете да подавате JSON данни към вашия ES индекс, той ще се итерира над полетата с данни и ще създаде подходящо картографиране. Това изглежда директно и лесно, тъй като ES избира самия тип данни. Въз основа на вашите данни може да се наложи поле, за да бъде от определен тип данни.

Например, да предположим, че индексирате следния документ:


"id": 1,
"title": "Инсталирайте ElasticSearch на Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"date": "25.03.2018"

По този начин Elasticsearch ще маркира полето „дата“ като тип „дата“. Но когато индексирате следния документ:


"id": 1,
"title": "Най-добри практики и изпълнение на ES",
"date": "Изчаква"

Този път видът на полето за дата е променен и ES ще изведе грешка и няма да позволи на вашия документ да бъде индексиран. За да улесните нещата, можете да индексирате няколко документа, да видите кои полета са индексирани от ES и да вземете картографирането от този URL:

ВЗЕМЕТЕ / име на индекс / тип_док / _мапиране

По този начин няма да се налага да изграждате и пълното картографиране.

Производствени знамена

Извиква се името на клъстера по подразбиране, което ES стартира еластично търсене. Когато имате много възли във вашия клъстер, е добра идея да запазите флагчетата за именуване възможно най-последователни, като:

клъстер.име: app_es_production
възел.име: app_es_node_001

Освен това, настройките за възстановяване на възли също имат голямо значение. Да предположим, че някои от възлите в клъстера се рестартират поради неуспех, а някои възли се рестартират малко след други възли. За да поддържаме данните последователни между всички тези възли, ще трябва да стартираме програма за последователност, която ще поддържа всички клъстери в постоянно състояние.

шлюз.Възстановяване_на_възли: 10

Също така е полезно, когато предварително кажете на клъстера колко възли ще присъстват в клъстера и колко време за възстановяване ще им е необходимо:

шлюз.очаквани_възли: 20
шлюз.възстановяване_ след_ време: 7м

С правилната конфигурация възстановяването, което би отнело часове, може да отнеме само минута и може да спести много пари на всяка компания.

Осигуряване на капацитет

Важно е да знаете колко място ще заемат данните ви и скоростта, с която те се вливат в Elasticsearch, защото това ще реши количеството RAM, което ще ви е необходимо на всеки от възела на клъстера и главния възел, както добре.

Разбира се, няма конкретни насоки за постигане на необходимите цифри, но можем да предприемем някои стъпки, които ни осигуряват добра идея. Една от стъпките ще бъде симулират случаят на употреба. Направете ES клъстер и го подайте с почти същата скорост на данните, както бихте очаквали при вашата производствена настройка. Концепцията за започнете големи и намалете също може да ви помогне да бъдете последователни относно това колко място е необходимо.

Големи шаблони

Когато дефинирате индексирани големи шаблони, винаги ще се сблъсквате с проблеми, свързани със синхронизирането на шаблона между различните ви възли на клъстера. Винаги имайте предвид, че шаблонът ще трябва да бъде предефиниран винаги, когато настъпи промяна на модел на данни. Много по-добра идея е да поддържайте шаблоните като динамични. Динамичните шаблони автоматично актуализират съпоставянията на полета въз основа на съпоставянията, които дефинирахме по-рано, и новите полета. Имайте предвид, че няма заместител за запазване на шаблоните възможно най-малки.

2 Използване на mlockall на сървъри на Ubuntu

Linux използва процеса на размяна, когато се нуждае от памет за нови страници. Размяната прави нещата бавни, тъй като дисковете са по-бавни от паметта. The mlockall свойството в конфигурацията на ES казва на ES да не сменя страниците си от паметта, дори и да не са необходими за сега. Това свойство може да бъде зададено в YAML файла:

bootstrap.mlockall: вярно

В ES v5.x + версии, това свойство е променено на:

bootstrap.lock_lock: вярно

Ако използвате това свойство, просто се уверете, че предоставяте на ES достатъчно голяма куп-памет с помощта на -DXmx опция или ES_HEAP_SIZE.

Минимизиране на актуализациите за картографиране

Ефективността на клъстера е леко засегната, когато правите заявки за актуализация на картографиране на вашия клъстер ES. Ако не можете да контролирате това и все пак искате да правите актуализации на съпоставянията, можете да използвате свойство в конфигурационния файл на ES YAML:

индекси.клъстер.send_refresh_mapping: невярно

Когато заявката за актуализация на модела е в чакаща опашка за главния възел и изпраща данни със старото съпоставяне към възлите, тя също трябва да изпрати заявка за актуализация по-късно до всички възли. Това може да забави нещата. Когато зададем горното свойство на false, това има основен смисъл, че е направена актуализация на картографирането и няма да изпрати заявката за актуализация до възлите. Имайте предвид, че това е полезно само ако правите редовно много промени в своите картографирания.

Оптимизиран Thread-pool

ES възлите имат много пулове от нишки, за да подобрят начина на управление на нишките в даден възел. Но има ограничения за това колко данни може да се погрижи всяка нишка. За да следим тази стойност, можем да използваме свойство ES:

нишка.насипно състояние.queue_size: 2000

Това информира ES броя на заявките в парче, които могат да бъдат поставени на опашка за изпълнение във възела, когато няма налична нишка за обработка на заявката. Ако броят на задачите надхвърли тази стойност, ще получите a RemoteTransportException. Колкото по-висока е тази стойност, толкова по-голямо количество пространство за купчина ще е необходимо на вашата машина на възел и JVM купчината също ще бъде консумирана. Също така, трябва да поддържате кода си готов, в случай че се изключи това изключение.

Заключение

В този урок разгледахме как можем да подобрим ефективността на Elasticsearch, като избягваме често срещани и не толкова често срещани грешки, които хората правят. Прочетете повече статии на Elasticsearch за LinuxHint.

Топ Oculus App Lab Games
Ако сте собственик на слушалки на Oculus, тогава трябва да знаете за странично зареждане. Sideloading е процесът на инсталиране на несъхранявано съдър...
Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...
5 най-добри аркадни игри за Linux
В днешно време компютрите са сериозни машини, използвани за игри. Ако не можете да получите новия висок резултат, ще разберете какво имам предвид. В т...