Top fakapov Cyan

Top fakapov Cyan

Bon nan tout! 

Non mwen se Nikita, mwen se lidè ekip ekip jeni Cian. Youn nan responsablite mwen nan konpayi an se diminye kantite ensidan ki gen rapò ak enfrastrikti nan pwodiksyon a zewo.
Ki sa ki pral diskite anba a te pote nou anpil doulè, ak objektif atik sa a se anpeche lòt moun repete erè nou yo oswa omwen minimize enpak yo. 

Preamble

Yon bon bout tan de sa, lè Cian te konpoze de monolit, epi pa t gen okenn sijesyon nan mikwosèvis ankò, nou mezire disponiblite a nan yon resous lè nou tcheke 3-5 paj. 

Yo reponn - tout bagay anfòm, si yo pa reponn pou yon tan long - vijilan. Konbyen tan yo te dwe nan travay pou li te konsidere kòm yon ensidan te deside pa moun nan reyinyon yo. Yon ekip enjenyè te toujou patisipe nan envestigasyon ensidan an. Lè ankèt la te fini, yo te ekri yon postmortem - yon kalite rapò pa imèl nan fòma a: sa ki te pase, konbyen tan li te dire, sa nou te fè nan moman sa a, ki sa nou pral fè nan lavni. 

Paj prensipal yo nan sit la oswa ki jan nou konprann ke nou te frape anba a

 
Yo nan lòd yo yon jan kanmenm konprann priyorite nan erè a, nou te idantifye paj sit ki pi kritik pou fonksyonalite biznis. Sèvi ak yo, nou konte kantite demann ki gen siksè / san siksè ak timeout. Men ki jan nou mezire uptime. 

Ann di nou te jwenn ke gen yon kantite super-enpòtan seksyon nan sit la ki responsab pou sèvis prensipal la - rechèch ak soumèt piblisite. Si kantite demann ki echwe depase 1%, sa a se yon ensidan kritik. Si nan 15 minit pandan prime time to erè a depase 0,1%, Lè sa a, sa a konsidere tou kòm yon ensidan kritik. Kritè sa yo kouvri pifò ensidan yo; rès yo depase sijè ki abòde lan atik sa a.

Top fakapov Cyan

Top pi bon ensidan Cyan

Se konsa, nou te definitivman aprann detèmine lefèt ke yon ensidan te rive. 

Koulye a, chak ensidan yo dekri an detay epi yo reflete nan sezon Jira a. By wout la: pou sa a nou te kòmanse yon pwojè separe, yo rele li FAIL - sèlman epik ka kreye nan li. 

Si ou kolekte tout echèk yo pandan kèk ane ki sot pase yo, lidè yo se: 

  • ensidan ki gen rapò ak mssql;
  • ensidan ki te koze pa faktè ekstèn;
  • erè admin.

Ann gade nan plis detay nan erè administratè yo, osi byen ke kèk lòt echèk enteresan.

Senkyèm plas - "Mete bagay yo nan lòd nan dns la"

Se te yon madi tanpèt. Nou deside retabli lòd nan gwoup dns la. 

Mwen te vle transfere entèn DNS serveurs de Bind pou powerdns, allocation nèt separe serveurs pou sa, kote pa gen anyen eksepte DNS. 

Nou te plase yon sèvè DNS nan chak kote DC nou yo, epi moman sa a te rive pou n deplase zòn yo soti nan Bind a Powerdns epi chanje enfrastrikti a nan nouvo sèvè. 

Nan mitan mouvman an, nan tout serveurs yo ki te espesifye nan kachèt lokal mare sou tout serveurs, se sèlman youn ki rete, ki te nan sant done a nan Saint Petersburg. DC sa a te okòmansman te deklare kòm ki pa kritik pou nou, men toudenkou te vin tounen yon sèl pwen nan echèk.
Li te pandan peryòd sa a nan demenajman ke kanal la ant Moskou ak Saint Petersburg tonbe atè. Nou te aktyèlman kite san DNS pou senk minit epi yo te tounen moute lè hoster la ranje pwoblèm nan. 

Konklizyon:

