Top fakapov Cyan

Top fakapov Cyan

Tsara ihany ho an'ny rehetra! 

Nikita no anarako, mpitarika ny ekipan'ny ekipa injeniera Cian aho. Anisan'ny andraikitro ao amin'ny orinasa ny fampihenana ny isan'ny tranga mifandraika amin'ny fotodrafitrasa amin'ny famokarana ho aotra.
Ny zavatra horesahina etsy ambany dia nitondra fanaintainana be ho antsika, ary ny tanjon'ity lahatsoratra ity dia ny hisakanana ny hafa tsy hamerina ny fahadisoantsika na farafaharatsiny hanamaivana ny fiantraikany. 

sasin

Taloha ela be, raha nisy monoliths i Cian, ary tsy mbola nisy tsipika momba ny microservices, dia nandrefy ny fisian'ny loharano izahay tamin'ny fanamarinana pejy 3-5. 

Mamaly izy ireo - tsara ny zava-drehetra, raha tsy mamaly ela izy ireo - mailo. Hafiriana no tsy maintsy nitsaharan’izy ireo tamin’ny asany vao heverina ho zava-nitranga no nanapahan’ny olona nivory. Nisy ekipa injeniera nandray anjara hatrany tamin’ny fanadihadiana momba ity tranga ity. Rehefa vita ny fanadihadiana, dia nanoratra postmortem izy ireo - karazana tatitra amin'ny mailaka amin'ny endrika: inona no nitranga, naharitra hafiriana, inona no nataonay tamin'izao fotoana izao, inona no hataonay amin'ny ho avy. 

Ny pejy lehibe amin'ny tranokala na ny fomba fahafantarantsika fa tonga any amin'ny farany ambany isika

 
Mba hahatakarana ny laharam-pahamehana amin'ny lesoka, dia nofantarinay ny pejy tranonkala manakiana indrindra ho an'ny fampandehanan-draharaha. Amin'ny fampiasana azy ireo dia manisa ny isan'ny fangatahana nahomby/tsy nahomby sy fotoana fiatoana. Toy izao no fandrefesana ny ora fiasana. 

Andao atao hoe hitanay fa misy fizarana tena manan-danja amin'ny tranokala izay tompon'andraikitra amin'ny serivisy lehibe - fitadiavana sy fandefasana dokam-barotra. Raha mihoatra ny 1% ny isan'ny fangatahana tsy nahomby, dia trangan-javatra sarotra izany. Raha ao anatin'ny 15 minitra mandritra ny fotoana voalohany dia mihoatra ny 0,1% ny taham-pahadisoana, dia heverina ho trangan-javatra sarotra ihany koa izany. Ireo fepetra ireo dia mandrakotra ny ankamaroan'ny zava-nitranga; ny ambiny dia ivelan'ny faritry ity lahatsoratra ity.

Top fakapov Cyan

Ny zava-nitranga tsara indrindra Cyan

Noho izany, tena nianatra izahay mba hamaritana ny zava-nitranga. 

Ankehitriny ny zava-nitranga rehetra dia voafaritra amin'ny antsipiriany ary hita taratra ao amin'ny epic Jira. Teny an-dalana: noho izany dia nanomboka tetikasa misaraka, antsoina hoe FAIL - epics ihany no azo noforonina ao. 

Raha manangona ny tsy fahombiazana rehetra ianao tato anatin'ny taona vitsivitsy, ny mpitarika dia: 

  • tranga mifandraika amin'ny mssql;
  • trangan-javatra vokatry ny anton-javatra ivelany;
  • lesoka admin.

Andeha hojerentsika amin'ny antsipiriany ny fahadisoan'ny mpitantana, ary koa ny tsy fahombiazana mahaliana hafa.

Toerana fahadimy - "Mametraka zavatra amin'ny DNS"

Talata feno tafio-drivotra tamin’izay. Nanapa-kevitra ny hamerina ny filaminana ao amin'ny cluster DNS izahay. 

Te-hamindra mpizara DNS anatiny aho avy amin'ny fatorana mankany amin'ny powerdns, manome serivisy misaraka tanteraka amin'izany, izay tsy misy afa-tsy DNS. 

Nametraka mpizara DNS iray isaky ny toerana misy ny DC izahay, ary tonga ny fotoana hamindrana ireo faritra avy amin'ny fatorana mankany amin'ny powerdns ary hanova ny fotodrafitrasa ho mpizara vaovao. 

Ao anatin'ny hetsika, amin'ireo mpizara rehetra izay voatondro ao amin'ny caching eo an-toerana dia mifatotra amin'ny mpizara rehetra, iray ihany no tavela, izay tao amin'ny foibe data ao St. Petersburg. Ity DC ity dia nambara tamin'ny voalohany fa tsy mitsikera ho antsika, saingy lasa teboka tokana tsy fahombiazana tampoka.
Nandritra io vanim-potoana famindrana toerana io no nianjera ny lakandrano eo anelanelan'i Moskoa sy Saint-Pétersbourg. Navela tsy nisy DNS nandritra ny dimy minitra izahay ary niverina rehefa nandamina ny olana ny mpampiantrano. 

