Tusmada ugu hooseysa ee Cyan

Tusmada ugu hooseysa ee Cyan

Wacan oo dhan! 

Magacaygu waa Nikita, waxaan ahay hogaamiyaha kooxda ee kooxda injineernimada Cian. Mid ka mid ah mas'uuliyadaha aan ka hayo shirkadda waa inaan yareeyo tirada dhacdooyinka la xiriira kaabayaasha wax soo saarka ilaa eber.
Waxa hoos lagu falanqeyn doono waxa ay nagu keentay xanuun badan, ujeedada maqaalkana waa in aan dadka kale ka ilaalino in ay ku soo noqnoqdaan khaladaadkeena ama ugu yaraan ay yareeyaan saameyntooda. 

Horudhac

Waqti dheer ka hor, markii Cian uu ka kooban yahay monoliths, oo aysan wali jirin tilmaamo adeeg-yaro ah, waxaan ku cabbirnay helitaanka kheyraadka annaga oo hubinayna 3-5 bog. 

Waxay ku jawaabaan - wax walba waa fiican yihiin, haddii aysan ka jawaabin waqti dheer - feejignaan. Intee in le'eg ayay ahayd in ay shaqada ka maqnaadaan si loogu tixgeliyo dhacdo ay dadku ku go'aansadeen shirarka. Koox injineero ah ayaa had iyo jeer ku lug lahaa baaritaanka dhacdada. Markii baaritaanka la dhammeeyay, waxay qoreen postmortem - nooc ka mid ah warbixinta emaylka qaab ahaan: waxa dhacay, intee uu socday, waxa aan sameynay xilligan, waxa aan sameyn doono mustaqbalka. 

Bogagga ugu muhiimsan ee goobta ama sida aan u fahamno inaan ku garaacnay hoosta

 
Si aan si uun u fahano mudnaanta khaladka, waxaanu aqoonsanay boggaga goobta ugu muhiimsan ee shaqaynta ganacsiga. Iyaga oo adeegsanayna, waxaan xisaabineynaa tirada codsiyada lagu guuleystay/guul-darrida iyo waqtiyada. Tani waa sida aan u cabbirno saacadaha shaqada. 

Aynu nidhaahno waxaan ogaanay inay jiraan qaybo badan oo muhiim ah oo ka mid ah goobta kuwaas oo ka mas'uul ah adeegga ugu muhiimsan - raadinta iyo soo gudbinta xayeysiisyada. Haddii tirada codsiyada ee guuldarraystay ay ka badato 1%, tani waa dhacdo halis ah. Haddii 15 daqiiqo gudahood inta lagu jiro wakhtiga ugu muhiimsan uu heerka khaladku ka sarreeyo 0,1%, markaa tani sidoo kale waxaa loo arkaa dhacdo halis ah. Shuruudahani waxay daboolayaan inta badan dhacdooyinka; inta kale waa ka baxsan xadka qodobkan.

Tusmada ugu hooseysa ee Cyan

Tusmada ugu hooseysa ee Cyan

Markaa, waxaan xaqiiqdii baranay inaan ogaano xaqiiqda ah inay dhacdo dhacday. 

Hadda dhacdo kasta si faahfaahsan ayaa loo sharraxay oo waxay ka muuqataa riwaayadda Jira. By habka: tan waxaan u bilownay mashruuc gaar ah, oo loo yaqaan FAIL - kaliya epics ayaa lagu abuuri karaa. 

Haddii aad ururiso dhammaan guuldarrooyinka dhowrkii sano ee la soo dhaafay, hoggaamiyayaasha waa: 

  • mssql dhacdooyinka la xiriira;
  • dhacdooyinka ay sababaan arrimo dibadeed;
  • khaladaadka maamulka.

Aynu si faahfaahsan u eegno khaladaadka maamulayaasha, iyo sidoo kale guuldarrooyinka kale ee xiisaha leh.

Meesha shanaad - "U hagaajinta waxyaabaha DNS"

Waxay ahayd Talaadadii dabaylaha watay. Waxaan go'aansanay inaan dib u soo celino nidaamka kutlada DNS. 

Waxaan rabay inaan u wareejiyo server-yada DNS gudaha ee ku xiran powerdns, anigoo u qoondeynaya servero kala duwan tan, halkaasoo aysan jirin wax aan ahayn DNS. 

Waxaan dhignay hal server oo DNS ah goob kasta oo ka mid ah DC-yadayada, waxaana la gaadhay waqtigii laga rari lahaa aagagga xidhidhka ilaa powerdns oo aan kaabeyaasha u beddeli lahayn adeegayaal cusub. 

Dhexdhexaadinta dhaqdhaqaaqa, dhammaan server-yada lagu qeexay khasnadaha maxaliga ah ee ku xiran dhammaan server-yada, kaliya hal ayaa hadhay, kaas oo ku yaal xarunta xogta ee St. Petersburg. DC-gan waxa markii hore lagu dhawaaqay in aanu ahayn mid anaga naqdiyay, balse waxa uu si lama filaan ah u noqday hal dhibic oo fashil ah.
Waxay ahayd muddadan guuritaanka ah markii uu dumay kanaalka u dhexeeya Moscow iyo St. Petersburg. Dhab ahaantii waxaa nalooga tagay DNS la'aan shan daqiiqo oo dib ayaan u kacnay markii martigeliyaha uu hagaajiyay dhibaatada. 

