Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Салом ба ҳама, номи ман Александр, ман дар CIAN ҳамчун муҳандис кор мекунам ва дар идоракунии система ва автоматикунонии равандҳои инфрасохторӣ машғулам. Дар шарҳҳои яке аз мақолаҳои қаблӣ аз мо хоҳиш карда шуд, ки бигӯем, ки мо дар як рӯз 4 TB логро аз куҷо мегирем ва бо онҳо чӣ кор мекунем. Бале, мо гузоришҳои зиёде дорем ва барои коркарди онҳо кластери алоҳидаи инфрасохторӣ таъсис дода шудааст, ки ба мо имкон медиҳад, ки мушкилотро зуд ҳал кунем. Дар ин мақола ман дар бораи он сӯҳбат мекунам, ки чӣ гуна мо онро дар тӯли як сол барои кор бо ҷараёни афзояндаи маълумот мутобиқ кардем.

Мо аз куҷо сар кардем?

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Дар тӯли чанд соли охир, сарбории cian.ru хеле зуд афзоиш ёфт ва дар семоҳаи сеюми соли 2018 трафики захиравӣ ба 11.2 миллион корбари беназир дар як моҳ расид. Дар он вакт дар лахзахои му-хим то 40 фоизи чубхоро аз даст додем, аз хамин сабаб мо бо ходисахо зуд мубориза бурда наметавонистем ва барои бартараф намудани онхо вакту кувваи зиёде сарф кардем. Мо низ аксар вақт сабаби мушкилотро ёфта наметавонистем ва пас аз чанд вақт он такрор мешавад. Ин ҷаҳаннам буд ва дар ин бора коре кардан лозим буд.

Он вақт мо кластери 10 гиреҳи маълумотро бо версияи ElasticSearch 5.5.2 бо танзимоти стандартии индекс барои нигоҳ доштани гузоришҳо истифода мебурдем. Он зиёда аз як сол пеш ҳамчун як ҳалли маъмул ва дастрас муаррифӣ карда шуд: он гоҳ ҷараёни гузоришҳо он қадар калон набуд, барои таҳияи конфигуратсияҳои ғайристандартӣ маъное надошт. 

Коркарди гузоришҳои воридотӣ аз ҷониби Logstash дар портҳои гуногун дар панҷ ҳамоҳангсози ElasticSearch таъмин карда шуд. Як шохис, сарфи назар аз андоза, аз панч пора иборат буд. Ротатсияи харруза ва соатбайъ ташкил карда шуд, ки дар натича дар кластер хар соат кариб 100 дона нав ба вучуд омад. Дар ҳоле ки гузоришҳо чандон зиёд набуданд, кластер аз ӯҳдаи хуб баромад ва касе ба танзимоти он аҳамият надод. 

Мушкилоти афзоиши босуръат

Ҳаҷми гузоришҳои тавлидшуда хеле зуд афзоиш ёфт, зеро ду раванд ба ҳам мепайванданд. Аз як тараф, шумораи истифодабарандагони хадамот афзоиш ёфт. Аз тарафи дигар, мо ба таври фаъол ба меъмории микросервис гузаштан оғоз кардем, ки монолитҳои кӯҳнаи худро дар C# ва Python дида мебароем. Якчанд даҳҳо микросервисҳои нав, ки қисмҳои монолитро иваз карданд, барои кластери инфрасохтор гузоришҳои бештарро тавлид карданд. 

Маҳз миқёскунӣ моро ба он ҷо овард, ки кластер амалан идоранашаванда шуд. Вақте ки гузоришҳо бо суръати 20 ҳазор паём дар як сония ворид шудан гирифтанд, гардиши зуд-зуд бефоида шумораи пораҳоро ба 6 ҳазор афзоиш дод ва дар як гиреҳ зиёда аз 600 пора мавҷуд буд. 

Ин боиси мушкилот дар тақсимоти хотираи RAM гардид ва вақте ки гиреҳ суқут кард, ҳама пораҳо ҳамзамон ба ҳаракат даромаданд, трафикро афзоиш медиҳанд ва гиреҳҳои дигарро бор мекунанд, ки навиштани маълумотро ба кластер қариб ғайриимкон мегардонд. Ва дар ин давра мо бе чубу тахта мондем. Ва агар мушкилот бо сервер вуҷуд дошта бошад, мо асосан 1/10 кластерро аз даст додем. Шумораи зиёди индексҳои хурд мураккабиро илова карданд.

