Tinder u gudubka Kubernetes

Ogow. turjumi: Shaqaalaha adeegga caanka ah ee Tinder ee adduunka ayaa dhowaan la wadaagay qaar ka mid ah faahfaahinta farsamada ee u haajiridda kaabayaashooda Kubernetes. Hawshu waxay qaadatay ku dhawaad ​​laba sano waxayna natiijadeedu noqotay in la daah-furo madal aad u ballaaran oo K8s ah, oo ka kooban 200 oo adeegyo ah oo lagu marti galiyay 48 kun oo konteenar. Waa maxay dhibaatooyinka xiisaha leh ee ay la kulmeen injineerada Tinder iyo maxay natiijadii ay ka heleen? Akhri tarjuman.

Tinder u gudubka Kubernetes

Waa maxay sababta?

Ku dhawaad ​​laba sano ka hor, Tinder wuxuu go'aansaday inuu u guuro goobtiisa Kubernetes. Kubernetes wuxuu u oggolaanayaa kooxda Tinder inay weel ku shubaan oo ay u guuraan wax soo saar dadaal yar iyada oo loo marayo geyn aan la bedeli karin (dirista aan la bedeli karin). Xaaladdan oo kale, ururinta codsiyada, geyntooda, iyo kaabayaasha lafteeda ayaa si gaar ah loogu qeexi doonaa koodh.

Waxaan sidoo kale raadineynay xalka dhibaatada miisaanka iyo xasilloonida. Marka miisaanku uu noqday mid halis ah, inta badan waxay ahayd inaan sugno dhowr daqiiqo si ay u soo baxaan xaaladaha cusub ee EC2. Fikradda furitaanka weelasha iyo bilaabida u adeegida taraafikada ilbiriqsiyo halkii daqiiqo ayaa noo noqotay mid aad noo soo jiidata.

Nidaamku wuxuu noqday mid adag. Intii lagu guda jiray socdaalkayagii horraantii 2019, kooxda Kubernetes waxay gaartay tiro aad u daran waxaana bilownay inaan la kulanno dhibaatooyin kala duwan oo ay ugu wacan tahay mugga taraafigga, cabbirka kooxda, iyo DNS. Intii aan jidka ku jirnay, waxaan xallinay dhibaatooyin badan oo xiiso leh oo la xiriira socdaalka 200 ee adeegyada iyo ilaalinta Kubernetes cluster oo ka kooban 1000 nood, 15000 pods iyo 48000 weel socda.

Sidee?

Laga soo bilaabo Janaayo 2018, waxaan soo marnay marxalado kala duwan oo tahriib ah. Waxaan ku bilownay in aan weecino dhammaan adeegyadayada oo aan geyno Kubernetes jawiyada daruuraha ee tijaabinta. Laga bilaabo Oktoobar, waxaan bilownay inaan si habaysan ugu guurno dhammaan adeegyada jira ee Kubernetes. Marka la gaaro bisha Maarso ee sanadka soo socda, waxaan dhameystirnay socdaalka oo hadda Tinder platform-ka wuxuu si gaar ah uga shaqeeyaa Kubernetes.

Dhismaha sawirada Kubernetes

Waxaan haynaa in ka badan 30 goobood oo koodhka isha ah oo loogu talagalay adeegaha yar yar ee ku shaqeeya kooxda Kubernetes. Koodhka meelahan waxa lagu qoraa luqado kala duwan (tusaale, Node.js, Java, Scala, Go) oo leh goobo runtime oo badan oo isku luuqad ah.

Nadaamka dhismuhu waxa loo qaabeeyey si uu u bixiyo si buuxda loo beddeli karo “xaqiiqda dhismaha” adeeg kasta oo yar yar. Waxay badanaa ka kooban tahay Dockerfile iyo liiska amarrada qolofka. Nuxurka ay ku qoran yihiin gabi ahaanba waa la beddeli karaa, isla markaana, dhammaan dhismooyinkan waxa loo qoray si waafaqsan qaab habaysan. Habaynta macnaha dhismuhu waxa ay u ogolaataa hal nidaam dhismo si uu u maareeyo dhammaan adeegyada yar yar.

Tinder u gudubka Kubernetes
Jaantuska 1-1. Habka wax-dhisidda ee la jaan-qaadaya iyada oo loo marayo weelka wax-dhisaha

