Utaina te arotautanga ki runga i te kaupapa Highload me ElasticSearch

Hei Habr! Ko Maxim Vasiliev toku ingoa, kei te mahi ahau hei kaitātari me te kaiwhakahaere kaupapa i FINCH. I tenei ra e hiahia ana ahau ki te korero ki a koe me pehea, ma te whakamahi i te ElasticSearch, i taea e matou te whakahaere i nga tono 15 miriona i roto i nga meneti 6 me te arotau i nga kawenga o ia ra i runga i te waahi o tetahi o a maatau kaihoko. Kia aroha mai, me mahi tatou me te kore ingoa, na te mea kei a tatou he NDA, ko te tumanako ka kore nga korero o te tuhinga e pa ki tenei. Haere tatou.

Te mahi a te kaupapa

I runga i to maatau tuara, ka hangaia e matou nga ratonga hei whakarite i te mahinga o nga paetukutuku a to taatau kiritaki me te tono pūkoro. Ka kitea te hanganga whanui i te hoahoa:

Utaina te arotautanga ki runga i te kaupapa Highload me ElasticSearch

I roto i te mahinga o te mahi, ka tukatukahia e matou te maha o nga whakawhitinga: nga hoko, nga utu, nga mahi me nga pauna kaiwhakamahi, mo te mea e rongoa ana matou i te maha o nga rakau, me te kawemai me te kaweake i enei raraunga ki nga punaha o waho.

He tukanga whakamuri ano ka whiwhi tatou i nga raraunga mai i te kiritaki ka whakawhiti atu ki te kaiwhakamahi. I tua atu, kei reira tonu nga tukanga mo te mahi me nga utu me nga kaupapa bonus.

He korero poto

I te timatanga, i whakamahia e matou te PostgreSQL hei toa raraunga anake. Ko ona painga paerewa mo te DBMS: te aroaro o nga whakawhitinga, te reo tauira raraunga kua whakawhanakehia, he maha nga taputapu mo te whakauru; me te pai o nga mahi ka tutuki i o maatau hiahia mo te wa roa.

I penapenahia e matou nga raraunga katoa i roto i te Postgres: mai i nga whakawhitinga ki nga korero. Engari i piki ake te maha o nga kaiwhakamahi, me te maha o nga tono.

Mo te mohio, ko te tau o nga huihuinga i te 2017 anake i runga i te papamahi papamahi ko te 131 miriona. I te 2018 - 125 miriona. 2019 ano 130 miriona. Tāpirihia tetahi atu 100-200 miriona mai i te putanga pūkoro o te pae me te tono waea, a ko koe ka whiwhi i te maha o nga tono.

Na te tipu o te kaupapa, ka mutu a Postgres ki te kawe i te kawenga, karekau he wa - he maha nga momo patai i puta mai, kaore e taea e matou te hanga i te maha o nga taurangi.

I mohio matou he hiahia mo etahi atu toa raraunga hei whakarato i o maatau hiahia me te tango i te uta i te PostgreSQL. Ko Elasticsearch me MongoDB i whakaarohia hei whiringa ka taea. Ko te whakamutunga i ngaro i runga i nga waahanga e whai ake nei:

  1. He puhoi te tere tohu tohu i te mea ka tipu haere te nui o nga raraunga i roto i nga tohu. Ma te Elastic, kaore te tere e whakawhirinaki ki te nui o nga raraunga.
  2. Karekau he rapu kupu katoa

Na i whiriwhiria e matou a Elastic mo matou ake ka rite mo te whakawhiti.

Te whakawhiti ki te Elastic

1. I timata matou i te whakawhiti mai i te waahi o te ratonga rapu hoko. Tata ki te 70 nga tohu hoko a ta taatau kaihoko, a he maha nga momo rapunga i runga i te papanga me te tono:

  • Rapu kupu ma te ingoa taone
  • Geosearch i roto i te radius mai i etahi waahi. Hei tauira, ki te hiahia te kaiwhakamahi ki te kite ko wai nga waahi hoko e tata ana ki tona kainga.
  • Rapua ma te tapawha kua tohua - ka tuhia e te kaiwhakamahi he tapawha ki runga i te mapi, ka whakaatuhia ki a ia nga tohu katoa o tenei radius.
  • Rapua ma nga whiriwhiringa taapiri. He rereke nga waahi hoko mai i a raatau ano i roto i nga momo rereke