Бидуни лог, мо сабабҳои ҳодисаро нафаҳмидем ва дер ё зуд метавонистем боз ба ҳамон раке қадам занем ва дар идеологияи дастаи мо ин ғайри қобили қабул буд, зеро тамоми механизмҳои кори мо барои муқобили кор тарҳрезӣ шудаанд - ҳеҷ гоҳ такрор накунем. ҳамон мушкилот. Барои ин ба мо ҳаҷми пурраи гузоришҳо ва интиқоли онҳо қариб дар вақти воқеӣ лозим буд, зеро як гурӯҳи муҳандисони навбатдор огоҳиҳоро на танҳо аз рӯи метрика, балки аз гузоришҳо низ назорат мекарданд. Барои фаҳмидани миқёси мушкилот, дар он вақт ҳаҷми умумии логҳо дар як рӯз тақрибан 2 TB буд. 

Мо мақсад гузоштем, ки талафоти гузоришҳоро комилан бартараф кунем ва вақти интиқоли онҳоро ба кластери ELK то ҳадди аксар то 15 дақиқа дар вақти ҳолатҳои форс-мажор кам кунем (баъдтар мо ба ин рақам ҳамчун KPI дохилӣ такя кардем).

Механизми нави гардиш ва гиреҳҳои гарм-гарм

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Мо табдилдиҳии кластерро бо навсозии версияи ElasticSearch аз 5.5.2 то 6.4.3 оғоз кардем. Бори дигар кластери версияи 5-и мо мурд ва мо тасмим гирифтем, ки онро хомӯш кунем ва комилан навсозӣ кунем - то ҳол гузоришҳо вуҷуд надоранд. Ҳамин тавр, мо ин гузаришро дар тӯли якчанд соат анҷом додем.

Трансформатсияи васеъмиқёс дар ин марҳила татбиқи Apache Kafka дар се гиреҳ бо ҳамоҳангсоз ҳамчун буфери фосилавӣ буд. Брокери паём моро аз гум кардани гузоришҳо ҳангоми мушкилот бо ElasticSearch наҷот дод. Ҳамзамон, мо ба кластер 2 гиреҳ илова кардем ва ба меъмории гарм-гарм бо се гиреҳи "гарм" дар рахҳои гуногун дар маркази додаҳо ҷойгир шудем. Мо гузоришҳоро ба онҳо бо истифода аз ниқоб равона кардем, ки дар ҳеҷ ваҷҳ набояд гум шавад - nginx ва инчунин гузоришҳои хатогиҳои барнома. Гузоришҳои хурд ба гиреҳҳои боқимонда фиристода шуданд - дебаг, огоҳӣ ва ғайра ва пас аз 24 соат, гузоришҳои "муҳим" аз гиреҳҳои "гарм" интиқол дода шуданд.

Барои он ки шумораи индексхои хурд зиёд нашавад, мо аз гардиши вахт ба механизми чархзананда гузаштем. Дар форумҳо маълумоти зиёде мавҷуд буд, ки гардиш аз рӯи андозаи индекс хеле эътимоднок аст, бинобар ин мо тасмим гирифтем, ки гардишро аз рӯи шумораи ҳуҷҷатҳои индекс истифода барем. Мо ҳар як индексро таҳлил карда, шумораи ҳуҷҷатҳоро қайд кардем, ки пас аз он ротатсия бояд кор кунад. Ҳамин тариқ, мо ба андозаи оптималии пора расидем - на бештар аз 50 ГБ. 

Оптимизатсияи кластер

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Бо вучуди ин мо аз мушкилот пурра халос нашудаем. Мутаассифона, индексҳои хурд ҳоло ҳам пайдо шуданд: онҳо ба ҳаҷми муқарраршуда нарасиданд, гардиш накарданд ва тавассути тозакунии глобалии индексҳои аз се рӯз калонтар нест карда шуданд, зеро мо гардишро аз рӯи сана хориҷ кардем. Ин боиси гум шудани маълумот гардид, зеро индекс аз кластер комилан нопадид шуд ва кӯшиши навиштан ба индекси мавҷуда мантиқи куратореро, ки мо барои идора истифода мебурдем, шикаст. Номи тахаллус барои навиштан ба индекс табдил дода шуд ва мантиқи гардишро вайрон кард, ки боиси афзоиши беназорати баъзе индексҳо то 600 ГБ гардид. 

