Bog Tinder go Kubernetes

Scríofa ag: Chris O'Brien, Bainisteoir Innealtóireachta | Chris Thomas, Bainisteoir Innealtóireachta | Jinyong Lee, Innealtóir Sinsearach Bogearraí | Curtha in eagar ag: Cooper Jackson, Innealtóir Bogearraí

Cén fáth

Beagnach dhá bhliain ó shin, shocraigh Tinder a ardán a bhogadh go Kubernetes. Thug Kubernetes deis dúinn Innealtóireacht Tinder a thiomáint i dtreo coimeádáin agus oibriú íseal-theagmhála trí imscaradh dochorraithe. Shaineofaí tógáil feidhmchlár, imscaradh agus bonneagar mar chód.

Bhíomar ag iarraidh dul i ngleic le dúshláin scála agus seasmhachta. Nuair a bhí scálú criticiúil, ba mhinic a d’fhulaing muid trí chúpla nóiméad ag fanacht go dtiocfadh cásanna nua EC2 ar líne. Ba thaitneamhach linn an smaoineamh maidir le coimeádáin a sceidealú agus freastal ar thrácht laistigh de shoicind seachas nóiméad.

Ní raibh sé éasca. Le linn ár n-imirce go luath in 2019, shroicheamar mais chriticiúil laistigh dár mbraisle Kubernetes agus thosaíomar ag tabhairt faoi dhúshláin éagsúla mar gheall ar mhéid na tráchta, méid na braisle, agus DNS. Réitíomar dúshláin spéisiúla chun 200 seirbhís a aistriú agus braisle Kubernetes a reáchtáil ar scála dar luach 1,000 nóid, 15,000 pod, agus 48,000 coimeádán reatha.

Conas

Ag tosú Eanáir 2018, d’oibríomar ár mbealach trí chéimeanna éagsúla den iarracht imirce. Chuireamar tús lenár gcuid seirbhísí uile a choimeád agus iad a imscaradh chuig sraith timpeallachtaí stáitse arna óstáil ag Kubernetes. Ag tosú i mí Dheireadh Fómhair, thosaíomar ag bogadh ár seirbhísí leagáide go rianúil go Kubernetes. Faoi mhí an Mhárta an bhliain dár gcionn, chuireamar ár n-imirce i gcrích agus ritheann an tArdán Tinder anois go heisiach ar Kubernetes.

Íomhánna Foirgníochta do Kubernetes

Tá níos mó ná 30 stór cód foinse ann do na micrea-sheirbhísí atá ag rith i mbraisle Kubernetes. Tá an cód sna stórtha seo scríofa i dteangacha éagsúla (m.sh., Node.js, Java, Scala, Go) le timpeallachtaí rith-ama iolracha don teanga chéanna.

Tá an córas tógála deartha chun oibriú ar “chomhthéacs tógála” atá inúsáidte go hiomlán do gach micrea-sheirbhís, arb éard atá ann de ghnáth Dockerfile agus sraith orduithe sliogáin. Cé go bhfuil a n-ábhar inúsáidte go hiomlán, scríobhtar na comhthéacsanna tógála seo go léir trí fhormáid chaighdeánaithe a leanúint. Ligeann caighdeánú na gcomhthéacsanna tógála do chóras tógála aonair gach micrea-sheirbhís a láimhseáil.

Fíor 1–1 Próiseas caighdeánaithe tógála tríd an gcoimeádán Tógálaí

D’fhonn an chomhsheasmhacht is mó a bhaint amach idir timpeallachtaí runtime, tá an próiseas tógála céanna á úsáid le linn na céime forbartha agus tástála. Chuir sé seo dúshlán uathúil nuair a bhí orainn bealach a cheapadh chun timpeallacht tógála chomhsheasmhach a ráthú ar fud an ardáin. Mar thoradh air sin, déantar gach próiseas tógála laistigh de choimeádán speisialta “Tógálaí”.

Bhí roinnt teicnící chun cinn Docker ag teastáil chun an coimeádán Tógálaí a chur i bhfeidhm. Faigheann an coimeádán Tógálaí seo aitheantas úsáideora áitiúil agus rúin (m.sh., eochair SSH, dintiúir AWS, srl.) De réir mar is gá chun stórtha príobháideacha Tinder a rochtain. Cuireann sé eolairí áitiúla ar bun ina bhfuil an cód foinse chun bealach nádúrtha a bheith acu chun déantáin tógála a stóráil. Feabhsaíonn an cur chuige seo feidhmíocht, toisc go gcuireann sé deireadh le cóipeáil déantán tógtha idir an coimeádán Tógálaí agus an meaisín óstach. Déantar déantáin tógála stóráilte a athúsáid an chéad uair eile gan cumraíocht bhreise.

