Ki jan nou nan CIAN donte teraocte nan mòso bwa

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Bonjou tout moun, non mwen se Alexander, mwen travay nan CIAN kòm yon enjenyè epi mwen patisipe nan administrasyon sistèm ak automatisation nan pwosesis enfrastrikti. Nan kòmantè yo nan youn nan atik anvan yo, yo te mande nou di ki kote nou jwenn 4 TB nan mòso bwa pa jou ak sa nou fè ak yo. Wi, nou gen anpil mòso bwa, epi yo te kreye yon gwoup enfrastrikti separe pou trete yo, ki pèmèt nou rezoud pwoblèm byen vit. Nan atik sa a mwen pral pale sou ki jan nou adapte li sou kou a nan yon ane nan travay ak yon koule toujou ap grandi nan done.

Ki kote nou te kòmanse?

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Pandan kèk ane ki sot pase yo, chaj la sou cian.ru te grandi trè vit, ak nan twazyèm sezon 2018, trafik resous te rive nan 11.2 milyon itilizatè inik chak mwa. Nan moman sa a, nan moman kritik nou pèdi jiska 40% nan mòso bwa yo, ki se poukisa nou pa t 'kapab byen vit fè fas ak ensidan ak te pase anpil tan ak efò rezoud yo. Nou menm tou nou souvan pa t 'kapab jwenn kòz la nan pwoblèm nan, epi li ta repete apre kèk tan. Se te lanfè ak yon bagay te dwe fè sou li.

Lè sa a, nou te itilize yon gwoup 10 nœuds done ak ElasticSearch vèsyon 5.5.2 ak paramèt endèks estanda pou estoke mòso bwa. Li te prezante plis pase yon ane de sa kòm yon solisyon popilè ak abòdab: Lè sa a, koule nan mòso bwa pa t 'tankou gwo, pa te gen okenn pwen nan vini ak konfigirasyon ki pa estanda. 

Logstash te bay pwosesis mòso k ap rantre sou diferan pò sou senk koòdonatè ElasticSearch. Yon endèks, kèlkeswa gwosè, te konpoze de senk shards. Yo te òganize yon wotasyon èdtan ak chak jou, kòm yon rezilta, apeprè 100 nouvo shards parèt nan gwoup la chak èdtan. Pandan ke pa te gen anpil mòso bwa, gwoup la byen fè fas ak pèsonn pa peye atansyon sou anviwònman li yo. 

Defi yo nan kwasans rapid

Volim mòso bwa ki pwodui yo te grandi byen vit, paske de pwosesis te sipèpoze youn ak lòt. Sou yon bò, kantite itilizatè yo nan sèvis la te grandi. Nan lòt men an, nou te kòmanse aktivman chanje nan yon achitekti mikwosèvis, scie moute ansyen monolit nou yo nan C# ak Python. Plizyè douzèn nouvo mikwosèvis ki ranplase pati monolit la te pwodwi anpil plis mòso bwa pou gwoup enfrastrikti a. 

Li te eskalade ki te mennen nou nan pwen kote gwoup la te vin pratikman enmanajab. Lè mòso bwa yo te kòmanse rive nan yon pousantaj de 20 mil mesaj pou chak segonn, wotasyon souvan initil ogmante kantite shards a 6 mil, e te gen plis pase 600 shards pou chak ne. 

Sa a te mennen nan pwoblèm ak alokasyon an nan RAM, epi lè yon ne te fè aksidan, tout shards yo te kòmanse deplase ansanm, miltipliye trafik ak chaje lòt nœuds, ki te fè li prèske enposib yo ekri done nan gwoup la. E pandan peryòd sa a nou te rete san mòso bwa. Men, si te gen yon pwoblèm ak sèvè a, nou fondamantalman pèdi 1/10 nan gwoup la. Yon gwo kantite ti endèks te ajoute konpleksite.

San yo pa mòso bwa, nou pa t 'konprann rezon ki fè yo ensidan an epi yo te kapab pi bonè oswa pita etap sou menm rato a ankò, ak nan ideoloji ekip nou an sa a te inakseptab, paske tout mekanis travay nou yo fèt pou fè jis opoze a - pa janm repete. menm pwoblèm yo. Pou fè sa, nou te bezwen tout volim mòso bwa yo ak livrezon yo prèske an tan reyèl, paske yon ekip enjenyè nan sèvis yo te kontwole alèt pa sèlman soti nan mezi, men tou nan mòso bwa. Pou konprann echèl pwoblèm nan, nan moman sa a volim total mòso bwa yo te apeprè 2 TB pa jou. 

Nou fikse yon objektif pou elimine nèt pèt mòso bwa yo epi redwi tan livrezon yo nan gwoup ELK a yon maksimòm de 15 minit pandan fòs majeure (nou pita te konte sou figi sa a kòm yon KPI entèn).