Масалан, барои конфигуратсияи гардиш:

с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

Агар тахаллуси такрорӣ вуҷуд надошта бошад, хатогӣ рӯй дод:

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

Мо роҳи ҳалли ин масъаларо ба такрори навбатӣ гузоштем ва масъалаи дигарро гирифтем: мо ба мантиқи кашидани Logstash гузаштем, ки гузоришҳои воридшударо коркард мекунад (нест кардани иттилооти нолозим ва ғанӣгардонӣ). Мо онро дар docker ҷойгир кардем, ки онро тавассути docker-compose оғоз мекунем ва мо инчунин дар он ҷо logstash-exporter-ро ҷойгир кардем, ки метрикаро ба Prometheus барои мониторинги амалиётии ҷараёни лог мефиристад. Бо ин роҳ, мо ба худ имконият додем, ки шумораи мисолҳои logstashро, ки барои коркарди ҳар як намуди гузориш масъуланд, ба таври осон тағйир диҳем.

Ҳангоме ки мо кластерро такмил медодем, трафики cian.ru дар як моҳ то 12,8 миллион корбари беназир афзоиш ёфт. Дар натича маълум шуд, ки дигаргунсозихои мо аз дигаргунихои истехсолот як кадар акиб мондаанд ва мо бо чунин факт дучор меоем, ки узелхои «гарм» бори гаронро аз ухдаи худ карда натавониста, тамоми кашондани тахтахоро суст мекунанд. Мо маълумотҳои "гарм"-ро бе нокомӣ гирифтем, аммо ба мо лозим омад, ки ба интиқоли боқимонда дахолат кунем ва барои баробар тақсим кардани индексҳо дастӣ гардиш кунем. 

Ҳамзамон, миқёс ва тағир додани танзимоти мисолҳои logstash дар кластер аз он сабаб душвор буд, ки он як docker-compose маҳаллӣ буд ва ҳама амалҳо дастӣ иҷро мешуданд (барои илова кардани ақсои нав, зарур буд, ки ҳама чизро дастӣ гузаред. серверҳо ва docker-compose up -d дар ҳама ҷо).

Аз нав тақсим кардани сабт

Моҳи сентябри соли ҷорӣ мо ҳанӯз ҳам монолитро бурида истодаем, сарбории кластер меафзояд ва ҷараёни лог дар як сония ба 30 ҳазор паём наздик мешуд. 

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Мо такрори навбатиро бо навсозии сахтафзор оғоз кардем. Мо аз панҷ ҳамоҳангсоз ба се нафар гузаштем, гиреҳҳои маълумотро иваз кардем ва аз ҷиҳати пул ва фазои нигоҳдорӣ ғолиб шудем. Барои гиреҳҳо мо ду конфигуратсияро истифода мебарем: 

  • Барои гиреҳҳои "гарм": E3-1270 v6 / 960Gb SSD / 32 Гб x 3 x 2 (3 барои Hot1 ва 3 барои Hot2).
  • Барои гиреҳҳои "гарм": E3-1230 v6 / 4Tb SSD / 32 Гб x 4.

Дар ин итератсия, мо индексро бо сабтҳои дастрасии микросервисҳо, ки ҳамон ҷойро бо сабтҳои nginx-хати пешина ишғол мекунанд, ба гурӯҳи дуюми се гиреҳи "гарм" гузаронидем. Мо ҳоло маълумотро дар гиреҳҳои "гарм" барои 20 соат нигоҳ медорем ва сипас онҳоро ба гиреҳҳои "гарм" ба боқимондаи гузоришҳо интиқол медиҳем. 