Gabagabo:

Haddii aan horay u dayacnay arrimo dibadda ah inta lagu jiro diyaarinta shaqada, hadda waxay sidoo kale ku jiraan liiska waxa aan u diyaarinayno. Oo hadda waxaan ku dadaaleynaa in aan hubinno in dhammaan qaybaha ay ku jiraan n-2, iyo inta lagu jiro shaqada waxaan hoos u dhigi karnaa heerkan n-1.

  • Markaad dejinayso qorshe hawleed, calaamadee dhibcaha adeeggu ku dhici karo, oo ka fakar xaalad ay wax walba “xun uga sii xumaadeen” ka hor.
  • U qaybi server-yada DNS ee gudaha meelo kala duwan oo deegaan/xarumo xog ah/sharafyo/wareejin/wax-soo-galineed.
  • Seerer kasta, ku rakib server-ka DNS caching maxalli ah, kaas oo u weeciya codsiyada server-yada DNS ee ugu muhiimsan, iyo haddii la heli waayo, waxay ka jawaabi doontaa kaydka. 

Meesha afraad - "U hagaajinta Nginx"

Maalin wanaagsan, kooxdayagu waxay go'aansatey "inaan ku filneyn tan," iyo habka dib u habeynta nginx-ga ayaa bilaabmay. Hadafka ugu weyn waa in la keeno qaab-dhismeedka qaab-dhismeed dareen leh. Markii hore, wax walba waxay ahaayeen "taariikh ahaan la aasaasay" mana aysan qaadin wax macquul ah. Hadda server_name kasta waxa loo raray fayl isku magac ah oo dhammaan qaabaynta ayaa loo qaybiyay faylalka. Jid ahaan, qaabeynta ayaa ka kooban 253949 khadadka ama 7836520 xaraf oo qaata ku dhawaad ​​​​7 megabyte. Heerka sare ee qaab dhismeedka: 

Qaab dhismeedka 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

Waxay noqotay mid aad u wanaagsan, laakiin habka beddelka iyo qaybinta qaabeynta, qaar ka mid ah waxay lahaayeen kordhin khaldan oo aan lagu darin waxaa ka mid ah * .conf dardaaranka. Natiijo ahaan, qaar ka mid ah martigaliyayaasha ayaa noqday kuwo aan la heli karin oo ku soo celiyay 301 bogga ugu weyn. Sababtoo ah koodka jawaabta ma ahayn 5xx / 4xx, tan lama ogaanin isla markiiba, laakiin kaliya subaxdii. Intaa ka dib, waxaan bilownay qorista imtixaanada si aan u hubino qaybaha kaabayaasha.

Gabagabo: 

  • U samee qaabayntaada si sax ah (maaha kaliya nginx) oo ka fakar qaab-dhismeedka marxaladda hore ee mashruuca. Sidan waxaad ka dhigi doontaa inay si badan u fahmaan kooxda, taas oo iyana hoos u dhigi doonta TTM.
  • U qor imtixaanada qaybaha kaabayaasha qaarkood. Tusaale ahaan: hubinta in dhammaan magacyada server-yada muhiimka ah ay bixiyaan heerka saxda ah + jirka jawaabta. Way ku filnaan doontaa in gacanta lagu haysto dhawr qoraal oo hubinaya hawlaha aasaasiga ah ee qaybta, si aan si waali ah loo xasuusan 3 subaxnimo maxaa kale oo loo baahan yahay in la hubiyo. 

Kaalinta saddexaad - "Si lama filaan ah ayuu boos uga dhammaaday Cassandra"

Xogtu si joogto ah ayey u kortay, wax walbana way fiicnaayeen ilaa wakhtiga ay dayactirka meelaha kiisaska waaweyni bilaabeen inay ku fashilmaan kooxda Cassandra, sababtoo ah isugaynta ayaa ka shaqayn kari wayday iyaga. 

Maalin maalmaha ka mid ah duufaanta ayaa kooxdu waxay ku sigatay inay isu beddesho bocor, kuwaas oo kala ah:

  • waxaa jiray ilaa 20% wadarta guud ee boosaska ku haray kooxda;
  • Suurtagal maaha in si buuxda loogu daro qanjidhada, sababtoo ah nadiifintu ma dhaafto ka dib marka lagu daro noodhka sababtoo ah boos la'aanta qaybaha;
  • wax soo saarka ayaa si tartiib tartiib ah hoos ugu dhacaya sababtoo ah isugeynta ma shaqeyneyso; 
  • Kooxdu waxay ku jirtaa xaalad degdeg ah.

Tusmada ugu hooseysa ee Cyan

Ka bax - waxaan ku darnay 5 nodes oo kale iyada oo aan nadiifin, ka dib waxaan bilownay inaan si nidaamsan uga saarno kutlada oo aan dib u galno, sida qanjidhada madhan ee boosku ka dhamaaday. Waqti badan ayaa la qaatay intii aan jeclaan lahayn. Waxaa jirtay khatar ah in kooxdu aanay qayb ahaan ama gebi ahaanba la heli karin. 