Maidir le seirbhísí áirithe, bhí orainn coimeádán eile a chruthú laistigh den Tógálaí chun an timpeallacht ama tiomsaithe a mheaitseáil leis an timpeallacht reatha (m.sh., gineann déantúsaíocht dénártha a bhaineann go sonrach le hardáin le suiteáil leabharlann bcrypt Node.js). D’fhéadfadh go mbeadh riachtanais ama tiomsaithe difriúil i measc seirbhísí agus tá an Dockerfile deiridh comhdhéanta ar an eitilt.

Ailtireacht Braisle Kubernetes Agus Imirce

Sizing Braisle

Shocraigh muid kube-aws a úsáid le haghaidh braisle uathoibrithe a sholáthar ar chásanna Amazon EC2. Go luath, bhíomar ag rith gach rud i linn snámha nód ginearálta. D'aithníomar go tapa an gá ualaí oibre a dheighilt i méideanna agus cineálacha éagsúla cásanna, chun úsáid níos fearr a bhaint as acmhainní. Ba é an réasúnaíocht ná go raibh torthaí feidhmíochta níos intuartha ag baint le níos lú pods snáithithe le chéile ná ligean dóibh maireachtáil le líon níos mó pods aon-snáithe.

Shocraíomar ar:

  • m5.4xlarge le haghaidh monatóireachta (Prometheus)
  • c5.4xlarge d’ualach oibre Node.js (ualach oibre aon snáithe)
  • c5.2xlarge do Java agus Go (ualach oibre ilsnáithe)
  • c5.4xlarge don eitleán rialaithe (3 nóid)

Imirce

Ceann de na céimeanna ullmhúcháin don imirce ónár mbonneagar oidhreachta go Kubernetes ba ea an chumarsáid seirbhíse-go-seirbhís atá ann cheana a athrú chun Comhardaitheoirí Luchta Leaisteacha (ELBanna) nua a cruthaíodh i bhfo-líonra sonrach Virtual Private Cloud (VPC) a chur in iúl. Cuireadh an subnet seo chuig an Kubernetes VPC. Thug sé sin deis dúinn modúil a aistriú go gráinneach gan aird ar bith a thabhairt ar ordú sonrach do spleáchais seirbhíse.

Cruthaíodh na críochphointí seo ag baint úsáide as tacair ualaithe taifeadta DNS a raibh CNAME dírithe ar gach ELB nua. Le gearradh siar, chuireamar taifead nua leis, ag tagairt don tseirbhís nua Kubernetes ELB, le meáchan 0. Ansin shocraíomar an Time to Live (TTL) ar an taifead a socraíodh go 0. Rinneadh na seanmheáchain agus na meáchain nua a choigeartú go mall ansin diaidh ar ndiaidh suas le 100% ar an bhfreastalaí nua. Tar éis an gearradh siar a bheith críochnaithe, socraíodh an TTL a dhéanamh ar rud éigin níos réasúnta.

Thug ár modúil Java onóir do DNS TTL íseal, ach ní dhearna ár bhfeidhmchláir Nód. Athscríobh duine dár n-innealtóirí cuid den chód linn snámha ceangail chun é a fhilleadh ar bhainisteoir a dhéanfadh athnuachan ar na linnte gach 60í. D'oibrigh sé seo go han-mhaith dúinn gan aon fheidhmíocht shuntasach.

Foghlaim

Teorainneacha Fabraic Líonra

Sna huaireanta luatha maidin an 8 Eanáir, 2019, d’fhulaing Ardán Tinder briseadh leanúnach. Mar fhreagairt ar mhéadú neamhghaolmhar ar latency ardáin níos luaithe an mhaidin sin, rinneadh comhaireamh pod agus nód a scála de réir an bhraisle. Mar thoradh air seo bhí ídiú taisce ARP ar ár nóid go léir.

Tá trí luach Linux ábhartha maidir leis an taisce ARP:

Creidmheas

Is caipín crua é gc_thresh3. Má tá iontrálacha logála “ró-shreabhadh tábla comharsan” á fháil agat, tugann sé seo le fios nach raibh go leor seomra ann chun iontráil na comharsan a stóráil fiú tar éis bailiúchán truflais sioncrónach (GC) den taisce ARP. Sa chás seo, ní thiteann an t-eithne ach an paicéad go hiomlán.