Si pi bonè nou te neglije faktè ekstèn pandan preparasyon pou travay, kounye a yo tou enkli nan lis la nan sa nou ap prepare pou. Epi kounye a nou fè efò asire ke tout eleman yo rezève n-2, epi pandan travay la nou ka bese nivo sa a nan n-1.

  • Lè w ap prepare yon plan aksyon, make pwen kote sèvis la ka echwe, epi reflechi nan yon senaryo kote tout bagay te ale "soti nan move vin pi mal" davans.
  • Distribye sèvè DNS entèn yo atravè diferan jeolokalizasyon / sant done / etajè / switch / antre.
  • Sou chak sèvè, enstale yon sèvè DNS lokal kachèt, ki redireksyon demann nan sèvè prensipal DNS yo, epi si li pa disponib, li pral reponn nan kachèt la. 

Katriyèm plas - "Mete bagay yo nan lòd nan Nginx"

Yon bon jou, ekip nou an te deside ke "nou te gen ase nan sa a," ak pwosesis la nan refactoring konfigirasyon nginx te kòmanse. Objektif prensipal la se pote konfigirasyon yo nan yon estrikti entwisyon. Précédemment, tout bagay te "istorikman etabli" epi yo pa te pote okenn lojik. Koulye a, chak server_name te deplase nan yon dosye ki gen menm non ak tout konfigirasyon yo te distribye nan dosye. By wout la, konfigirasyon an gen 253949 liy oswa 7836520 karaktè epi li pran prèske 7 megabyte. Pi wo nivo estrikti: 

Nginx estrikti

├── access
│   ├── allow.list
...
│   └── whitelist.conf
├── geobase
│   ├── exclude.conf
...
│   └── geo_ip_to_region_id.conf
├── geodb
│   ├── GeoIP.dat
│   ├── GeoIP2-Country.mmdb
│   └── GeoLiteCity.dat
├── inc
│   ├── error.inc
...
│   └── proxy.inc
├── lists.d
│   ├── bot.conf
...
│   ├── dynamic
│   └── geo.conf
├── lua
│   ├── cookie.lua
│   ├── log
│   │   └── log.lua
│   ├── logics
│   │   ├── include.lua
│   │   ├── ...
│   │   └── utils.lua
│   └── prom
│       ├── stats.lua
│       └── stats_prometheus.lua
├── map.d
│   ├── access.conf
│   ├── .. 
│   └── zones.conf
├── nginx.conf
├── robots.txt
├── server.d
│   ├── cian.ru
│   │   ├── cian.ru.conf
│   │   ├── ...
│   │   └── my.cian.ru.conf
├── service.d
│   ├── ...
│   └── status.conf
└── upstream.d
    ├── cian-mcs.conf
    ├── ...
    └── wafserver.conf

Li te vin pi bon anpil, men nan pwosesis pou chanje non ak distribye konfigirasyon, kèk nan yo te gen ekstansyon an mal epi yo pa te enkli nan enkli *.conf direktiv la. Kòm yon rezilta, kèk lame te vin pa disponib epi yo te retounen 301 nan paj prensipal la. Akòz lefèt ke kòd repons lan pa t '5xx/4xx, sa a pa te remake imedyatman, men sèlman nan maten an. Apre sa, nou te kòmanse ekri tès pou tcheke konpozan enfrastrikti.

Konklizyon: 

  • Estrikti konfigirasyon ou yo kòrèkteman (pa sèlman nginx) epi reflechi nan estrikti a nan yon etap bonè nan pwojè a. Nan fason sa a ou pral fè yo pi konprann nan ekip la, ki an vire ap diminye TTM.
  • Ekri tès pou kèk konpozan enfrastrikti. Pa egzanp: tcheke si tout non sèvè kle bay estati kòrèk + kò repons. Li pral ase jis gen kèk scripts nan men ki tcheke fonksyon debaz yo nan eleman an, se konsa yo pa fòlman sonje nan 3 a.m. ki lòt bagay bezwen tcheke. 

Twazyèm plas - "Toudenkou kouri soti nan espas nan Cassandra"

Done yo te grandi piti piti, ak tout bagay te amann jouk moman sa a lè reparasyon nan gwo kaspas yo te kòmanse echwe nan gwoup Cassandra a, paske konpaksyon pa t 'kapab travay sou yo. 

Yon jou tanpèt grap la prèske tounen yon joumou, sètadi:

  • te gen apeprè 20% nan espas total ki rete nan gwoup la;
  • Li enposib totalman ajoute nœuds, paske netwayaj pa ale nan apre yo fin ajoute yon ne akòz mank de espas sou patisyon yo;
  • pwodiktivite piti piti tonbe paske konpaksyon pa travay; 
  • Gwoup la nan mòd ijans.