Мо масъалаи аз байн рафтани индексҳои хурдро тавассути аз нав танзим кардани гардиши онҳо ҳал кардем. Ҳоло индексҳо дар ҳар сурат ҳар 23 соат гардиш мекунанд, ҳатто агар он ҷо маълумоти кам мавҷуд бошад. Ин шумораи пораҳоро каме зиёд кард (тақрибан 800 адад буд), аммо аз нуқтаи назари фаъолияти кластер он таҳаммулпазир аст. 

Дар натиҷа, дар кластер шаш гиреҳи "гарм" ва танҳо чор гиреҳи "гарм" мавҷуд буданд. Ин боиси каме таъхири дархостҳо дар фосилаҳои тӯлонӣ мегардад, аммо афзоиши шумораи гиреҳҳо дар оянда ин мушкилотро ҳал хоҳад кард.

Ин такрорӣ инчунин мушкилоти мавҷуд набудани миқёси нимаавтоматиро ҳал кард. Барои ин, мо як кластери Nomad инфрасохториро ҷойгир кардем - ба он чизе ки мо аллакай дар истеҳсолот ҷойгир карда будем. Дар айни замон, маблағи Logstash вобаста ба сарборӣ ба таври худкор тағир намеёбад, аммо мо ба ин меоем.

Чӣ гуна мо дар CIAN терабайтҳоро ром кардем

Нақшаҳои оянда

Миқёси конфигуратсияи амалӣ ба таври комил ва ҳоло мо 13,3 TB маълумотро нигоҳ медорем - ҳама гузоришҳо барои 4 рӯз, ки барои таҳлили изтирории огоҳиҳо зарур аст. Мо баъзе гузоришҳоро ба метрика табдил медиҳем, ки мо онҳоро ба Graphite илова мекунем. Барои осон кардани кори муҳандисон, мо метрика барои кластери инфрасохторӣ ва скриптҳо барои таъмири нимаавтоматии мушкилоти умумӣ дорем. Пас аз зиёд кардани шумораи гиреҳҳои додаҳо, ки барои соли оянда ба нақша гирифта шудааст, мо ба нигоҳдории маълумот аз 4 то 7 рӯз мегузарем. Ин барои кори оперативӣ кифоя хоҳад буд, зеро мо ҳамеша кӯшиш мекунем, ки ҳодисаҳоро ҳарчи зудтар тафтиш кунем ва барои тафтишоти дарозмуддат маълумотҳои телеметрӣ мавҷуданд. 

Дар моҳи октябри соли 2019 трафик ба cian.ru аллакай ба 15,3 миллион корбари беназир дар як моҳ афзоиш ёфт. Ин як озмоиши ҷиддии ҳалли меъморӣ барои расонидани логҳо гардид. 

Ҳоло мо омода карда истодаем, ки ElasticSearch-ро ба версияи 7 навсозӣ кунем. Аммо, барои ин мо бояд харитасозии бисёр индексҳоро дар ElasticSearch навсозӣ кунем, зеро онҳо аз версияи 5.5 гузаштаанд ва дар версияи 6 ҳамчун бекоршуда эълон шудаанд (онҳо дар версияи 7 вуҷуд надоранд) 7). Ин маънои онро дорад, ки дар ҷараёни навсозӣ ҳатман як навъ ҳолатҳои форс-мажор ба амал меояд, ки ҳангоми ҳалли масъала моро бе гузоришҳо мегузорад. Аз версияи XNUMX, мо бешубҳа Кибанаро бо интерфейси беҳтаршуда ва филтрҳои нав интизорем. 

Мо ба ҳадафи асосии худ расидем: мо талафоти гузоришҳоро қатъ кардем ва бекористии кластери инфрасохторро аз 2-3 садама дар як ҳафта то ду соат корҳои таъмирӣ дар як моҳ кам кардем. Хамаи ин кор дар истехсолот кариб ноаён аст. Аммо, ҳоло мо метавонем дақиқ муайян кунем, ки бо хидмати мо чӣ рӯй дода истодааст, мо метавонем онро зуд дар ҳолати ором иҷро кунем ва хавотир нашавем, ки гузоришҳо гум мешаванд. Умуман, мо каноатмандем, хурсандем ва ба корнамоихои нав тайёрй дида истодаем, ки дар бораи онхо баъдтар сухан меронем.

Манбаъ: will.com

Илова Эзоҳ