Si loo gaaro joogtaynta ugu badan inta u dhaxaysa runtimes (goowyada runtime) isla habka dhismaha ayaa la isticmaalaa inta lagu jiro horumarinta iyo baaritaanka. Waxa aanu la kulanay caqabad aad u xiiso badan: waxa aanu ku qasbanahay in aanu horumarino hab lagu hubinayo joogteynta jawiga dhismaha ee guud ahaan goobta. Si taas loo gaaro, dhammaan hababka isu-ururinta waxaa lagu fuliyaa gudaha weel gaar ah. dhise.

Hirgelinta weelkiisu wuxuu u baahday farsamooyin sare oo Docker ah. Dhisuhu wuxuu dhaxlaa aqoonsiga isticmaalaha maxalliga ah iyo siraha (sida furaha SSH, shahaadooyinka AWS, iwm.) ee looga baahan yahay gelitaanka meelaha gaarka ah ee Tinder. Waxay kor u qaadeysaa hagayaal maxalli ah oo ka kooban ilo si dabiici ah loogu kaydiyo agabka dhismaha. Habkani wuxuu hagaajinayaa waxqabadka sababtoo ah wuxuu meesha ka saarayaa baahida loo qabo in la koobiyeeyo dhismaha farshaxan ee u dhexeeya weelka wax-dhisaha iyo martigeliyaha. Qalabka dhismaha ee la kaydiyay ayaa dib loo isticmaali karaa iyada oo aan la habeyn dheeraad ah la helin.

Adeegyada qaarkood, waxay ahayd inaan abuurno weel kale si aan u sawiro jawiga isku dubaridka ah ee jawiga runtime (tusaale ahaan, maktabadda Node.js bcrypt waxay soo saartaa agabka binary artifacts ee u gaarka ah inta lagu jiro rakibidda). Inta lagu jiro habka isku-dubaridku, shuruuduhu way ku kala duwanaan karaan inta u dhaxaysa adeegyada, iyo Dockerfile-ga u dambeeya waxa lagu soo ururiyay duullimaad.

Kubernetes qaab dhismeedka kooxda iyo socdaalka

Maamulka cabbirka kooxda

Waxaan go'aansanay inaan isticmaalno kube-aws si toos ah kooxdu u geyso Amazon EC2. Bilowgii hore, wax walbaa waxay ku shaqeeyeen hal barkad guud oo nood ah. Waxaan si dhakhso ah u ogaanay baahida loo qabo in lagu kala saaro culeyska shaqada cabbir ahaan iyo nooca tusaale ahaan si loo isticmaalo si hufan oo kheyraad ah. Macquulku waxa uu ahaa in socodsiinta dhawr xadhig oo xadhig badan leh ay noqdeen kuwo la saadaalin karo marka loo eego waxqabadkooda marka loo eego wada noolanshahooda tiro badan oo tuman hal-xidhaale ah.

Ugu dambayntii waxa aanu ku degnay:

  • m5.4x weyn - la socodka (Prometheus);
  • c5.4x weyn - loogu talagalay Node.js culeyska shaqada (culayska shaqada ee hal-threaded);
  • c5.2x weyn - loogu talagalay Java iyo Go (culayska shaqada oo badan);
  • c5.4x weyn - loogu talagalay guddiga xakamaynta (3 qanjidhada).

Hijrada