Gabagabo:

  • Dhammaan server-yada cassandra, wax ka badan 60% booska qayb kasta waa in lagu mashquuliyaa. 
  • Waa in lagu shubaa wax aan ka badnayn 50% cpu.
  • Waa inaadan iloobin qorsheynta kartida oo aad u baahan tahay inaad ka fikirto qayb kasta, iyadoo lagu saleynayo waxyaabaha gaarka ah.
  • Inta badan ee qanjidhada ku jirta kooxda, way ka sii fiicnaan doontaa. Server-yada ay ku jiraan tiro yar oo xog ah ayaa si degdeg ah loo raro, kooxdan oo kale way fududahay in dib loo soo nooleeyo. 

Meesha labaad - "xogta ayaa laga waayay kaydinta qiimaha qunsulka"

Helitaanka adeegga, annagu, sida kuwa badan, waxaan isticmaalnaa qunsulka. Laakiin waxaan sidoo kale u isticmaalnaa qiimaheeda furaha ah qaabka buluug-cagaaran ee monolith. Waxay kaydisaa macluumaadka ku saabsan durdurrada sare ee firfircoon iyo kuwa aan firfircoonayn, kuwaas oo beddela meelaha inta lagu jiro hawlgelinta. Ujeedadaas awgeed, adeeg geyn ayaa la qoray kaas oo la falgalay KV. Mar mar, xogta KV waa la waayay. Dib looga soo celiyay xusuusta, laakiin leh tiro khaladaad ah. Natiijo ahaan, inta lagu guda jiro raritaanka, culeyska dusha sare ayaa loo qaybiyay si aan sinnayn, waxaana helnay khaladaad badan oo 502 ah sababtoo ah dhabarka oo si xad dhaaf ah loo saaray CPU. Natiijo ahaan, waxaan ka soo guurnay qunsulka KV una guurnay boosteejada, halkaas oo aysan hadda si fudud uga saarin.  

Gabagabo:

  • Adeegyada aan wax oggolaansho ah haysan waa in aanay ku jirin xogta muhiimka u ah hawlgalka goobta. Tusaale ahaan, haddii aanad oggolaansho ku haysan ES, waxa ay fiicnaan lahayd in laga diido gelitaanka heerka shabakadda meel kasta oo aan loo baahnayn, ka tag oo keliya kuwa lagama maarmaanka ah, oo sidoo kale deji action.destructive_requires_name: run.
  • Horay ugu celceli habka kaydintaada iyo soo kabashadaada. Tusaale ahaan, horay u samee qoraal (tusaale ahaan, Python) kaas oo kaydin kara oo soo celin kara.

Kaalinta koowaad - "Kabtanka aan caddayn" 

Waqtiga qaar, waxaan ogaanay qaybinta aan sinnayn ee culeyska xagga sare ee nginx marka ay jiraan 10+ server oo ku yaal dhabarka dambe. Sababtoo ah xaqiiqda ah in wareega-koobku ay u soo direen codsiyo min 1aad ilaa kan ugu dambeeya si ay u kala horreeyaan, iyo mid kasta oo nginx ah ayaa dib u bilaabay, kor u kaca ugu horreeya wuxuu had iyo jeer helay codsiyo ka badan inta soo hartay. Natiijo ahaan, waxay u shaqeeyaan si tartiib tartiib ah oo goobta oo dhan ayaa dhibtay. Tani waxay noqotay mid si sii kordheysa loo dareemo markii tirada taraafikada ay korodhay. Si fudud u cusboonaysiinta nginx si loo suurtageliyo random-ka ma shaqayn - waxaan u baahanahay inaan dib u samayno farabadan lua code oo aan ka bixin nooca 1.15 (waqtigaas). Waxaan ku qasbanahay inaan dhejinno nginx 1.14.2, anagoo ku soo bandhigayna taageero random ah. Tani waxay xallisay dhibaatada. Cayayaankani waxa uu ku guulaystaa qaybta "Captain-ka aan caddayn".

Gabagabo:

Waxay ahayd mid aad u xiiso badan oo xiiso leh in la baadho bug this). 

  • Abaabulka kormeerkaaga si ay kaaga caawiso inaad si dhakhso leh u hesho isbedbedelka noocaas ah. Tusaale ahaan, waxaad isticmaali kartaa ELK si aad ula socoto rps dhabarka kasta oo ka mid ah dusha sare, la soco waqtigooda jawaab celinta dhinaca aragtida nginx. Xaaladdan, tani waxay naga caawisay inaan ogaanno dhibaatada. 

Natiijo ahaan, guuldarrooyinka intooda badan waxaa laga yaabaa in laga fogaado iyadoo si taxaddar leh loo wajaho waxaad sameyneysay. Waa inaan had iyo jeer xasuusannaa sharciga Murphy: Wax kasta oo khaldami kara way khaldami doonaan, iyo in la dhiso qaybo ku salaysan. 

Source: www.habr.com

Add a comment