Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Aloha ʻoukou a pau, ʻo Alexander koʻu inoa, hana wau ma CIAN ma ke ʻano he ʻenekinia a ke komo nei au i ka hoʻokele ʻōnaehana a me ka automation o nā kaʻina hana. Ma nā ʻōlelo i kekahi o nā ʻatikala ma mua, ua noi ʻia mākou e haʻi i kahi e loaʻa ai iā mākou ka 4 TB o nā lāʻau i kēlā me kēia lā a me kā mākou hana me lākou. ʻAe, he nui kā mākou mau lāʻau, a ua hoʻokumu ʻia kahi pūʻulu ʻokoʻa e hoʻoponopono iā lākou, e hiki ai iā mākou ke hoʻoponopono wikiwiki i nā pilikia. Ma kēia ʻatikala e kamaʻilio wau e pili ana i ke ʻano o kā mākou hoʻololi ʻana iā ia i loko o hoʻokahi makahiki e hana me kahi kahe e ulu mau ana o ka ʻikepili.

Ma hea mākou i hoʻomaka ai?

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

I nā makahiki i hala iho nei, ua ulu wikiwiki ka ukana ma cian.ru, a ma ke kolu o ka hapaha o 2018, hiki i ka 11.2 miliona mau mea hoʻohana kūikawā i kēlā me kēia mahina. I kēlā manawa, i nā manawa koʻikoʻi ua nalowale mākou a hiki i ka 40% o nā lāʻau, ʻo ia ke kumu i hiki ʻole ai iā mākou ke hoʻoponopono koke i nā hanana a hoʻolilo i ka manawa a me ka hoʻoikaika ʻana e hoʻoponopono iā lākou. ʻAʻole hiki iā mākou ke ʻike pinepine i ke kumu o ka pilikia, a e hoʻi hou ana ma hope o kekahi manawa. He pō ia a pono e hana ʻia kekahi mea e pili ana.

I kēlā manawa, ua hoʻohana mākou i kahi hui o 10 mau nodes data me ka ElasticSearch version 5.5.2 me nā hoʻonohonoho kuhikuhi maʻamau e mālama i nā lāʻau. Ua hoʻokomoʻia ma mua o hoʻokahi makahiki i hala aku nei ma keʻano he hopena kaulana a me ke kumukūʻai: a laila,ʻaʻole nui ka holoʻana o nā lāʻau,ʻaʻohe mea e hiki mai ai me nā hoʻonohonoho maʻamau. 

Ua hoʻolako ʻia e Logstash ka hoʻoponopono ʻana i nā lāʻau e hiki mai ana ma nā awa like ʻole ma nā ʻelima ElasticSearch coordinators. Hoʻokahi papa kuhikuhi, me ka nānā ʻole i ka nui, ʻelima shards. Ua hoʻonohonoho ʻia ka hoʻololi ʻana i kēlā me kēia hola a me kēlā me kēia lā, ʻo ia hoʻi, ma kahi o 100 mau shards hou i ʻike ʻia i ka hui i kēlā me kēia hola. ʻOiai ʻaʻole nui nā lāʻau, ua hoʻopili maikaʻi ka hui a ʻaʻohe mea i nānā i kāna mau hoʻonohonoho. 

ʻO nā pilikia o ka ulu wikiwiki

Ua ulu wikiwiki ka nui o nā lāʻau i hana ʻia, ʻoiai ʻelua mau kaʻina i hoʻopā kekahi i kekahi. Ma kekahiʻaoʻao, ua ulu ka nui o nā mea hoʻohana i ka lawelawe. Ma ka ʻaoʻao ʻē aʻe, hoʻomaka mākou e hoʻololi ikaika i kahi hale hana microservice, e ʻike ana i kā mākou monoliths kahiko ma C # a me Python. ʻO kekahi mau kaukani microservices hou i hoʻololi i nā ʻāpana o ka monolith i hoʻonui nui i nā lāʻau no ka hui ʻoihana. 

ʻO ka scaling ka mea i alakaʻi iā mākou i kahi i lilo ai ka puʻupuʻu i mea hiki ʻole ke hoʻokele. I ka wā i hoʻomaka ai nā lāʻau e hōʻea i ka helu o 20 tausani mau leka i kēlā me kēia kekona, ua hoʻonui ka hoʻololi pinepine ʻole i ka helu o nā shards i 6 tausani, a ʻoi aku ma mua o 600 shards i kēlā me kēia node. 