Nouvo mekanis wotasyon ak nœuds cho-cho

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Nou te kòmanse konvèsyon gwoup la pa mete ajou vèsyon ElasticSearch la soti nan 5.5.2 a 6.4.3. Yon fwa ankò gwoup vèsyon 5 nou an te mouri, epi nou deside fèmen li epi mete ajou li nèt - toujou pa gen mòso bwa. Se konsa, nou te fè tranzisyon sa a nan jis yon koup de èdtan.

Transfòmasyon ki pi gwo nan etap sa a te aplikasyon Apache Kafka sou twa nœuds ak yon koòdonatè kòm yon tanpon entèmedyè. Koutye mesaj la te sove nou nan pèdi mòso bwa pandan pwoblèm ak ElasticSearch. An menm tan an, nou te ajoute 2 nœuds nan gwoup la epi chanje nan yon achitekti cho-cho ak twa nœuds "cho" ki sitiye nan etajè diferan nan sant done a. Nou redireksyon mòso bwa yo lè l sèvi avèk yon mask ki pa ta dwe pèdi nan okenn sikonstans - nginx, osi byen ke mòso bwa erè aplikasyon. Minè mòso bwa yo te voye nan nœuds ki rete yo - debug, avètisman, elatriye, epi apre 24 èdtan, mòso bwa "enpòtan" ki soti nan nœuds "cho" yo te transfere.

Yo nan lòd yo pa ogmante kantite ti endèks, nou chanje soti nan wotasyon tan nan mekanis nan rollover. Te gen anpil enfòmasyon sou fowòm yo ke wotasyon pa gwosè endèks se trè enfidèl, kidonk nou deside sèvi ak wotasyon pa kantite dokiman nan endèks la. Nou analize chak endèks ak anrejistre kantite dokiman apre ki wotasyon ta dwe travay. Kidonk, nou te rive jwenn pi bon gwosè shard - pa plis pase 50 GB. 

Optimizasyon Cluster

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Sepandan, nou pa konplètman debarase m de pwoblèm yo. Malerezman, ti endèks toujou parèt: yo pa rive nan volim espesifye a, yo pa vire, epi yo te efase pa netwayaj global nan endèks ki gen plis pase twa jou, depi nou retire wotasyon pa dat. Sa a te mennen nan pèt done akòz lefèt ke endèks la ki soti nan gwoup la disparèt nèt, ak yon tantativ ekri nan yon endèks ki pa egziste te kraze lojik la nan konsèvate a ke nou te itilize pou jesyon. Alyas pou ekri te konvèti nan yon endèks epi li te kraze lojik woulman an, sa ki lakòz kwasans san kontwòl nan kèk endèks jiska 600 GB. 

Pou egzanp, pou konfigirasyon wotasyon an:

сurator-elk-rollover.yaml

---
actions:
  1:
    action: rollover
    options:
      name: "nginx_write"
      conditions:
        max_docs: 100000000
  2:
    action: rollover
    options:
      name: "python_error_write"
      conditions:
        max_docs: 10000000

Si pa te gen okenn alyas rollover, yon erè te fèt:

ERROR     alias "nginx_write" not found.
ERROR     Failed to complete action: rollover.  <type 'exceptions.ValueError'>: Unable to perform index rollover with alias "nginx_write".

Nou kite solisyon a pwoblèm sa a pou pwochen iterasyon an epi pran yon lòt pwoblèm: nou chanje nan lojik rale nan Logstash, ki trete mòso bwa ki fèk ap rantre (retire enfòmasyon ki pa nesesè ak anrichi). Nou mete li nan docker, ke nou lanse atravè docker-compose, epi nou menm tou nou mete logstash-exporter la, ki voye mezi bay Prometheus pou siveyans operasyonèl nan kouran boutèy la. Nan fason sa a nou te bay tèt nou opòtinite pou chanje san pwoblèm kantite ka logstash ki responsab pou trete chak kalite boutèy demi lit.

Pandan nou t ap amelyore gwoup la, trafik cian.ru te ogmante a 12,8 milyon itilizatè inik chak mwa. Kòm yon rezilta, li te tounen soti ke transfòmasyon nou yo te yon ti kras dèyè chanjman yo nan pwodiksyon, epi nou te fè fas ak lefèt ke nœuds yo "cho" pa t 'kapab fè fas ak chaj la ak ralanti livrezon an antye nan mòso bwa. Nou te resevwa done "cho" san echèk, men nou te oblije entèvni nan livrezon an nan rès la epi fè yon woulib lage manyèl yo nan lòd yo distribye endis yo respire. 

An menm tan an, dekale ak chanje anviwònman yo nan ka logstash nan gwoup la te konplike pa lefèt ke li te yon docker-konpoze lokal yo, ak tout aksyon yo te fèt manyèlman (pou ajoute nouvo pwent, li te nesesè yo manyèlman ale nan tout sèvè yo epi fè docker-konpoze moute -d toupatou).

