Haɓaka ɗaukakawa akan aikin babban lodi tare da Neman Elastic

Hai Habr! Sunana Maxim Vasiliev, Ina aiki a matsayin manazarci da manajan ayyuka a FINCH. A yau zan so in gaya muku yadda, ta amfani da ElasticSearch, mun sami damar aiwatar da buƙatun miliyan 15 a cikin mintuna 6 da haɓaka abubuwan yau da kullun akan rukunin abokan cinikinmu. Abin takaici, za mu yi ba tare da sunaye ba, tun da muna da NDA, muna fata cewa abubuwan da ke cikin labarin ba za su sha wahala daga wannan ba. Mu tafi.

Yadda aikin ke aiki

A kan bayanmu, muna ƙirƙirar ayyuka waɗanda ke tabbatar da aikin gidan yanar gizon abokin cinikinmu da aikace-aikacen hannu. Ana iya ganin tsarin gaba ɗaya a cikin zane:

Haɓaka ɗaukakawa akan aikin babban lodi tare da Neman Elastic

A cikin aikin aiki, muna aiwatar da ma'amaloli masu yawa: sayayya, biyan kuɗi, ayyuka tare da ma'auni mai amfani, wanda muke adana yawancin rajistan ayyukan, da kuma shigo da fitar da wannan bayanai zuwa tsarin waje.

Hakanan akwai hanyoyin juyawa lokacin da muka karɓi bayanai daga abokin ciniki kuma mu canza shi zuwa mai amfani. Bugu da ƙari, har yanzu akwai matakai don aiki tare da biyan kuɗi da shirye-shiryen kari.

Takaitaccen tarihin

Da farko, mun yi amfani da PostgreSQL azaman ma'ajiyar bayanai kawai. Madaidaicin fa'idodinsa don DBMS: kasancewar ma'amaloli, haɓakar harshe samfurin bayanai, kayan aiki da yawa don haɗawa; haɗe da kyakkyawan aiki ya biya bukatun mu na dogon lokaci.

Mun adana cikakkun bayanai a cikin Postgres: daga ma'amaloli zuwa labarai. Amma adadin masu amfani ya karu, kuma tare da shi adadin buƙatun.

Don fahimta, adadin zaman shekara-shekara a cikin 2017 kawai akan shafin tebur shine miliyan 131. A cikin 2018 - miliyan 125. 2019 kuma miliyan 130. Ƙara wani 100-200 miliyan daga sigar wayar hannu na rukunin yanar gizon da aikace-aikacen hannu, kuma ku za su sami yawan buƙatun.

Tare da ci gaban aikin, Postgres ya dakatar da jimre wa nauyin kaya, ba mu da lokaci - yawancin tambayoyi daban-daban sun bayyana, wanda ba za mu iya ƙirƙirar adadi mai yawa ba.

Mun fahimci cewa akwai buƙatar wasu shagunan bayanan da za su samar da bukatunmu kuma su cire nauyin PostgreSQL. An yi la'akari da Elasticsearch da MongoDB azaman zaɓuɓɓuka masu yiwuwa. Na karshen ya yi rashin nasara akan abubuwa kamar haka:

  1. Sannun saurin ƙididdigewa yayin da adadin bayanai ke girma. Tare da Elastic, saurin baya dogara da adadin bayanai.
  2. Babu cikakken binciken rubutu

Don haka mun zaɓi Elastic don kanmu kuma mun shirya don canji.

Canjawa zuwa Na roba

1. Mun fara sauyawa daga wurin sabis na bincike na siyarwa. Abokin cinikinmu yana da jimlar kusan maki 70 na siyarwa, kuma wannan yana buƙatar nau'ikan bincike da yawa akan rukunin yanar gizon da aikace-aikacen:

  • Binciken rubutu da sunan birni
  • Geosearch a cikin radius da aka bayar daga wani wuri. Misali, idan mai amfani yana so ya ga wuraren tallace-tallace ne mafi kusa da gidansa.
  • Bincika ta wani murabba'i da aka ba - mai amfani yana zana murabba'i akan taswira, kuma duk maki a cikin wannan radius ana nuna masa.
  • Bincika ta ƙarin masu tacewa. Wuraren siyarwa sun bambanta da juna a iri-iri