Ua alakaʻi kēia i nā pilikia me ka hoʻokaʻawale ʻana o RAM, a i ka wā i hāʻule ai kahi node, ua hoʻomaka nā ʻāpana āpau e neʻe i ka manawa like, e hoʻonui ana i ke kaʻa a me ka hoʻouka ʻana i nā nodes ʻē aʻe, kahi i hiki ʻole ai ke kākau i ka ʻikepili i ka hui. A i loko o kēia manawa ua waiho ʻia mākou me ka ʻole o nā lāʻau. A inā he pilikia me ke kikowaena, ua nalowale mākou i ka 1/10 o ka hui. Hoʻohui ka nui o nā indexes liʻiliʻi i ka paʻakikī.

Me ka ʻole o nā lāʻau, ʻaʻole mākou i maopopo i ke kumu o ka hanana a hiki koke a ma hope paha ke hele hou i ka rake like, a ma ka manaʻo o kā mākou hui ʻaʻole i ʻae ʻia kēia, no ka mea, ua hoʻolālā ʻia kā mākou hana hana a pau e hana ʻē aʻe - mai hana hou. nā pilikia like. No ka hana ʻana i kēia, pono mākou i ka piha piha o nā lāʻau a me kā lākou lawe ʻana kokoke i ka manawa maoli, no ka mea, ua nānā ka hui o nā ʻenekini hana i nā mākaʻikaʻi ʻaʻole wale mai nā metric, akā mai nā lāʻau pū kekahi. No ka hoʻomaopopo ʻana i ka nui o ka pilikia, i kēlā manawa ka nui o ka nui o nā lāʻau ma kahi o 2 TB i kēlā me kēia lā. 

Hoʻokumu mākou i kahi pahuhopu e hoʻopau loa i ka nalowale o nā lāʻau a hoʻemi i ka manawa o kā lākou hāʻawi ʻana i ka hui ELK i ka lōʻihi o 15 mau minuke i ka wā force majeure (ua hilinaʻi mākou ma hope o kēia helu ma ke ʻano he KPI kūloko).

ʻO ka mīkini hoʻololi hou a me nā node wela wela

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Ua hoʻomaka mākou i ka hoʻololi ʻana i ka puʻupuʻu ma ka hoʻonui ʻana i ka mana ElasticSearch mai 5.5.2 a i 6.4.3. Ua make hou kā mākou pūʻulu mana 5, a ua hoʻoholo mākou e hoʻopau iā ia a hōʻano hou iā ia - ʻaʻohe mau lāʻau. No laila ua hana mākou i kēia hoʻololi i loko o ʻelua mau hola.

ʻO ka hoʻololi nui loa i kēia manawa ʻo ia ka hoʻokō ʻana o Apache Kafka ma ʻekolu mau nodes me kahi mea hoʻonohonoho ma ke ʻano he pale waena. Ua hoʻopakele ka mea hoʻolaha leka iā mākou mai ka nalowale ʻana i nā lāʻau i ka wā pilikia me ElasticSearch. I ka manawa like, ua hoʻohui mākou i nā nodes 2 i ka hui a hoʻololi i kahi hoʻolālā wela wela me ʻekolu mau "wela" nodes i loaʻa i nā ʻāpana like ʻole i ke kikowaena data. Hoʻihoʻi hou mākou i nā lāʻau iā lākou me ka hoʻohana ʻana i kahi mask ʻaʻole pono e nalo ma lalo o nā kūlana - nginx, a me nā log error application. Hoʻouna ʻia nā lāʻau liʻiliʻi i nā nodes i koe - debug, warning, etc., a ma hope o 24 mau hola, ua hoʻoili ʻia nā lāʻau "nui" mai nā nodes "wela".

I ʻole e hoʻonui i ka helu o nā indexes liʻiliʻi, ua hoʻololi mākou mai ka hoʻololi ʻana i ka manawa i ka mīkini rollover. Nui ka ʻike ma nā ʻaha kūkā ʻaʻole hiki ke hilinaʻi ʻia ka huli ʻana ma ka nui o ka index, no laila ua hoʻoholo mākou e hoʻohana i ka rotation e ka helu o nā palapala i ka index. Hoʻopili mākou i kēlā me kēia papa kuhikuhi a hoʻopaʻa i ka helu o nā palapala ma hope o ka hana ʻana o ka huli ʻana. No laila, ua hōʻea mākou i ka nui shard maikaʻi loa - ʻaʻole iʻoi aku ma mua o 50 GB. 