Úsáidimid Flannel mar ár bhfabraic líonra i Kubernetes. Cuirtear paicéid ar aghaidh trí VXLAN. Is scéim forleagain Sraith 2 é VXLAN thar líonra Sraith 3. Úsáideann sé imchlúdú Prótacal Datagram Seoladh-in-Úsáideoir MAC (MAC-in-UDP) chun bealach a sholáthar chun deighleoga líonra Sraith 2 a leathnú. Is é IP móide UDP an prótacal iompair thar líonra na n-ionad sonraí fisiciúla.

Fíor 2–1 Léaráid flannel (creidmheas)

Fíor 2–2 Paicéad VXLAN (creidmheas)

Leithdháileann gach nód oibrí Kubernetes a spás seoltaí fíorúil féin / 24 as bloc níos mó / 9. I gcás gach nód, tá 1 iontráil tábla bealaigh, 1 iontráil tábla ARP (ar chomhéadan flannel.1), agus 1 iontráil bunachar sonraí seolta (FDB) mar thoradh air seo. Cuirtear iad seo nuair a lainseálann nód an oibrí ar dtús nó de réir mar a aimsítear gach nód nua.

Ina theannta sin, sreabhann cumarsáid nód-go-pod (nó pod-go-pod) thar an gcomhéadan eth0 (a léirítear sa léaráid Flannel thuas). Mar thoradh air seo beidh iontráil bhreise sa tábla ARP do gach foinse nód comhfhreagrach agus ceann scríbe nód.

Inár dtimpeallacht, tá an cineál cumarsáide seo an-choitianta. Le haghaidh ár n-earraí seirbhíse Kubernetes, cruthaítear ELB agus cláraíonn Kubernetes gach nód leis an ELB. Níl an ELB ar an eolas faoi pod agus b’fhéidir nach é an nód a roghnófar ceann scríbe deiridh an phaicéid. Tarlaíonn sé seo nuair a fhaigheann an nód an paicéad ón ELB, déanann sé a rialacha iptables don tseirbhís a mheas agus roghnaíonn sé pod go randamach ar nód eile.

Ag am an bhriste, bhí 605 nóid iomlán sa bhraisle. Ar na cúiseanna a bhfuil cuntas orthu thuas, ba leor é seo chun an luach réamhshocraithe gc_thresh3 a eclipse. Chomh luath agus a tharlaíonn sé seo, ní amháin go bhfuil paicéid á dtitim, ach tá Flannel / 24s iomlán de spás seoltaí fíorúla ar iarraidh ón tábla ARP. Teipeann ar chumarsáid nód go pod agus breathnuithe DNS. (Déantar DNS a óstáil sa bhraisle, mar a mhíneofar níos mionsonraithe níos déanaí san alt seo.)

Le réiteach, ardaítear luachanna gc_thresh1, gc_thresh2, agus gc_thresh3 agus caithfear Flannel a atosú chun líonraí atá in easnamh a athchlárú.

DNS gan choinne ag rith ar scála

Chun freastal ar ár n-imirce, ghiaráil muid DNS go mór chun múnlú tráchta agus gearradh siar incriminteach ó oidhreacht go Kubernetes a éascú dár seirbhísí. Shocraíomar luachanna TTL réasúnta íseal ar na RoutS53 RecordSets gaolmhara. Nuair a reáchtáil muid ár mbonneagar leagáide ar chásanna EC2, dhírigh ár gcumraíocht athscríofa ar DNS Amazon. Ghlacamar leis seo go deonach agus níor tugadh faoi deara costas TTL réasúnta íseal dár seirbhísí agus seirbhísí Amazon (m.sh. DynamoDB).

De réir mar a chuireamar níos mó agus níos mó seirbhísí ar bord do Kubernetes, fuair muid seirbhís DNS a bhí ag freagairt 250,000 iarratas in aghaidh an tsoicind. Bhíomar ag teacht ar am-aimsithe DNS uaineach agus tionchair inár n-iarratais. Tharla sé seo in ainneoin iarracht thiúnta uileghabhálach agus aistrigh soláthraí DNS chuig imscaradh CoreDNS a bhí ag buaicphointe ag aon am ag 1,000 pod ag ithe 120 croí.