fehin-kevitra:

Raha teo aloha isika dia nanao tsirambina ny anton-javatra ivelany nandritra ny fiomanana ho amin'ny asa, ankehitriny dia tafiditra ao anatin'ny lisitry ny zavatra omanintsika koa izy ireo. Ary ankehitriny dia miezaka izahay mba hahazoana antoka fa ny singa rehetra dia voatokana n-2, ary mandritra ny asa dia afaka mampidina ity ambaratonga ity ho n-1.

  • Rehefa manangana drafitry ny hetsika dia mariho ireo teboka mety hahomby amin'ny serivisy, ary eritrereto mialoha ny toe-javatra iray izay nandehanan'ny zava-drehetra "avy amin'ny ratsy ho ratsy kokoa".
  • Zarao ny mpizara DNS anatiny amin'ny toerana samihafa / ivontoerana data / racks / switch / inputs.
  • Amin'ny mpizara tsirairay, mametraka mpizara DNS caching eo an-toerana, izay mamindra ny fangatahana any amin'ireo mpizara DNS lehibe, ary raha tsy misy izany dia hamaly avy amin'ny cache. 

Toerana fahefatra - "Manadio ny zavatra ao amin'ny Nginx"

Indray andro, nanapa-kevitra ny ekipanay fa "efa ampy izahay tamin'izany", ary nanomboka ny dingan'ny fanavaozana ny config nginx. Ny tena tanjona dia ny hitondra ny configs ho intuitive rafitra. Teo aloha dia "niorina ara-tantara" ny zava-drehetra ary tsy nitondra lojika. Ankehitriny ny server_name tsirairay dia nafindra tany amin'ny rakitra mitovy anarana ary ny configs rehetra dia nozaraina tao anaty lahatahiry. Raha ny marina, ny config dia misy tsipika 253949 na 7836520 tarehintsoratra ary mahatratra 7 megabytes. Firafitra ambony indrindra: 

Ny rafitra Nginx

├── 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

Nanjary tsara kokoa izany, saingy tamin'ny fanovana anarana sy fizarana ny config dia nisy tamin'izy ireo no diso fanitarana ary tsy tafiditra tao amin'ny * .conf directive. Vokatr'izany dia lasa tsy nisy ny mpampiantrano sasany ary namerina ny 301 ho amin'ny pejy fototra. Noho ny tsy 5xx/4xx ny kaody valiny dia tsy tsikaritra avy hatrany izany fa ny maraina ihany. Taorian'izay dia nanomboka nanoratra andrana izahay hijerena ireo singa fotodrafitrasa.

fehin-kevitra: 

  • Amboary tsara ny configs anao (fa tsy nginx fotsiny) ary eritrereto ny rafitra amin'ny dingana voalohan'ny tetikasa. Amin'izany fomba izany dia hahatonga azy ireo ho takatry ny ekipa kokoa izy ireo, izay hampihena ny TTM.
  • Manorata fitsapana ho an'ny singa fotodrafitrasa sasany. Ohatra: manamarina fa ny server_name rehetra dia manome ny sata marina + vatana valiny. Ho ampy ny manana script vitsivitsy eo am-pelatanana izay manamarina ny fiasan'ny singa fototra, mba tsy hahatsiaro amin'ny 3 maraina ny zavatra hafa tokony hojerena. 

Toerana fahatelo - “Lany toerana tampoka tao Cassandra”

Nitombo tsy tapaka ny angon-drakitra, ary tsara ny zava-drehetra mandra-pahatongan'ny fotoana nanombohan'ny fanamboarana ireo toerana lehibe tao amin'ny cluster Cassandra, satria tsy afaka niasa tamin'izy ireo ny compaction. 

Indray andro nisy tafio-drivotra saika nivadika ho voatavo ny cluster, izany hoe:

  • eo amin'ny 20% amin'ny totalin'ny habaka tavela ao amin'ny cluster;
  • Tsy azo atao ny manampy nodes feno, satria tsy mandeha ny fanadiovana rehefa avy nampiana node noho ny tsy fahampian'ny toerana eo amin'ny partitions;
  • mihena tsikelikely ny vokatra rehefa tsy mandeha ny fametahana; 
  • Ao amin'ny fomba vonjy maika ny cluster.

Top fakapov Cyan

Mivoaha - nanampy node 5 hafa tsy misy fanadiovana izahay, ary avy eo dia nanomboka nanala azy ireo tao amin'ny cluster izahay ary nampiditra azy ireo indray, toy ny node foana izay lany toerana. Bebe kokoa ny fotoana lany noho izay nirianay. Mety hisy ny tsy fisian'ny ampahany na tanteraka amin'ny cluster. 