Idan muka yi magana game da kungiyar, to a cikin Postgres muna da tushen bayanan duka taswira da labarai, kuma a cikin Elastic Snapshots ana ɗaukar su daga ainihin bayanan. Gaskiyar ita ce, da farko Postgres ba zai iya jure wa binciken ta kowane ma'auni ba. Ba wai kawai akwai fihirisa da yawa ba, za su iya haɗuwa, don haka mai tsara tsarin Postgres ya ɓace kuma bai fahimci abin da za a yi amfani da shi ba.

2. Na gaba a layi shine sashin labarai. Bugawa suna fitowa a rukunin yanar gizon kowace rana don kada mai amfani ya ɓace a cikin kwararar bayanai, dole ne a daidaita bayanan kafin fitar. Wannan shine abin da ake nema: zaku iya bincika shafin ta hanyar daidaita rubutu, kuma a lokaci guda haɗa ƙarin masu tacewa, tunda suma ana yin su ta hanyar Elastic.

3. Sa'an nan kuma muka matsar da sarrafa ma'amala. Masu amfani za su iya siyan wani samfuri akan rukunin yanar gizon kuma su shiga cikin zana kyauta. Bayan irin waɗannan sayayya, muna aiwatar da adadi mai yawa na bayanai, musamman a ƙarshen mako da hutu. Don kwatanta, idan a kan talakawa kwanaki adadin sayayya ne wani wuri tsakanin 1,5-2 miliyan, sa'an nan a kan holidays adadi zai iya isa 53 miliyan.

A lokaci guda, dole ne a sarrafa bayanan a cikin ɗan gajeren lokaci mai yiwuwa - masu amfani ba sa son jiran sakamakon na kwanaki da yawa. Babu wata hanyar da za a iya cimma irin wannan lokacin ta hanyar Postgres - sau da yawa muna karɓar makullai, kuma yayin da muke sarrafa duk buƙatun, masu amfani ba za su iya bincika ko sun sami kyaututtuka ko a'a ba. Wannan ba shi da daɗi sosai ga kasuwanci, don haka mun matsar da aiki zuwa Elasticsearch.

Lokaci

Yanzu an saita sabuntawa bisa ga abubuwan da suka faru, bisa ga halaye masu zuwa:

  1. Abubuwan tallace-tallace. Da zaran mun karɓi bayanai daga tushen waje, nan take za mu fara sabuntawa.
  2. Labarai. Da zaran an gyara kowane labari akan rukunin yanar gizon, ana aika shi ta atomatik zuwa Elastic.

Anan kuma yana da daraja ambaton fa'idodin Na roba. A cikin Postgres, lokacin aika buƙatu, dole ne ku jira har sai ta aiwatar da duk bayanan da gaskiya. Kuna iya aika bayanan 10 zuwa Elastic kuma fara aiki nan da nan, ba tare da jira don rarraba bayanan a duk Shards ba. Tabbas, wasu Shard ko Replica bazai ga bayanan nan da nan ba, amma komai zai kasance nan ba da jimawa ba.

Hanyoyin haɗin kai

Akwai hanyoyi guda biyu don haɗawa tare da Elastic:

  1. Ta hanyar abokin ciniki na asali akan TCP. Direba na asali yana mutuwa a hankali: ba a samun tallafi, yana da madaidaicin ma'anar. Saboda haka, a zahiri ba ma amfani da shi kuma muna ƙoƙarin yin watsi da shi gaba ɗaya.
  2. Ta hanyar haɗin HTTP wanda zai iya amfani da buƙatun JSON biyu da haɗin gwiwar Lucene. Na ƙarshe shine injin rubutu wanda ke amfani da Elastic. A cikin wannan sigar, muna samun ikon Batch ta buƙatun JSON akan HTTP. Wannan shine zaɓin da muke ƙoƙarin amfani da shi.

Godiya ga hanyar haɗin HTTP, za mu iya amfani da ɗakunan karatu waɗanda ke ba da aiwatar da asynchronous na abokin ciniki HTTP. Za mu iya yin amfani da Batch da API asynchronous, wanda ke haifar da babban aiki, wanda ya taimaka da yawa a cikin kwanakin babban haɓaka (ƙari akan abin da ke ƙasa)