Mena ka korero tatou mo te whakahaere, na i roto i te Postgres he puna raraunga mo te mapi me nga purongo, kei roto i nga Elastic Snapshots ka tangohia mai i nga raraunga taketake. Ko te meka ko te tuatahi kaore i taea e Postgres te aro ki te rapu ma nga paearu katoa. Ehara i te mea he maha nga taurangi, ka taea ano hoki te īnaki, no reira i ngaro ai te Kaihōtaka Postgres me te kore e mohio ko tehea taurangi hei whakamahi.

2. I muri mai ko te wahanga korero. Ka puta nga whakaputanga ki runga i te pae i ia ra kia kore ai te kaiwhakamahi e ngaro i te rere o nga korero, me whakariterite nga raraunga i mua i te tuku. Koinei te tikanga o te rapu: ka taea e koe te rapu i te papanga ma te taatai ​​​​kuputuhi, me te hono ano i nga taapiri taapiri, na te mea ka mahia ma te Elastic.

3. Na ka nekehia e matou te mahinga hokohoko. Ka taea e nga kaiwhakamahi te hoko i tetahi hua i runga i te papanga ka uru atu ki te utu utu. Whai muri i enei hoko, ka tukatukahia e matou te nui o nga raraunga, ina koa i nga wiki me nga hararei. Hei whakataurite, mena i nga ra noa te maha o nga hoko kei waenga i te 1,5-2 miriona, na i nga hararei ka eke te ahua ki te 53 miriona.

I te wa ano, me tukatuka nga raraunga i roto i te wa poto - kaore nga kaiwhakamahi e pai ki te tatari mo te hua mo etahi ra. Karekau he huarahi ki te whakatutuki i aua wa kati na roto i te Postgres - he maha nga wa i whiwhi raka matou, a i a matou e whakahaere ana i nga tono katoa, kaore e taea e nga kaiwhakamahi te tirotiro mena ka whiwhi taonga ratou, kaore ranei. Ehara tenei i te mea tino pai mo te pakihi, no reira i nekehia e matou te tukatuka ki Elasticsearch.

Wāhanga

Inaianei kua whirihorahia nga whakahoutanga i runga i nga huihuinga, i runga i nga tikanga e whai ake nei:

  1. Nga tohu hoko. Ka whiwhi raraunga mai i tetahi puna o waho, ka timata tonu te whakahou.
  2. Rongorongo. Ina whakatika nga korero i runga i te papanga, ka tukuna aunoatia ki Elastic.

I konei ano he mea tika kia whakahuahia nga painga o Elastic. I roto i te Postgres, ka tukuna he tono, me tatari koe kia tika te mahi i nga rekoata katoa. Ka taea e koe te tuku 10 rekoata ki Elastic ka timata tonu te mahi, me te kore e tatari kia tohatohahia nga rekoata puta noa i nga Shards katoa. Ko te tikanga, kaore pea etahi Shard, Replica ranei e kite i nga raraunga i tenei wa, engari ka waatea nga mea katoa.

Nga tikanga whakauru

E rua nga huarahi ki te whakauru ki te Elastic:

  1. Na roto i te kiritaki taketake i runga i te TCP. Kei te mate haere te kaitaraiwa Maori: kua kore e tautokona, he whakaraerae he wetereo. Na reira, karekau matou e whakamahi me te ngana ki te whakarere katoa.
  2. Na roto i te atanga HTTP ka taea te whakamahi i nga tono JSON e rua me te syntax Lucene. Ko te mea whakamutunga he miihini kuputuhi e whakamahi ana i te Elastic. I roto i tenei putanga, ka whiwhi tatou i te kaha ki te Batch i roto i nga tono JSON mo HTTP. Koinei te whiringa e ngana ana matou ki te whakamahi.

He mihi ki te atanga HTTP, ka taea e matou te whakamahi i nga whare pukapuka e whakarato ana i te whakatinanatanga tukutahi o te kiritaki HTTP. Ka taea e tatou te whakamahi i te Batch me te API asynchronous, e hua ana i te mahi nui, i awhina nui i nga ra o te whakatairanga nui (he nui ake i raro nei)