fehin-kevitra:

  • Amin'ny mpizara cassandra rehetra dia tsy tokony hihoatra ny 60% ny habaka isaky ny fizarana tsirairay. 
  • Tsy tokony hihoatra ny 50% cpu izy ireo.
  • Tsy tokony hohadinoinao ny momba ny fandrindrana ny fahaiza-manao ary mila mieritreritra izany ho an'ny singa tsirairay, mifototra amin'ny mombamomba azy.
  • Arakaraka ny nodes ao amin'ny cluster no tsara kokoa. Ireo mpizara misy angon-drakitra kely dia be entana haingana kokoa, ary mora kokoa ny hamelona ny cluster toy izany. 

Toerana faharoa - "Nanjavona ny angon-drakitra tao amin'ny fitahirizana sanda manan-danjan'ny consul"

Ho an'ny fitadiavana serivisy, izahay, tahaka ny maro, dia mampiasa consul. Ampiasainay ihany koa anefa ny sanda fototra ho an'ny famolavolana manga-maitso amin'ny monolith. Izy io dia mitahiry vaovao momba ny fiakarana mavitrika sy tsy mavitrika, izay manova toerana mandritra ny fametrahana. Ho an'ity tanjona ity, dia nisy serivisy fampielezam-peo nosoratana izay nifanerasera tamin'ny KV. Nisy fotoana, nanjavona ny angona avy amin'ny KV. Naverina tamin'ny fitadidiana, saingy nisy lesoka maromaro. Vokatr'izany, nandritra ny fampiakarana dia nizara tsy mitovy ny enta-mavesatry ny enta-madinika, ary nahazo fahadisoana 502 maro izahay noho ny fihoaran'ny lamosina amin'ny CPU. Vokatr'izany dia nifindra avy amin'ny consul KV ho any amin'ny postgres izahay, izay tsy mora intsony ny manala azy ireo.  

fehin-kevitra:

  • Ny serivisy tsy misy fanomezan-dàlana dia tsy tokony ahitana angon-drakitra manakiana ny fiasan'ny tranokala. Ohatra, raha tsy manana fanomezan-dàlana ao amin'ny ES ianao, dia tsara kokoa ny mandà ny fidirana amin'ny haavon'ny tambajotra avy any amin'ny toerana rehetra izay tsy ilaina, avelao ny ilaina, ary apetraho koa ny action.destructive_requires_name: marina.
  • Manaova fanazaran-tena mialoha ny backup sy ny fanarenana. Ohatra, manaova script mialoha (ohatra, amin'ny python) izay afaka mamerina sy mamerina.

Ny toerana voalohany - "Kapiteny tsy fantatra" 

Tamin'ny fotoana iray dia nahatsikaritra ny fizarana tsy mitovy amin'ny enta-mavesatra amin'ny nginx ambony izahay raha misy mpizara 10+ ao ambadika. Noho ny fisian'ny round-robin nandefa fangatahana avy amin'ny 1st ka hatramin'ny farany ambony mirindra, ary ny reload nginx tsirairay dia nanomboka indray, ny voalohany ambony dia nahazo fangatahana bebe kokoa noho ny ambiny. Vao mainka nahatsikaritra izany rehefa nitombo ny fifamoivoizana. Tsy nahomby ny fanavaozana ny nginx fotsiny mba hahafahan'ny kisendrasendra - mila averina averina indray ny code lua izay tsy nesorina tamin'ny version 1.15 (tamin'izany fotoana izany). Tsy maintsy nametaka ny nginx 1.14.2 izahay, nampiditra fanohanana kisendrasendra tao anatiny. Namaha ny olana izany. Ity bibikely ity dia nahazo ny sokajy "Kapiteny tsy mazava".

fehin-kevitra:

Tena nahaliana sy nampientam-po ny nandinika an'io bibikely io). 

  • Amboary ny fanaraha-maso anao mba hanampiana anao hahita haingana ny fiovaovan'ny toetr'andro. Ohatra, azonao atao ny mampiasa ELK mba hanaraha-maso ny rps isaky ny lamosin'ny upstream tsirairay, manara-maso ny fotoana famaliany avy amin'ny fomba fijerin'ny nginx. Amin'ity tranga ity, izany dia nanampy anay hamantatra ny olana. 

Vokatr'izany, ny ankamaroan'ny tsy fahombiazana dia azo nosorohana tamin'ny fomba fijery marim-pototra kokoa amin'ny zavatra ataonao. Tsy maintsy tsaroantsika mandrakariva ny lalàn'i Murphy: Na inona na inona mety ho diso dia ho diso, ary manangana singa mifototra amin'izany. 

Source: www.habr.com

Add a comment