ʻO ka hōʻuluʻulu manaʻo

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Eia naʻe, ʻaʻole mākou i hoʻopau loa i nā pilikia. ʻO ka mea pōʻino, ua ʻike ʻia nā ʻōlelo kuhikuhi liʻiliʻi: ʻaʻole lākou i hiki i ka leo i ʻōlelo ʻia, ʻaʻole i hoʻololi ʻia, a ua holoi ʻia e ka hoʻomaʻemaʻe honua ʻana o nā kuhikuhi i ʻoi aku ma mua o ʻekolu lā, no ka mea, ua wehe mākou i ka rotation ma ka lā. Ua alakaʻi kēia i ka nalowale o ka ʻikepili ma muli o ka nalowale loa ʻana o ka index mai ka puʻupuʻu, a ʻo ka hoʻāʻo ʻana e kākau i kahi papa kuhikuhi ʻole i uhaʻi i ka loiloi o ka curator a mākou i hoʻohana ai no ka hoʻokele. Ua hoʻololi ʻia ʻo Alias ​​no ka kākau ʻana i kahi index a uhaʻi i ka loiloi rollover, e hoʻoulu ai i ka ulu ʻole o kekahi mau kuhikuhi a hiki i 600 GB. 

No ka laʻana, no ka config rotation:

с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

Inā ʻaʻohe inoa hoʻololi, ua hewa:

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

Ua haʻalele mākou i ka hoʻonā i kēia pilikia no ka ʻike hou aʻe a lawe i kahi pilikia ʻē aʻe: ua hoʻololi mākou i ka loiloi huki o Logstash, e hana ana i nā lāʻau e hiki mai ana (e wehe i ka ʻike pono ʻole a me ka hoʻonui ʻana). Hoʻokomo mākou iā ia i loko o ka docker, a mākou e hoʻomaka ai ma o docker-compose, a ua kau pū mākou i ka logstash-exporter ma laila, e hoʻouna ana i nā metrics iā Prometheus no ka nānā ʻana i ke kahawai log. Ma kēia ala mākou i hāʻawi ai iā mākou iho i ka manawa e hoʻololi mālie i ka helu o nā manawa logstash kuleana no ka hana ʻana i kēlā me kēia ʻano log.

ʻOiai mākou e hoʻomaikaʻi ana i ka pūʻulu, ua hoʻonui ka huakaʻi o cian.ru i 12,8 miliona mau mea hoʻohana kūʻokoʻa i kēlā me kēia mahina. ʻO ka hopena, uaʻikeʻia heʻano liʻiliʻi kā mākou hoʻololiʻana i nā loli o ka hanaʻana, a uaʻike mākou i kaʻoiaʻiʻoʻaʻole hiki i nā nodes "mahana" ke hoʻopaʻa i ka ukana a lohi i ka laweʻana i nā lāʻau. Ua loaʻa iā mākou ka ʻikepili "wela" me ka ʻole o ka hāʻule ʻana, akā pono mākou e komo i ka hāʻawi ʻana i ke koena a hana i kahi rollover manual i mea e puʻunaue like ai i nā kuhikuhi. 

I ka manawa like, ua paʻakikī ka scaling a me ka hoʻololi ʻana i nā hoʻonohonoho o nā manawa logstash i loko o ka pūʻulu i ka ʻoiaʻiʻo he docker-compose kūloko, a ua hana ʻia nā hana āpau me ka lima (e hoʻohui i nā hopena hou, pono e hele lima i nā mea āpau. nā kikowaena a hana docker-compose up -d ma nā wahi āpau).

Hoʻohele hou ʻana i ka lāʻau

I ka mahina o Kepakemapa o kēia makahiki, ke ʻoki mau nei mākou i ka monolith, ke piʻi nei ka ukana ma ka puʻupuʻu, a ʻo ke kahe ʻana o nā lāʻau e kokoke ana i 30 tausani mau leka i kēlā me kēia kekona. 

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Ua hoʻomaka mākou i ka ʻike hou aʻe me ka hoʻonui ʻana i ka ʻenehana. Ua hoʻololi mākou mai ʻelima coordinators i ʻekolu, hoʻololi i nā nodes ʻikepili a lanakila ma ke ʻano o ke kālā a me ka wahi mālama. No nā nodes, hoʻohana mākou i ʻelua hoʻonohonoho: 

  • No nā node "wela": E3-1270 v6 / 960Gb SSD / 32 Gb x 3 x 2 (3 no Hot1 a me 3 no Hot2).
  • No nā node "mahana": E3-1230 v6 / 4Tb SSD / 32 Gb x 4.

Ma kēia ʻike, hoʻoneʻe mākou i ka papa kuhikuhi me nā logs komo o nā microservices, e lawe ana i ka wahi like me nā log nginx mua, i ka hui ʻelua o ʻekolu mau nodes "wela". Ke mālama nei mākou i nā ʻikepili ma nā nodes "wela" no 20 mau hola, a laila e hoʻololi iā lākou i nā nodes "mahana" i ke koena o nā lāʻau. 