Top fakapov Cyan

Sòti - nou te ajoute 5 lòt nœuds san netwayaj, apre sa nou te kòmanse sistematik retire yo nan gwoup la epi re-antre yo, tankou nœuds vid ki te kouri nan espas. Anpil plis tan te pase pase nou ta renmen. Te gen yon risk pou indisponibilite pasyèl oswa konplè nan gwoup la. 

Konklizyon:

  • Sou tout sèvè Cassandra, pa plis pase 60% nan espas ki la sou chak patisyon yo ta dwe okipe. 
  • Yo ta dwe chaje nan pa plis pase 50% CPU.
  • Ou pa ta dwe bliye sou planifikasyon kapasite epi ou bezwen reflechi sou chak eleman, ki baze sou spesifik li yo.
  • Plis nœuds nan gwoup la, pi bon an. Sèvè ki gen yon ti kantite done yo twò chaje pi vit, epi yon gwoup konsa pi fasil pou reviv. 

Dezyèm plas - "Done yo disparèt nan depo kle-valè konsil"

Pou dekouvèt sèvis, nou, tankou anpil moun, sèvi ak konsil. Men, nou menm tou nou itilize kle-valè li yo pou layout ble-vèt nan monolit la. Li estoke enfòmasyon sou en aktif ak inaktif, ki chanje kote pandan deplwaman. Pou rezon sa a, yo te ekri yon sèvis deplwaman ki te kominike avèk KV. Nan kèk pwen, done ki soti nan KV te disparèt. Retabli nan memwa, men ak yon kantite erè. Kòm yon rezilta, pandan Upload la, chaj la sou upstreams yo te distribye inegalman, epi nou te resevwa anpil erè 502 akòz backends yo te twò chaje sou CPU a. Kòm rezilta, nou te deplase soti nan konsil KV nan postgres, kote li pa tèlman fasil pou retire yo.  

Konklizyon:

  • Sèvis san okenn otorizasyon pa ta dwe genyen done kritik pou operasyon sit la. Pou egzanp, si ou pa gen otorizasyon nan ES, li ta pi bon pou refize aksè nan nivo rezo a soti nan tout kote li pa nesesè, kite sèlman sa ki nesesè yo, epi tou mete action.destructive_requires_name: vre.
  • Pratike mekanis backup ak rekiperasyon ou an davans. Pou egzanp, fè yon script davans (pa egzanp, nan python) ki ka backup ak restore.

Premye plas - "Kapitèn Unobvious" 

Nan kèk pwen, nou remake yon distribisyon inegal nan chaj sou nginx en nan ka kote te gen 10 + sèvè nan backend la. Akòz lefèt ke round-robin te voye demann soti nan 1ye jiska dènye a en nan lòd, ak chak rechaj nginx te kòmanse sou, premye upstreams yo te toujou resevwa plis demann pase rès la. Kòm yon rezilta, yo te travay pi dousman ak tout sit la soufri. Sa a te vin de pli zan pli aparan kòm kantite trafik ogmante. Senpleman mete ajou nginx pou pèmèt o aza pa t 'travay - nou bezwen refè yon pakèt nan kòd lua ki pa t 'dekole sou vèsyon 1.15 (nan moman sa a). Nou te oblije patch nginx nou an 1.14.2, entwodwi sipò o aza nan li. Sa a rezoud pwoblèm nan. Ensèk sa a genyen kategori "Kapitèn ki pa evidan".

Konklizyon:

Li te trè enteresan ak enteresan yo eksplore ensèk sa a). 

  • Òganize siveyans ou pou li ede w jwenn fluctuations sa yo byen vit. Pou egzanp, ou ka itilize ELK pou kontwole rps sou chak backend nan chak en, kontwole tan repons yo nan pwen de vi nan nginx. Nan ka sa a, sa te ede nou idantifye pwoblèm nan. 

Kòm yon rezilta, pi fò nan echèk yo te kapab evite ak yon apwòch plis scrupulous nan sa ou t ap fè. Nou dwe toujou sonje lwa Murphy a: Nenpòt bagay ki ka ale mal pral ale mal, epi bati eleman ki baze sou li. 

Sous: www.habr.com

Add nouvo kòmantè