Agus muid ag déanamh taighde ar chúiseanna agus réitigh fhéideartha eile, fuaireamar alt ag cur síos ar riocht cine a théann i bhfeidhm ar chreat scagtha paicéad Linux netfilter. Bhí na huaireanta ama DNS a bhí á bhfaca againn, mar aon le cuntar incriminte insert_failed ar chomhéadan Flannel, ailínithe le torthaí an ailt.

Tarlaíonn an tsaincheist le linn Aistriúcháin Seoladh Líonra Foinse agus Ceann Scríbe (SNAT agus DNAT) agus nuair a chuirtear isteach sa tábla conntrack é ina dhiaidh sin. Ceann oibre amháin a pléadh go hinmheánach agus a mhol an pobal ná DNS a aistriú go nód an oibrí féin. Sa chás seo:

  • Ní gá SNAT, toisc go bhfuil an trácht ag fanacht go háitiúil ar an nód. Ní gá é a tharchur ar fud an chomhéadain eth0.
  • Ní gá DNAT toisc go bhfuil an IP ceann scríbe áitiúil don nód agus ní rialacha pod in aghaidh an iptables a roghnaíodh go randamach.

Shocraigh muid dul ar aghaidh leis an gcur chuige seo. Baineadh úsáid as CoreDNS mar DheamhanSet i Kubernetes agus instealladh muid freastalaí DNS áitiúil an nód isteach i resolv.conf gach pod tríd an mbrat ordaithe kubelet - braisle-dns a chumrú. Bhí an sreabhadh oibre éifeachtach le haghaidh tréimhsí ama DNS.

Mar sin féin, feicimid paicéid tite agus incrimint cuntar insert_failed an chomhéadain Flannel. Leanfaidh sé seo fiú tar éis na tréimhse oibre thuas toisc nár sheachain muid ach SNAT agus / nó DNAT do thrácht DNS. Beidh an riocht cine fós ann do chineálacha eile tráchta. Ar ámharaí an tsaoil, is TCP an chuid is mó dár bpaicéid agus nuair a tharlaíonn an riocht, déanfar paicéid a atarchur go rathúil. Tá socrú fadtéarmach ann do gach cineál tráchta rud atá á phlé againn fós.

Toscaire a Úsáid chun Cothromú Ualaigh Níos Fearr a bhaint amach

Agus muid ag aistriú ár seirbhísí iardhíola go Kubernetes, thosaíomar ag fulaingt ó ualach neamhchothromaithe ar fud pods. Fuair ​​muid amach mar gheall ar HTTP Keepalive, go raibh naisc ELB greamaithe de na chéad pods réidh de gach imscaradh rollta, agus mar sin bhí an chuid is mó den trácht ag sreabhadh trí chéatadán beag de na pods a bhí ar fáil. Ceann de na chéad mhaolú a rinneamar iarracht ná MaxSurge 100% a úsáid ar imscaradh nua do na ciontóirí is measa. Bhí sé seo beagáinín éifeachtach agus ní raibh sé inbhuanaithe go fadtéarmach le cuid de na himscaradh níos mó.

Maolú eile a d’úsáidamar ná iarratais ar acmhainní ar sheirbhísí criticiúla a insileadh go saorga ionas go mbeadh níos mó spáis ag pods colocated taobh le pods troma eile. Ní raibh sé seo le bheith inúsáidte san fhadtréimhse mar gheall ar dhramhaíl acmhainne agus bhí ár bhfeidhmchláir nód snáithe aonair agus dá bhrí sin uasteorannú go héifeachtach ar 1 chroí. Ba é an t-aon réiteach soiléir ná cothromú ualaigh níos fearr a úsáid.

Bhíomar ag iarraidh go hinmheánach an Toscaire a mheas. Thug sé seo deis dúinn é a úsáid ar bhealach an-teoranta agus buntáistí láithreacha a bhaint amach. Is seachfhreastalaí foinse oscailte ardfheidhmíochta Sraith 7 é an Toscaire atá deartha le haghaidh ailtireachtaí móra atá dírithe ar sheirbhísí. Tá sé in ann ardteicnící cothromaithe ualaigh a chur i bhfeidhm, lena n-áirítear atreoruithe uathoibríocha, briseadh ciorcad, agus teorannú rátaí domhanda.