Wasu lambobi don kwatanta:

  • Ajiye masu amfani da kyautar Postgres a cikin zaren 20 ba tare da haɗawa ba: rikodin 460713 a cikin daƙiƙa 42
  • Abokin ciniki na roba + mai amsawa don zaren 10 + tsari don abubuwa 1000: rikodin 596749 a cikin daƙiƙa 11
  • Abokin ciniki na roba + mai amsawa don zaren 10 + tsari don abubuwa 1000: 23801684 shigarwar a cikin mintuna 4

Yanzu mun rubuta manajan buƙatun HTTP wanda ke gina JSON azaman Batch / ba Batch ba kuma aika ta kowane abokin ciniki HTTP, ba tare da la’akari da ɗakin karatu ba. Hakanan zaka iya zaɓar aika buƙatun aiki tare ko a daidaita su.

A cikin wasu haɗin kai, har yanzu muna amfani da abokin ciniki na sufuri na hukuma, amma wannan batu ne kawai na sake fasalin gaba. A wannan yanayin, ana amfani da abokin ciniki na al'ada wanda aka gina akan tushen Spring WebClient don sarrafawa.

Haɓaka ɗaukakawa akan aikin babban lodi tare da Neman Elastic

babban gabatarwa

Sau ɗaya a shekara, aikin yana ɗaukar babban haɓaka ga masu amfani - wannan shine Highload iri ɗaya, tunda a wannan lokacin muna aiki tare da dubun-dubatar masu amfani a lokaci guda.

Yawanci kololuwar lodi yana faruwa a lokacin bukukuwa, amma wannan haɓakawa yana kan matakin daban. Shekarar da ta gabata, a ranar talla, mun sayar da kayayyaki 27. An sarrafa bayanan fiye da rabin sa'a, wanda ya haifar da damuwa ga masu amfani. Masu amfani sun sami kyaututtuka don shiga, amma ya bayyana a fili cewa ana buƙatar haɓaka aikin.

A farkon 2019, mun yanke shawarar cewa muna buƙatar Bincike na Elastic. Tsawon shekara guda, mun shirya sarrafa bayanan da aka karɓa a cikin Elastic da fitar da su a cikin api na aikace-aikacen wayar hannu da gidan yanar gizon. A sakamakon haka, a shekara ta gaba a lokacin yakin neman zabe, mun sarrafa 15 shigarwa cikin mintuna 131.

Tun da muna da mutane da yawa waɗanda suke son siyan kaya kuma suna shiga cikin zana kyaututtuka a cikin talla, wannan ma'auni ne na ɗan lokaci. Yanzu muna aika bayanai na zamani zuwa Elastic, amma a nan gaba muna shirin canja wurin bayanan da aka adana na watannin da suka gabata zuwa Postgres a matsayin ajiyar dindindin. Don kar a toshe ma'anar Elastic, wanda kuma yana da iyakokin sa.

Kammalawa/Kammalawa

A halin yanzu, mun canza duk ayyukan da muke so zuwa Elastic kuma mun dakatar da wannan a yanzu. Yanzu muna gina ƙididdiga a cikin Elastic a saman babban ma'ajiyar dagewa a cikin Postgres, wanda ke ɗaukar nauyin mai amfani.

A nan gaba, muna shirin canja wurin ayyuka idan mun fahimci cewa buƙatar bayanai ta zama mai ban sha'awa kuma ana neman adadin ginshiƙai marasa iyaka. Wannan ba aikin Postgres bane.

Idan muna buƙatar cikakken bincike na rubutu a cikin aiki ko kuma idan muna da ma'auni daban-daban na bincike, to mun riga mun san cewa ana buƙatar fassara wannan zuwa Elastic.

⌘⌘⌘

Na gode da karantawa. Idan kamfanin ku kuma yana amfani da ElasticSearch kuma yana da nasa shari'o'in aiwatarwa, to ku gaya mana. Zai zama mai ban sha'awa don sanin yadda wasu suke 🙂

source: www.habr.com

Add a comment