Ko etahi tau hei whakataurite:

  • Tiaki i nga kaiwhakamahi koha a Postgres i roto i nga miro 20 me te kore whakarōpū: 460713 rekoata i roto i te 42 hēkona
  • Kiritaki elastic + tauhohe mo te 10 miro + puranga mo te 1000 huānga: 596749 rekoata i roto i te 11 hēkona
  • Kiritaki elastic + reactive mo nga miro 10 + puranga mo te 1000 huānga: 23801684 whakaurunga i roto i te 4 meneti

Inaianei kua tuhia e matou he kaiwhakahaere tono HTTP e hanga ana i a JSON hei Batch / ehara i te Batch ka tukuna ma tetahi kaihoko HTTP, ahakoa te whare pukapuka. Ka taea hoki te kowhiri ki te tuku tono tukutahi, tukutahi ranei.

I etahi o nga whakaurunga, kei te whakamahi tonu matou i te kaihoko waka whaimana, engari he mea noa tenei mo te refactoring e whai ake nei. I tenei keehi, ka whakamahia tetahi kaihoko ritenga i hangaia i runga i te puna WebClient mo te tukatuka.

Utaina te arotautanga ki runga i te kaupapa Highload me ElasticSearch

whakatairanga nui

Kia kotahi te tau, ka whakahaerehia e te kaupapa he whakatairanga nui mo nga kaiwhakamahi - he rite tonu tenei Highload, mai i tenei wa ka mahi tahi matou me nga tekau miriona o nga kaiwhakamahi i te wa kotahi.

I te nuinga o te wa ka puta nga tihi o nga kawenga i nga hararei, engari he rereke te taumata o tenei whakatairanga. I te tau i mua atu, i te ra o te whakatairanga, 27 nga momo taonga i hokona e matou. I tukatukahia nga raraunga mo te neke atu i te hawhe haora, na te mea i raruraru nga kaiwhakamahi. I whakawhiwhia nga kaiwhakamahi ki nga taonga mo te whai waahi, engari i maarama me tere te mahi.

I te timatanga o te tau 2019, i whakatau matou me hiahia matou ki te ElasticSearch. Mo te tau katoa, i whakaritea e matou te tukatuka o nga raraunga kua riro mai i Elastic me o raatau tukunga i roto i te api o te tono pūkoro me te paetukutuku. Ko te mutunga mai, i te tau i muri mai i te wa o te pakanga, i tukatuka matou 15 whakaurunga i roto i te 131 meneti.

I te mea he maha nga taangata e hiahia ana ki te hoko taonga me te whai waahi ki te tuhi taonga i roto i nga whakatairanga, he waahanga poto tenei. Inaianei kei te tukuna atu e matou nga korero hou ki a Elastic, engari i te wa kei te heke mai ka whakamahere matou ki te whakawhiti i nga korero purongo mo nga marama kua hipa ki Postgres hei rokiroki tuturu. Kia kore ai e purua te taurangi Elastic, kei a ia ano ona here.

Whakamutunga/Whakamutunga

I tenei wa, kua whakawhitia e matou nga ratonga katoa e hiahia ana matou ki a Elastic ka mutu mo tenei wa. Inaianei kei te hangahia e matou he taurangi i Elastic ki runga ake o te rokiroki tuuturu matua i Postgres, e kawe ana i te kawenga a te kaiwhakamahi.

I te wa kei te heke mai, ka whakamahere matou ki te whakawhiti i nga ratonga mena ka mohio matou ka tino rerekee te tono raraunga ka rapua mo te maha o nga pou. Ehara tenei i te mahi mo Postgres.

Mena kei te hiahia maatau ki te rapu kupu-kupu katoa i roto i te mahi, mena he maha nga paearu rapu rapu, kua mohio kua mohio maatau me whakamaori tenei ki te Elastic.

⌘⌘⌘

Nga mihi mo te panui. Mena kei te whakamahi ano to kamupene i te ElasticSearch me ana ake keehi whakatinanatanga, korero mai. He rawe ki te mohio me pehea etahi atu 🙂

Source: will.com

Tāpiri i te kōrero