Mid ka mid ah tillaabooyinka diyaarinta ee ka haajiridda kaabayaasha hore ee Kubernetes waxa ay ahayd in xidhiidhka tooska ah ee jira ee ka dhexeeya adeegyada loo jiheeyo miisaamayaasha culayska cusub (Elastic Load Balancers (ELB). Waxaa lagu abuuray subnet gaar ah oo ah daruur gaar loo leeyahay (VPC). Shabakadda hoose waxa lagu xidhay Kubernetes VPC. Tani waxay noo ogolaatay inaan u haajiro qaybaha si tartiib tartiib ah, annagoo tixgelinayn nidaamka gaarka ah ee ku tiirsanaanta adeegga.

Dhibcahaan dhamaadka ah waxaa la abuuray iyadoo la adeegsanayo tirooyin miisaan leh oo diiwaanada DNS kuwaas oo lahaa CNAMEs tilmaamaya ELB kasta oo cusub. Si aan u beddelno, waxaan ku darnay gelid cusub oo tilmaamaysa ELB-ka cusub ee adeegga Kubernetes oo miisaankiisu yahay 0. Kadibna waxaan dejinay Waqtiga Nolosha (TTL) ee gelitaanka 0. Taas ka dib, miisaankii hore iyo kuwa cusub waxay ahaayeen si tartiib ah ayaa loo hagaajiyay, ugu dambeyntii 100% culeyska waxaa loo diray server cusub. Ka dib markii beddelidda la dhammeeyo, qiimaha TTL wuxuu ku soo noqday heer ku filan.

Qaybaha Java ee aan haysanay waxay la qabsan karaan TTL DNS hooseeya, laakiin codsiyada Node way kari waayeen. Mid ka mid ah injineerada ayaa dib u qoray qayb ka mid ah koodka barkada isku xirka oo ku duubay maamule cusboonaysiiyay barkadaha 60 ilbiriqsi kasta. Habka la doortay ayaa u shaqeeyay si aad u wanaagsan oo aan wax hoos u dhac muuqda lahayn.

Casharrada

Xadka Shabakadda Shabakadda

Subaxdii hore ee Janaayo 8, 2019, goobta Tinder ayaa si lama filaan ah u burburtay. Iyada oo laga jawaabayo kororka daahitaanka madal subaxnimadii hore ee aan la xidhiidhin, tirada boodhka iyo qanjidhada kutlada ayaa kordhay. Tani waxay keentay in kaydka ARP uu ku daalo dhammaan qanjidhadayada.

Waxa jira saddex ikhtiyaar oo Linux ah oo la xidhiidha kaydka ARP:

Tinder u gudubka Kubernetes
(ilaha)

gc_tuur3 - tani waa xad adag. Muuqashada "miiska derisku buuxdhaafay" ee galitaanka loggu wuxuu ka dhigan yahay xitaa ka dib ururinta qashinka isku dhafan (GC), ma jirin meel ku filan kaydka ARP si loo kaydiyo gelitaanka deriska. Xaaladdan oo kale, kernel-ku si fudud ayuu u tuuray baakadda gebi ahaanba.

Waxaan isticmaalnaa Flannel sida dharka shabakadda ee Kubernetes. Xirmooyinka waxaa lagu kala qaadaa VXLAN VXLAN waa tunnel L2 oo kor loogu qaaday shabakad L3 ah. Tiknoolajiyadu waxay isticmaashaa MAC-in-UDP (MAC Address-in-User Datagram Protocol) koobab waxayna u ogolaataa balaadhinta qaybaha shabakada 2. Habka gaadiidka ee shabakada xarunta xogta jireed waa IP iyo UDP.

Tinder u gudubka Kubernetes
Jaantuska 2-1. jaantuska Flannel (ilaha)

Tinder u gudubka Kubernetes
Jaantuska 2-2. xirmo VXLAN (ilaha)

Shaqaale kasta oo Kubernetes ah wuxuu u qoondeeyaa meel ciwaanka farsamada ah oo leh maaskaro/24 maaskaro oo ka weyn / 9 block. Nod kasta tani waa macnaheedu waa mid ka mid ah gelista miiska dariiqa, hal gelid oo ku jira miiska ARP (oo ku yaal flannel.1 interface), iyo hal gelitaan miiska beddelka (FDB). Waxa lagu daraa marka ugu horraysa ee la bilaabo noodhka shaqaalaha ama mar kasta oo la helo noode cusub.

Intaa waxaa dheer, node-pod (ama pod-pod) isgaarsiinta ugu dambeyntii waxay martaa interface-ka eth0 (sida ku cad jaantuska Flannel ee sare). Tani waxay keenaysaa galitaanka dheeraadka ah ee shaxda ARP ee il kasta oo u dhiganta iyo goobta martida loo yahay.

Deegaankayaga, isgaadhsiinta noocan ahi aad bay ugu badan tahay. Shayada adeega ee Kubernetes, ELB ayaa la sameeyay oo Kubernetes waxa ay ka diiwaan gashanaysaa ELB. ELB waxba kama oga boqoshaada iyo noodhka la doortay ma noqon karo meesha ugu dambeysa ee xirmada. Ujeedadu waa in marka noodhka uu ka helo baakidh ELB, ay tixgeliso iyada oo la tixgelinayo sharciyada Iptables adeeg gaar ah oo si aan kala sooc lahayn u doorta boodh ku yaal meel kale.

Waqtigii guuldarradu, waxaa kooxda ku jiray 605 nood. Sababaha kor lagu sheegay awgeed, tani waxay ku filnayd in laga gudbo muhiimada gc_tuur3, kaas oo ah nooca caadiga ah. Marka ay tani dhacdo, kaliya ma aha baakooyinka in la tuuro, laakiin dhammaan booska ciwaanka ee Flannel ee leh maaskaro / 24 ayaa ka lumaya miiska ARP. Isgaadhsiinta Node-pod iyo waydiimaha DNS waa go'an (DNS waxa lagu marti galiyay koox; ka akhri maqaalkan faahfaahinta).

Si loo xalliyo dhibaatadan, waxaad u baahan tahay inaad kordhiso qiyamka gc_tuur1, gc_tuur2 и gc_tuur3 oo dib u bilaw Flannel si aad dib ugu diiwaan geliso shabakadaha maqan.

Isku-dheellitirka DNS ee lama filaanka ah

Inta lagu jiro habka socdaalka, waxaan si firfircoon u isticmaalnay DNS si aan u maareyno taraafikada oo aan si tartiib tartiib ah uga wareejinno adeegyada kaabayaasha hore ee Kubernetes. Waxaan dejinay qiimayaal TTL aad u hooseeya oo loogu talagalay RecordSets ee la xidhiidha Route53. Markii kaabayaashii hore ay ku shaqeynayeen tusaalooyinka EC2, qaabeynta xallintayadu waxay tilmaantay Amazon DNS. Tan waxaan u qaadannay si fudud oo saameynta TTL-da hoose ay ku leedahay adeegyadayada iyo adeegyada Amazon (sida DynamoDB) ayaa noqotay mid aan si weyn loo dareemin.

Markii aan u haajiray adeegyada Kubernetes, waxaan ogaanay in DNS-ku uu socodsiiyay 250 kun oo codsi ilbiriqsikii. Natiijo ahaan, codsiyadu waxay bilaabeen inay la kulmaan waqtiyo joogto ah oo halis ah oo loogu talagalay weydiimaha DNS. Tani waxay dhacday inkastoo dadaallo cajiib ah lagu hagaajinayo oo loogu beddelayo bixiyaha DNS CoreDNS (kaas oo markii ugu sarreeyay uu gaadhay 1000 pods oo ku shaqeeya 120 cores).

Markii aanu baadhnay sababaha iyo xalalka kale ee suurtogalka ah, waxaanu ogaanay maqaal, oo sharxaya xaaladaha jinsiyadeed ee saameeya qaabka shaandhaynta baakidhka netfilter ee Linux. Wakhtiga gabogabada ah ee aanu aragnay, oo ay weheliso miisaska sii kordhaya gelin_fashilmay In interface Flannel waxay ahaayeen kuwo waafaqsan natiijooyinka maqaalka.

Dhibaatadu waxay ka dhacdaa marxaladda Turjumaada Isha iyo Destination Network Address (SNAT iyo DNAT) iyo gelitaanka ku xiga ee miiska xiriir. Mid ka mid ah meelaha laga wada hadlay gudaha oo ay soo jeedisay bulshadu waxay ahayd in loo raro DNS-ka loo diro noodhka shaqaalaha laftiisa. Kiiskan:

  • SNAT looma baahna sababtoo ah taraafikada waxay ku sii jirtaa gudaha noodhka. Looma baahna in la dhex maro interface-ka eth0.
  • DNAT looma baahna maadaama meesha IP-gu u socotaa ay tahay maxali ah xagga qanjirka, oo aan ahayn boodh si aan kala sooc lahayn loo xushay si waafaqsan xeerarka. Iptables.

Waxaan go'aansanay inaan ku adkeysanno habkan. CoreDNS waxaa loo daabulay sidii DaemonSet gudaha Kubernetes waxaanan ka hirgalinay server DNS node ah xallinta. conf baal kasta iyadoo calan la saarayo --cluster-dns amarrada kubelet . Xalkani waxa uu noqday mid wax ku ool u ah wakhtiyada DNS.

Si kastaba ha ahaatee, waxaan wali aragnay baakidh lumay iyo korodhka miiska gelin_fashilmay ee interface Flannel. Tani waxay sii socotay ka dib markii la hirgeliyay habka shaqada sababtoo ah waxaan awoodnay inaan tirtirno SNAT iyo/ama DNAT ee taraafikada DNS kaliya. Xaaladaha jinsiyadeed ayaa loo xafiday noocyada kale ee taraafikada. Nasiib wanaag, baakadyadayada intooda badani waa TCP, haddii ay dhibaato dhacdo si fudud dib ayaa loo soo gudbiyaa. Waxaan wali isku dayeynaa inaan helno xal ku habboon dhammaan noocyada gaadiidka.

U Adeegsiga Ergeyga Isu-dheellitirka Culayska Wanaagsan

Markii aanu u haajiraynay adeegyada dambe ee Kubernetes, waxa aanu bilownay in aanu ka cabanay culays aan dheeli tirnayn inta u dhaxaysa cawska. Waxaan ogaanay in HTTP Keepalive ay sababtay isku xirka ELB inay ku laadlaadsan yihiin qaybihii ugu horeeyay ee diyaarsan ee hawlgal kasta oo la soo rogay. Sidaa darteed, inta badan taraafikada waxay soo mareen boqolkiiba in yar oo ka mid ah galalka la heli karo. Xalka ugu horreeya ee aan tijaabinay wuxuu ahaa dejinta MaxSurge 100% diritaannada cusub ee xaaladaha ugu xun. Saameyntu waxay noqotay mid aan macno lahayn oo aan rajo lahayn marka la eego hawlgalinta ballaaran.

Xalka kale ee aan isticmaalnay wuxuu ahaa inaan si macmal ah u kordhinay codsiyada kheyraadka ee adeegyada muhiimka ah. Xaaladdan oo kale, galalka la dhigo meel u dhow waxay lahaan doonaan meelo badan oo lagu dhaqo marka loo eego kuwa kale ee culus. Sidoo kale ma shaqaynayso mustaqbalka fog sababtoo ah waxay noqon doontaa khasaare hanti. Intaa waxaa dheer, codsiyadeenna Node waxay ahaayeen hal xadhig, sidaas awgeed, waxay isticmaali karaan hal xudun oo keliya. Xalka kaliya ee dhabta ah wuxuu ahaa in la isticmaalo dheellitirka culeyska wanaagsan.

Waxaan muddo dheer rabnay inaan si buuxda u qadarinno Ergayga. Xaaladda hadda jirta ayaa noo ogolaatay in aan ku hawlgelinno si aad u xaddidan oo aan natiijo degdeg ah ka helno. Ergaygu waa hawl-qabad sare, il furan, lakab-XNUMX wakiil oo loogu talagalay codsiyada waaweyn ee SOA. Waxay hirgelin kartaa farsamooyin dheellitirka culeyska sare leh, oo ay ku jiraan isku dayo toos ah, jebiyeyaasha wareegga, iyo xaddididda heerka caalamiga ah. (Ogow. turjumi: Waxaad wax badan oo arrintan ku saabsan ka akhriyi kartaa gudaha maqaalkani ku saabsan Istio, kaas oo ku salaysan Ergeyga.)

Waxa aanu la nimid qaabkan soo socda: Gaadhi dhinac Ergeyga ah u yeelo boodh kasta iyo hal waddo, oo ku xidh kutlada weelka gudaha gudaha dekedda. Si loo yareeyo qulqulka suurtagalka ah oo aan u ilaalino raadad yar oo garaac ah, waxaanu isticmaalnay raxan ah Ergeyga hore ee wakiillada, mid ka mid ah Aaga Helitaanka (AZ) adeeg kasta. Waxay ku tiirsan yihiin matoorka daahfurka adeegga fudud ee uu qoray mid ka mid ah injineeradayada oo si fudud ugu soo celiyay liiska boodhka AZ kasta adeeg la siiyay.

Ergada hore ee adeegga ayaa markaa adeegsatay habkan daahfurka adeegga oo leh hal koox oo kor iyo waddo ah. Waxaanu dejinay wakhti ku filan, waxaanu kordhinay dhammaan goobaha jebiya wareegga, waxaanu ku darnay isku-dayga ugu yar ee isku-dayga si aanu uga caawino guul-darrooyinka kali ah iyo inaanu hubinno hawl-gudbinta siman. Waxaan hor dhignay TCP ELB mid kasta oo ka mid ah Ergada hore ee adeeggan. Xitaa haddii kaydiyaha lakabka wakiilladayada ugu weyn uu ku xayiran yahay qaar ka mid ah galalka Ergayga, waxay weli awoodeen inay si aad u wanaagsan u xajiyaan culeyska waxaana loo habeeyey inay isku dheelitiraan ugu yaraan_request dhabarka dambe.

Diridda, waxaan u isticmaalnay jillaab-joojin horudhac ah oo ku yaal labada geesood ee codsiga iyo galalka dhinac-geeska ah. Jillaabku wuxuu kiciyay qalad lagu hubinayo heerka barta dhamaadka admin ee ku taal weelka dhinac-dhinta oo seexday in muddo ah si loogu oggolaado xidhiidhada firfircoon inay joojiyaan.

Mid ka mid ah sababaha aan u awoodnay inaan si degdeg ah u dhaqaaqno waxaa sabab u ah cabbirrada faahfaahsan oo aan awoodnay inaan si fudud u dhexgalno rakibaadda caadiga ah ee Prometheus. Tani waxay noo ogolaatay inaan si sax ah u aragno waxa dhacaya inta aan hagaajinay xuduudaha qaabeynta iyo dib u qaybinta taraafikada.

Natiijadu waxay ahayd isla markiiba oo cad. Waxaan ku bilownay adeegyadii ugu dheelli-tiran, waxayna hadda ka shaqeysaa hortooda 12-ka adeeg ee ugu muhiimsan kooxda. Sannadkan waxaan qorsheyneynaa u gudubka shabakad adeeg oo buuxda oo leh helitaan adeeg horumarsan, kala goyn, ogaansho ka baxsan, xaddididda qiimaha iyo raadinta.

Tinder u gudubka Kubernetes
Jaantuska 3-1. Isku xirka CPU ee hal adeeg inta lagu jiro u wareejinta Ergayga

Tinder u gudubka Kubernetes

Tinder u gudubka Kubernetes

Natiijada kama dambaysta ah

Waayo-aragnimadan iyo cilmi-baaris dheeraad ah, waxaan dhisnay koox kaabayaal xooggan oo leh xirfado xooggan xagga naqshadeynta, geynta, iyo ka shaqeynta kutlooyinka waaweyn ee Kubernetes. Dhammaan injineerada Tinder hadda waxay leeyihiin aqoonta iyo waayo-aragnimada ay ku xirxiraan weelasha oo ay u diraan codsiyada Kubernetes.

Markii baahida loo qabo awood dheeraad ah ay kacday kaabayaashii hore, waxay ahayd inaan sugno dhowr daqiiqadood si loo bilaabo kiisaska cusub ee EC2. Hadda weelku waxay bilaabaan inay socdaan oo bilaabaan socodsiinta socodka daqiiqado gudahood halkii daqiiqado gudahood. Jadwalka weelasha badan ee hal tusaale oo EC2 ah ayaa sidoo kale bixisa feejignaan siman oo hagaagsan. Natiijo ahaan, waxaan saadaalinay hoos u dhac weyn oo ku yimid kharashyada EC2019 sanadka 2 marka loo eego sanadkii hore.

Tahriibku waxa uu qaatay ku dhawaad ​​laba sano, balse waxa aanu dhamaynay March 2019. Waqtigan xaadirka ah, goobta Tinder waxay si gaar ah ugu shaqeysaa kutlada Kubernetes oo ka kooban 200 adeeg, 1000 nood, 15 pods iyo 000 weel socda. Kaabayaashu hadda ma aha qaybta kaliya ee kooxaha hawlgallada. Dhammaan injineeradayadu waxay wadaagaan mas'uuliyaddan waxayna xakameeyaan habka dhismaha iyo geynta codsiyadooda iyagoo isticmaalaya kood kaliya.

PS ka turjumaan

Sidoo kale akhri maqaallo taxane ah oo ku jira blog-keena:

Source: www.habr.com

Add a comment