Log répartition

Nan mwa septanm nan ane sa a, nou te toujou koupe monolit la, chaj la sou grap la te ogmante, ak koule nan mòso bwa te apwoche 30 mil mesaj pou chak segonn. 

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Nou te kòmanse pwochen iterasyon an ak yon aktyalizasyon pyès ki nan konpitè. Nou chanje soti nan senk koòdonatè a twa, ranplase nœuds done ak te genyen an tèm de lajan ak espas depo. Pou nœuds nou itilize de konfigirasyon: 

  • Pou nœuds "cho": E3-1270 v6 / 960Gb SSD / 32 Gb x 3 x 2 (3 pou Hot1 ak 3 pou Hot2).
  • Pou nœuds "cho": E3-1230 v6 / 4Tb SSD / 32 Gb x 4.

Nan iterasyon sa a, nou te deplase endèks la ak mòso bwa aksè nan mikwosèvis, ki pran menm espas ak mòso nginx devan liy, nan dezyèm gwoup la nan twa nœuds "cho". Nou kounye a sere done sou nœuds "cho" pou 20 èdtan, epi transfere yo nan nœuds "cho" nan rès mòso bwa yo. 

Nou te rezoud pwoblèm ti endèks ki te disparèt nan rekonfigirasyon wotasyon yo. Koulye a, endis yo vire chak 23 èdtan nan nenpòt ka, menm si gen ti done la. Sa a yon ti kras ogmante kantite shards (te gen apeprè 800 nan yo), men nan pwen de vi nan pèfòmans gwoup li se tolerab. 

Kòm yon rezilta, te gen sis "cho" ak sèlman kat "cho" nœuds nan gwoup la. Sa lakòz yon ti reta sou demann sou entèval tan long, men ogmante kantite nœuds nan tan kap vini an pral rezoud pwoblèm sa a.

Iterasyon sa a tou te fikse pwoblèm nan mank de dekale semi-otomatik. Pou fè sa, nou te deplwaye yon gwoup Nomad enfrastrikti - menm jan ak sa nou te deja deplwaye nan pwodiksyon an. Pou kounye a, kantite Logstash pa chanje otomatikman depann sou chaj la, men nou pral rive nan sa a.

Ki jan nou nan CIAN donte teraocte nan mòso bwa

Plan pou lavni

Konfigirasyon an aplike echèl parfe, epi kounye a nou estoke 13,3 TB nan done - tout mòso bwa pou 4 jou, ki nesesè pou analiz ijans nan alèt. Nou konvèti kèk nan mòso bwa yo nan mezi, ke nou ajoute nan Graphite. Pou rann travay enjenyè yo pi fasil, nou gen mezi pou gwoup enfrastrikti ak scripts pou reparasyon semi-otomatik pwoblèm komen yo. Apre ogmante kantite done nœuds, ki te planifye pou ane pwochèn, nou pral chanje nan depo done soti nan 4 a 7 jou. Sa a pral ase pou travay operasyonèl, depi nou toujou eseye mennen ankèt sou ensidan pi vit ke posib, epi pou envestigasyon alontèm gen done telemetrik. 

Nan mwa Oktòb 2019, trafik nan cian.ru te deja grandi a 15,3 milyon itilizatè inik chak mwa. Sa a te vin yon tès grav nan solisyon an achitekti pou fournir mòso bwa. 

Koulye a, nou ap prepare mete ajou ElasticSearch nan vèsyon 7. Sepandan, pou sa a, nou pral gen mete ajou kat la nan anpil endèks nan ElasticSearch, depi yo te deplase soti nan vèsyon 5.5 epi yo te deklare kòm depreke nan vèsyon 6 (yo tou senpleman pa egziste nan vèsyon). 7). Sa vle di ke pandan pwosesis aktyalizasyon a pral definitivman gen kèk kalite fòs majeure, ki pral kite nou san mòso bwa pandan pwoblèm nan rezoud. Nan vèsyon 7, nou pi ap chèche pou pi devan pou Kibana ak yon koòdone amelyore ak filtè nouvo. 

Nou reyalize objektif prensipal nou an: nou sispann pèdi mòso bwa ak redwi tan an nan gwoup enfrastrikti a soti nan 2-3 aksidan pa semèn nan yon koup èdtan nan travay antretyen pa mwa. Tout travay sa a nan pwodiksyon prèske envizib. Sepandan, kounye a nou ka detèmine egzakteman sa k ap pase ak sèvis nou an, nou ka byen vit fè li nan yon mòd trankil epi pa enkyete ke mòso bwa yo pral pèdi. An jeneral, nou satisfè, kontan ak prepare pou nouvo exploit, ki nou pral pale pita.

Sous: www.habr.com

Add nouvo kòmantè