Ba é an chumraíocht a bhí againn ná sidecar Toscaire a bheith taobh le gach pod a raibh bealach agus braisle amháin aige chun an calafort coimeádán áitiúil a bhualadh. Chun cascáidiú féideartha a íoslaghdú agus ga beag soinneáin a choinneáil, bhaineamar úsáid as cabhlach de pods Toscaire tosaigh seachfhreastalaí, imscaradh amháin i ngach Crios Infhaighteachta (AZ) do gach seirbhís. Bhuail siad seo le meicníocht beag fionnachtain seirbhíse a chuir duine dár n-innealtóirí le chéile nach ndearna ach liosta pods i ngach AZ a chur ar ais le haghaidh seirbhíse ar leith.

Ansin bhain Toscairí Tosaigh na seirbhíse úsáid as an meicníocht fionnachtain seirbhíse seo le braisle agus bealach suas an abhainn amháin. Rinneamar tréimhsí ama réasúnta a chumrú, chuireamar borradh faoi na socruithe briste ciorcaid go léir, agus ansin chuireamar cumraíocht atriail íosta isteach chun cabhrú le teipeanna neamhbhuana agus imscaradh rianúil. Chuireamar TCP ELB os comhair gach ceann de na seirbhísí tosaigh Toscaire seo. Fiú má bhí an coimeádaí ónár bpríomhchiseal seachfhreastalaí tosaigh pinn ar pods Toscaire áirithe, bhí siad i bhfad níos fearr in ann an t-ualach a láimhseáil agus bhí siad cumraithe chun cothromaíocht a dhéanamh tríd an_sequest go dtí an deireadh seachtaine.

Le haghaidh imscaradh, bhaineamar úsáid as hook preStop ar an bhfeidhmchlár agus ar an pod sidecar araon. Teipeann ar an hook seo ar a dtugtar an seic sláinte sidecar críochphointe admin, chomh maith le codladh beag, roinnt ama a thabhairt chun ligean do na naisc soilsithe a chríochnú agus a dhraenáil.

Cúis amháin go raibh muid in ann bogadh chomh gasta sin ba chúis leis na méadrachtaí saibhre a raibh muid in ann iad a chomhtháthú go héasca lenár ngnáthshocrú Prometheus. Thug sé seo deis dúinn a fheiceáil go díreach cad a bhí ag tarlú agus muid ag athrá ar shuíomhanna cumraíochta agus ag gearradh tráchta.

Bhí na torthaí láithreach agus soiléir. Chuireamar tús leis na seirbhísí is neamhchothromaithe agus ag an bpointe seo tá siad á reáchtáil os comhair dhá cheann déag de na seirbhísí is tábhachtaí inár mbraisle. Tá sé beartaithe againn i mbliana bogadh go mogalra lán-seirbhíse, le fionnachtain seirbhíse níos airde, briseadh ciorcad, braite imlíne, teorannú rátaí agus rianú.

Fíor 3-1 Cóineasú LAP seirbhíse amháin le linn an ghearrtha go dtí an toscaire

An Toradh Deiridh

Trí na foghlaimí seo agus taighde breise, tá foireann láidir bonneagair intí forbartha againn a bhfuil an-eolas acu ar conas braislí móra Kubernetes a dhearadh, a imscaradh agus a oibriú. Tá eolas agus taithí anois ag eagraíocht innealtóireachta iomlán Tinder ar conas a bhfeidhmchláir ar Kubernetes a choimeád agus a imscaradh.

Maidir lenár mbonneagar oidhreachta, nuair a bhí scála breise ag teastáil, d’fhulaing muid go minic trí chúpla nóiméad ag fanacht go dtiocfadh cásanna nua EC2 ar líne. Déanann coimeádáin an trácht a sceidealú agus a sheirbheáil laistigh de shoicind seachas nóiméad. Soláthraíonn sceidealú coimeádán iolrach ar shampla EC2 amháin dlús cothrománach níos fearr. Mar thoradh air sin, déanaimid coigilteas suntasach costais ar EC2 in 2019 i gcomparáid leis an mbliain roimhe sin.

Thóg sé beagnach dhá bhliain, ach chuireamar ár n-imirce i gcrích i mí an Mhárta 2019. Ritheann an tArdán Tinder go heisiach ar bhraisle Kubernetes ina bhfuil 200 seirbhís, 1,000 nóid, 15,000 pod, agus 48,000 coimeádán reatha. Ní tasc é an bonneagar a chur in áirithe dár bhfoirne oibríochtaí a thuilleadh. Ina áit sin, roinneann innealtóirí ar fud na heagraíochta an fhreagracht seo agus tá smacht acu ar an gcaoi a dtógtar agus a n-úsáidtear a bhfeidhmchláir le gach rud mar chód.