Ua hoʻoponopono mākou i ka pilikia o ka nalo ʻana o nā kuhikuhi liʻiliʻi ma o ka hoʻonohonoho hou ʻana i kā lākou hoʻololi. I kēia manawa, hoʻololi ʻia nā kuhikuhi i kēlā me kēia 23 mau hola, ʻoiai inā he liʻiliʻi ka ʻikepili ma laila. Ua hoʻonui iki kēia i ka helu o nā shards (aia ma kahi o 800 o lākou), akā mai ka manaʻo o ka hana puʻupuʻu e ʻae ʻia. 

ʻO ka hopena, aia ʻeono mau "wela" a ʻehā wale nō "mahana" nodes i loko o ka pūpū. ʻO kēia ke kumu o ka lohi iki i nā noi i nā manawa lōʻihi, akā ʻo ka hoʻonui ʻana i ka helu o nā nodes i ka wā e hiki mai ana e hoʻoponopono i kēia pilikia.

Ua hoʻoponopono pū kēia ʻike i ka pilikia o ka nele o ka scaling semi-aunoa. No ka hana ʻana i kēia, ua hoʻonohonoho mākou i kahi ʻōnaehana Nomad cluster - e like me ka mea a mākou i kau mua ai i ka hana. I kēia manawa, ʻaʻole loli ka nui o Logstash ma muli o ka ukana, akā e hele mākou i kēia.

Pehea mākou ma CIAN i hoʻokaʻawale i nā terabytes o nā lāʻau

Nā papa no ka wā e hiki mai ana

ʻO nā unahi hoʻonohonoho i hoʻokō pono ʻia, a i kēia manawa ke mālama nei mākou i ka 13,3 TB o ka ʻikepili - nā lāʻau āpau no 4 mau lā, pono ia no ka nānā ʻana i nā makaʻala. Hoʻololi mākou i kekahi o nā lāʻau i nā metric, a mākou e hoʻohui ai i ka Graphite. I mea e maʻalahi ai ka hana a nā ʻenekinia, loaʻa iā mākou nā anana no ka hui ʻenehana a me nā palapala no ka hoʻoponopono semi-aunoa o nā pilikia maʻamau. Ma hope o ka hoʻonui ʻana i ka helu o nā nodes data, i hoʻolālā ʻia no ka makahiki aʻe, e hoʻololi mākou i ka mālama ʻikepili mai 4 a 7 mau lā. E lawa kēia no ka hana hana, ʻoiai ke hoʻāʻo mau nei mākou e noiʻi i nā hanana i ka wā hiki loa, a no ka hoʻokolokolo lōʻihi aia nā ʻikepili telemetry. 

I ʻOkakopa 2019, ua hoʻonui ʻia ke kaʻa i cian.ru i 15,3 miliona mau mea hoʻohana kūʻokoʻa i kēlā me kēia mahina. Ua lilo kēia i ho'āʻo koʻikoʻi o ka hoʻonā hale kūkulu no ka lawe ʻana i nā lāʻau. 

I kēia manawa ke hoʻomākaukau nei mākou e hōʻano hou i ka ElasticSearch i ka mana 7. Eia naʻe, no kēia mea, pono mākou e hoʻonui i ka palapala ʻāina o nā helu helu he nui ma ElasticSearch, ʻoiai ua neʻe lākou mai ka mana 5.5 a ua haʻi ʻia ʻo ia ka mea i hoʻopau ʻia ma ka mana 6 (ʻaʻole lākou i loaʻa i ka mana. 7). ʻO ke ʻano kēia i ka wā o ka hoʻoponopono hou ʻana e loaʻa maoli kekahi ʻano force majeure, e waiho iā mākou me ka ʻole o nā lāʻau i ka wā e hoʻoholo ʻia ai ka pilikia. ʻO ka mana 7, ke nānā nui nei mākou iā Kibana me ka hoʻomaikaʻi ʻana i ka interface a me nā kānana hou. 

Ua hoʻokō mākou i kā mākou pahuhopu nui: ua ho'ōki mākou i ka nalo ʻana i nā lāʻau a hoʻemi i ka manawa haʻahaʻa o ka pūʻulu ʻōnaehana mai ka 2-3 ulia i kēlā me kēia pule a i ʻelua mau hola o ka hana mālama i kēlā me kēia mahina. ʻO kēia mau hana a pau i ka hanaʻana ua aneane hikiʻole keʻikeʻia. Eia nō naʻe, i kēia manawa hiki iā mākou ke hoʻoholo pololei i ka mea e hana nei me kā mākou lawelawe, hiki iā mākou ke hana wikiwiki i ke ʻano mālie a ʻaʻole hopohopo e nalowale nā ​​​​log. Ma keʻano laulā, ua māʻona mākou, hauʻoli a hoʻomākaukau no nā hana hou, a mākou e kamaʻilio ai ma hope.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka