allegro.tech data science meetup #2: elasticsearch w praktyce

61
Elasticsearch w ekosystemie Allegro Andrzej Wisłowski, Paweł Bobruk

Upload: allegrotech

Post on 08-Jan-2017

793 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Elasticsearch w ekosystemie AllegroAndrzej Wisłowski, Paweł Bobruk

Page 2: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

O nas:

zespół zajmujący się dostarczaniem zespołom

Elasticsearch jak usługę w Grupie Allegro

infrastruktura

konsultacje

szkolenia wewnętrzne

Page 3: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Agenda

Dlaczego elasticsearchTeoria wyszukiwania informacjiAgregacjePrzypadki użycia w AllegroInfrastruktura klastrów ELS w AllegroNowości w elasticsearch 2.0

Page 4: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Dlaczego elasticsearch

Page 5: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Page 6: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Page 7: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Real-Time data & analytics

Page 8: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

System Rozproszony

Page 9: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Wyszukiwanie pełnotekstowe

Page 10: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Restowe API

Page 11: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Dokumenty JSONowe

Page 12: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Teoria wyszukiwania informacji

Page 13: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Wyszukiwanie informacji

Wyszukiwanie informacji (information retrivial) jest pozyskaniem istotnych dla szukającego informacji (zazwyczaj

dokumentów) z ze zbioru danych informatycznych (zazwyczaj

niestrukturalnych).

Page 14: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Odwrócony indeksDokument - element, na którym

budujemy system(np. produkt w sklepie, strona internetowa)

Term - element indeksu, zazwyczaj pojedyncze słowo zestaw termów tworzy słownik indeksu

Page 15: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Wyszukiwanie pełnotekstoweTerm Doc_1 Doc_2 Doc_3------------------------------------brown | X | X |dog | X | | dogs | | X | Xfox | X | | Xfoxes | | X |in | | X |jumped | X | | Xlazy | X | X |leap | | X |over | X | X | Xquick | X | X | Xsummer | | X |the | X | | X------------------------------------

Odwrócony index

Doc_1: The quick brown fox jumped over the lazy dogDoc_2: Quick brown foxes leap over lazy dogs in summerDoc_3: The quick fox jumped over dogs

Page 16: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Analizatory

Page 17: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Analizatory- Tokenizer

- whitespace - tokeny tylko po białych znakach

- standard - tokeny po białych znakach + znakach interpunkcji

- keyword - np. dla marek “Hugo Boss”

- regexp - własna definicja

- Token Filter

- lowercase

- stopword

- analiza języka polskiego

- stempel - stemer algorytmiczny

- hunspell for lucene - filtr oparty o słowniki i zasady gramatyki

- morfologik - analiza morfologiczna - polski projekt

Page 18: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Wyszukiwanie pełnotekstowe GET /my_index/_search

{ "query" : { "match" : { "body" : "brown" } }}

Term Doc_1 Doc_2 Doc_3------------------------------------brown | X | X | dog | X | | Xdogs | | X | Xfox | X | | Xfoxes | | X |in | | X |jumped | X | | Xlazy | X | X |leap | | X |over | X | X | Xquick | X | X | Xsummer | | X |the | X | | X------------------------------------

Odwrócony index

Page 19: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

AgregacjeTerm Doc_1 Doc_2 Doc_3------------------------------------brown | X | X | dog | X | | Xdogs | | X | Xfox | X | | Xfoxes | | X |in | | X |jumped | X | | Xlazy | X | X |leap | | X |over | X | X | Xquick | X | X | Xsummer | | X |the | X | | X------------------------------------

Odwrócony index

GET /my_index/_search{ "query" : { "match" : { "body" : "brown" } }, "aggs" : { "popular_terms": { "terms" : { "field" : "body" } } }}

Page 20: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Field dataDoc Terms-----------------------------------------------------------------Doc_1 | brown, dog, fox, jumped, lazy, over, quick, theDoc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summerDoc_3 | dog, dogs, fox, jumped, over, quick, the-----------------------------------------------------------------

doc values - field data na dysku

Page 21: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Field dataDoc Terms-----------------------------------------------------------------Doc_1 | brown, dog, fox, jumped, lazy, over, quick, theDoc_2 | brown, dogs, foxes, in, lazy, leap, over, quick, summerDoc_3 | dog, dogs, fox, jumped, over, quick, the-----------------------------------------------------------------

GET /my_index/_search{ "query" : { "match" : { "body" : "brown" } }, "aggs" : { "popular_terms": { "terms" : { "field" : "body" } } }}

Term Doc_1 Doc_2 Doc_3------------------------------------brown | X | X | dog | X | | Xdogs | | X | X...-----------------------------------

{ "hits": { "total": 2, ... }, "aggregations": { "popular_terms": { "buckets": [ { "key": "brown", "doc_count": 2 }, { "key": "lazy", "doc_count": 2 }, { "key": "over", "doc_count": 2 }, { "key": "quick", "doc_count": 2 }, { "key": "dog", "doc_count": 1 }, ... ]}}}

Inverted index

Page 22: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Agregacje

Page 23: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Page 24: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Metricsminmaxsumavgvalue_countsum_of_squaresstd_deviationvariance

Page 25: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

termsagregacja po polu

Page 26: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Najczęściej wyszukiwane słowa{

"aggs": { "mostCommonSearched": { "terms": { "field": "phrase" } } }}

{ "key": "samsung", "doc_count": 3321830 }, { "key": "galaxy", "doc_count": 2664985 }, { "key": "audi", "doc_count": 2343937 }, { "key": "nike", "doc_count": 2234019 }, ...

Page 27: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

agregacjezagłębion

e

Page 28: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Najczęściej wyszukiwane per kategoria{ "aggs": {

"category": { "terms": { "field": "category", "size": 5 }, "aggs": { "mostCommonSearched": { "terms": { "field": "phrase", "size": 5 } } } } }}

Page 29: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Main Page Motoryzacja Książki i Komiksy Komputery Odzież, Obuwie, Dodatki

samsung audi testy lenovo nike

nike bmw historia tablet adidas

galaxy mercedes matematyka office buty

buty opel nauczyciela microsoft air

audi honda księga gtx sukienka

Page 30: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

statscount, min, max, avg, sum

Page 31: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Statystyki cen per kategoria{ "aggs": {

"category": { "terms": { "field": "category", "size": 10 }, "aggs": { "stats": { "stats": { "field": "price" } } } }}

{ "key": "Oświetlenie/Lampy", "stats": { "count": 157452, "min": 1, "max": 66479, "avg": 297.42634631508975, "sum": 46830373.080003515 }},...

Page 32: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

percentile

Page 33: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

{ "key": "Oświetlenie/Lampy", "percentile": { "values": { "50.0": 162.65936064485723, "75.0": 330.90439138409306, "95.0": 980.0905118431161, "99.0": 2147.587473335171 } } }, ...

Ceny w percentylach per kategoria{

"aggs": {"category": {

"terms": { "field": "category.path",

"size": 10 }, "aggs": { "percentile": { "percentiles":

{ "field": "price", "percents": [ 50,

75,

95,

99 ] }

Page 34: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

date_histogram

statystyka wg daty

Page 35: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Nowe produkty Sprzedawcy { "aggs": { "date": { "date_histogram": { "field": "createdAt", "interval": "month" } } }}

{

"key": “April”,

"doc_count": 13 }, {

"key": “May”,

"doc_count": 40 }, {

"key": “June”,

"doc_count": 28 }, ...

Page 36: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

script

Page 37: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Koniec aukcji wg dni tygodnia{

"query": { "aggs": {

"auctionsPerWeekDay": { "terms": { "script": “doc['endDate'].date.dayOfWeek().getAsText()", } } }}

Niedziela 3672219

Sobota 3144495

Poniedziałek 3090514

Piątek 2823472

Środa 2729971

Czwartek 2724953

Page 38: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

geo

Page 39: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Page 40: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Punkty odbioru w promieniu 1,5 km{

"aggs": { "byPlace": { "geo_distance": { "field": "location", "origin": "52.2401,21.0421", "ranges": [ { "to": 700}, {"from": 700, "to": 1000},

{"from": 1000, "to": 1500}

], "unit": "m" } } }}

{ "key": "*-700.0", "from": 0, "to": 700, "doc_count": 1 }, { "key": "700.0-1000.0", "from": 700, "to": 1000, "doc_count": 6 } , { "key": "1000.0-1500.0", "from": 1000, "to": 1500, "doc_count": 12 }

Page 41: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

pipeline v 2.0

Page 42: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce
Page 43: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Pipeline

statystyczne (min, max, avg, ...)percentilecumulativemoving...

Page 44: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Moving

Page 45: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Elasticsearch w Allegro

Page 46: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Rekomendacje

Page 47: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Rekomendacje

- indeksowane są oferty allegro zawierające id meta produktu oraz ranking (score) oznaczający jakość oferty{ “name”: “iphone 6, super oferta” offerId: “23”, metaProductId: “p12”, score: 0,324}

- system rekomendacji wybiera meta produkty które mają być zarekomendowane użytkownikowi

Page 48: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Rekomendacje{ "aggregations": { "by_meta_product_id": { "buckets": [ { "key": "p12", "top_n_items": { "hits": { "total": 15, "max_score": null, "hits": [ { { "name": "iphone 6s" }, "sort": [ 0.1485 ] }, { { "name": "iphone 6s nowość", }, "sort": [ 0.1348 ] }, ... ]}}}]}}}

Page 49: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Problemy- optimize

- w Lucene zmiana dokumentu to usunięcie i dodanie nowego

- przy częstych zmianach indeksu, rośnie ilość skasowanych dokumentów, przy przekroczeniu pewnego progu - u nas 20% ma to wpływ na czasy odpowiedzi

- dlatego raz na dobę wymuszamy optimize indexu

Page 50: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Wydajność

- wielkość indeksu: 25 mln dokumentów

- odczyty > 3000 rps- czasy odpowiedzi : < 500ms (p99)Skalujemy odczyty przez większą liczbę replik.

Page 51: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

http://hermes.allegro.tech/

https://github.com/allegro/hermes

Page 52: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Hermeswykorzystanie do audytów “eventów”, zapisywane

są wysłane i opublikowane “eventy”

wydajne zapisy ponad 4000 rps

indeksy timeseries (per dzień), łatowść kasowania

około 1,8 mld dokumentów

zapisy bulkami

Page 53: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

DWH

- KIBANA - analityczne - biznes potrafi używać

- marketing / reklama

- 4 mld dokumentów

- 2000 indeksów

- indeksy timeseries z użyciem aliasów

Page 54: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Bilingi

Billingi serwisów allegro

około 400 mln dokumentów

indeksowań 100 rps

użycie timeseries i aliasów

routing po użytkowniku

Page 55: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Punkty odbioru - GEO

wyszukiwanie geolokalizacyjne

Page 56: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Setup klastrów

Page 57: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Setup cloudowy

prywatny cloud oparty na openstacku

ansible do automatyzacji stawiania klastrów (łatwe rozszerzanie)

backupy na hdfsa - rozszerzyliśmy o autoryzację kerberos

monitoring oparty na graphite, cabot i pagerduty

Page 58: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Narzędzie do reindeksacji

https://github.com/allegro/elasticsearch-reindex-tool

Page 59: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Nowości w elasticsearch 2.0

Page 60: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Elasticsearch 2.0

Agregacje Pipeline

uproszczone query API - (filtry zmergowane w query)

konfigurowalne kompresowanie (LZ4, DEFLATE)

doc-values - domyślne

Shield na poziomie pól i dokumentów (płatny)

Marvel opensoursed

Sense opensourced

Page 61: allegro.tech Data Science Meetup #2: Elasticsearch w praktyce

Pytania