Phetoho ea Tinder ho ea Kubernetes

Hlokomela. fetolela.: Basebetsi ba ts'ebeletso e tsebahalang ea lefatše ea Tinder haufinyane ba arolelane lintlha tse ling tsa tekheniki mabapi le ho fallisetsa lits'ebeletso tsa bona ho Kubernetes. Ts'ebetso ena e nkile lilemo tse ka bang peli 'me ea fella ka ho qalisoa ha sethala se seholo haholo ho li-K8, se nang le lits'ebeletso tse 200 tse tšoaroang lijaneng tse likete tse 48. Ke mathata afe a khahlisang ao baenjiniere ba Tinder ba ileng ba kopana le ona, 'me ba ile ba fihlela litholoana life? Bala phetolelo ee.

Phetoho ea Tinder ho ea Kubernetes

Hobane'ng?

Hoo e ka bang lilemo tse peli tse fetileng, Tinder e ile ea etsa qeto ea ho fetisetsa sethala sa eona ho Kubernetes. Kubernetes e ne e tla lumella sehlopha sa Tinder ho kenya setshelo le ho fallela tlhahisong ka boiteko bo fokolang ka phepelo e sa fetoheng. (phepelo e sa fetoheng). Tabeng ena, kopano ea likopo, ho romelloa ha tsona, le mekhoa ea motheo ka boeona e tla hlalosoa ka mokhoa o ikhethileng ka khoutu.

Re ne re boetse re batla tharollo bothateng ba scalability le botsitso. Ha maemo a ntse a mpefala, hangata re ne re tlameha ho ema metsotso e 'maloa hore maemo a macha a EC2 a qale. Mohopolo oa ho qala lijana le ho qala ho sebeletsa sephethephethe ka metsotsoana ho fapana le metsotso e ile ea re khahla haholo.

Ts'ebetso e ile ea bonahala e le thata. Nakong ea ho falla ha rona mathoasong a selemo sa 2019, sehlopha sa Kubernetes se ile sa fihla boima bo boima mme ra qala ho tobana le mathata a fapaneng ka lebaka la bongata ba sephethephethe, boholo ba lihlopha le DNS. Ha re ntse re le tseleng, re ile ra rarolla mathata a mangata a khahlisang a amanang le ho falla ha lits'ebeletso tse 200 le ho boloka sehlopha sa Kubernetes se nang le li-node tse 1000, li-pods tse 15000 le lijana tse 48000 tse sebetsang.

Joang?

Ho tloha ka Pherekhong 2018, re fetile mekhahlelong e fapaneng ea ho falla. Re ile ra qala ka ho kenya lits'ebeletso tsohle tsa rona le ho li fetisetsa libakeng tsa liteko tsa Kubernetes. Ho qala ka Mphalane, re ile ra qala ho tsamaisa lits'ebeletso tsohle tse teng ho Kubernetes. Ka Hlakubele selemong se latelang, re qetile ho falla mme joale sethala sa Tinder se sebetsa ho Kubernetes feela.

Ho aha litšoantšo tsa Kubernetes

Re na le polokelo ea khoutu ea mohloli e fetang 30 bakeng sa li-microservices tse sebetsang sehlopheng sa Kubernetes. Khoutu e ka har'a polokelo ena e ngotsoe ka lipuo tse fapaneng (mohlala, Node.js, Java, Scala, Go) e nang le maemo a mangata a nako ea ho sebetsa bakeng sa puo e le 'ngoe.

Sistimi ea kaho e etselitsoe ho fana ka "mohaho oa moaho" o ka khonehang bakeng sa microservice ka 'ngoe. Hangata e na le Dockerfile le lethathamo la litaelo tsa likhetla. Likahare tsa tsona li ka etsoa ka mokhoa o ikhethileng, 'me ka nako e ts'oanang, maemo ana kaofela a aha a ngotsoe ho latela sebopeho se tloaelehileng. Ho lokisa maemo a kaho ho lumella sistimi e le 'ngoe ea kaho ho sebetsana le li-microservices tsohle.

Phetoho ea Tinder ho ea Kubernetes
Setšoantšo sa 1-1. Mokhoa o tloaelehileng oa ho aha ka setshelo sa Builder

Ho fihlela tumellano e kholo lipakeng tsa nako ea ho matha (tikoloho ea nako ea ts'ebetso) mokhoa o tšoanang oa ho haha ​​o sebelisoa nakong ea tsoelo-pele le tlhahlobo. Re ile ra tobana le phephetso e khahlisang haholo: re ile ra tlameha ho theha mokhoa oa ho netefatsa botsitso ba tikoloho ea moaho sethaleng sohle. Ho finyella sena, mekhoa eohle ea kopano e etsoa ka har'a setshelo se khethehileng. sehahi.

Ts'ebetsong ea hae ea setshelo e ne e hloka mekhoa e tsoetseng pele ea Docker. Sehahi se rua ID ea mosebelisi le liphiri tsa lehae (joalo ka senotlolo sa SSH, mangolo-tsoibila a AWS, joalo-joalo) tse hlokahalang ho fihlella polokelo ea poraefete ea Tinder. E beha li-directory tsa lehae tse nang le mehloli ea ho boloka li-artifact tsa tlhaho. Mokhoa ona o ntlafatsa ts'ebetso hobane o felisa tlhoko ea ho kopitsa lintho tsa khale lipakeng tsa setshelo sa Builder le moamoheli. Lintho tsa khale tse bolokiloeng li ka sebelisoa hape ntle le tlhophiso e eketsehileng.

Bakeng sa lits'ebeletso tse ling, re ile ra tlameha ho theha setshelo se seng ho etsa 'mapa oa tikoloho ea pokello ho tikoloho ea nako ea ho sebetsa (mohlala, laebrari ea Node.js bcrypt e hlahisa li-artifacts tse khethehileng tsa sethala nakong ea ho kenya). Nakong ea ts'ebetso ea ho bokella, litlhoko li ka fapana lipakeng tsa lits'ebeletso, 'me Dockerfile ea ho qetela e bokelloa hang-hang.

Meaho ea lihlopha tsa Kubernetes le ho falla

Tsamaiso ea boholo ba lihlopha

Re ile ra etsa qeto ea ho sebelisa kube-aws bakeng sa phetiso ea lihlopha tse ikemetseng maemong a Amazon EC2. Qalong, ntho e 'ngoe le e' ngoe e ne e sebetsa letamong le le leng le tloaelehileng la li-node. Ka potlako re ile ra hlokomela tlhokahalo ea ho arola mesebetsi ka boholo le mofuta oa mohlala ho sebelisa lisebelisoa hantle. Maikutlo e ne e le hore ho tsamaisa li-pods tse nang le likhoele tse ngata tse jarollotsoeng ho ile ha bonahala ho lebeletsoe ho latela ts'ebetso ho feta ho phelisana ha bona le palo e kholo ea likhoele tse nang le khoele e le 'ngoe.

Qetellong re ile ra etsa qeto:

  • m5.4e kholo - bakeng sa ho beha leihlo (Prometheus);
  • c5.4e kholo - bakeng sa mosebetsi oa Node.js (mosebetsi o nang le khoele e le 'ngoe);
  • c5.2e kholo - bakeng sa Java le Go (mosebetsi o nang le mefuta e mengata);
  • c5.4e kholo - bakeng sa karolo ea taolo (li-node tse 3).

Ho falla

E 'ngoe ea mehato ea boitokisetso ea ho falla ho tloha meahong ea khale ho ea Kubernetes e ne e le ho tsamaisa puisano e tobileng e teng pakeng tsa litšebeletso ho li-balancers tse ncha tsa mojaro (Elastic Load Balancers (ELB). Li bōpiloe ka subnet e itseng ea leru le ikemetseng la poraefete (VPC). Subnet ena e ne e hokahane le Kubernetes VPC. Sena se ile sa re lumella ho falla li-module butle-butle, ntle le ho nahana ka tatellano e khethehileng ea ho itšetleha ka litšebeletso.

Lintlha tsena tsa ho qetela li entsoe ka lisebelisoa tse boima tsa lirekoto tsa DNS tse neng li e-na le li-CNAME tse supang ELB e 'ngoe le e 'ngoe e ncha. E le hore re fetole, re kentse mokhoa o mocha o bontšang ELB e ncha ea tšebeletso ea Kubernetes ka boima ba 0. Ka mor'a moo re beha Nako ea ho Phela (TTL) ea ho kena e behiloeng ho 0. Ka mor'a sena, litekanyo tsa khale le tse ncha li ne li le teng. butle-butle, 'me qetellong 100% ea mojaro e rometsoe ho seva se secha. Ka mor'a hore phetoho e phethoe, boleng ba TTL bo ile ba khutlela boemong bo lekaneng haholoanyane.

Li-module tsa Java tseo re neng re e-na le tsona li ne li ka sebetsana ka katleho le TTL DNS e tlase, empa lits'ebetso tsa Node ha lia ka tsa khona. E mong oa lienjiniere o ile a ngola bocha karolo ea khoutu ea letamo la khokahano mme a e phuthela ka manejara ea nchafatsang matamo metsotsoana e meng le e meng e 60. Mokhoa o khethiloeng o sebelitse hantle haholo mme o se na ho senyeha ho hoholo ha ts'ebetso.

Lithuto

Meeli ea Network Fabric

Hoseng ha la 8 Pherekhong 2019, sethala sa Tinder se ile sa oa ka tšohanyetso. Ka lebaka la keketseho e sa amaneng ea latency ea sethala pejana hoseng hoo, palo ea li-pods le li-node sehlopheng e ile ea eketseha. Sena se ile sa etsa hore cache ea ARP e felloe ke matla libakeng tsohle tsa rona.

Ho na le likhetho tse tharo tsa Linux tse amanang le cache ea ARP:

Phetoho ea Tinder ho ea Kubernetes
(mohloli)

gc_thresh3 - ena ke moeli o thata. Ponahalo ea "tafole ea moahelani e phallang" ka har'a log e ne e bolela hore esita le ka mor'a ho bokella lithōle tsa synchronous (GC), ho ne ho se na sebaka se lekaneng sa cache sa ARP ho boloka ho kena ha boahelani. Tabeng ena, kernel e ile ea lahla pakete ka ho feletseng.

Rea sebelisa Flannel joalo ka lesela la marang-rang ho Kubernetes. Lipakete li fetisoa ka VXLAN. VXLAN ke kotopo ea L2 e phahamisitsoeng holim'a marang-rang a L3. Theknoloji e sebelisa MAC-in-UDP (MAC Address-in-User Datagram Protocol) encapsulation mme e lumella ho atolosoa ha likarolo tsa marang-rang tsa Layer 2. Protocol ea lipalangoang ho marang-rang a setsi sa data ke IP hammoho le UDP.

Phetoho ea Tinder ho ea Kubernetes
Setšoantšo sa 2-1. Setšoantšo sa Flannel (mohloli)

Phetoho ea Tinder ho ea Kubernetes
Setšoantšo sa 2-2. Sephutheloana sa VXLAN (mohloli)

Node e 'ngoe le e' ngoe ea basebetsi ba Kubernetes e fana ka sebaka sa aterese se nang le mask /24 mask ho tsoa ho block e kholo / 9. Bakeng sa node ka 'ngoe sena ke e bolela ho kenoa e le 'ngoe tafoleng ea ho tsamaisa, ho kenoa ho le leng tafoleng ea ARP (ho sehokelo sa flannel.1), le ho kenella ho le leng ka har'a tafole ea switching (FDB). Li kenyelletsoa lekhetlo la pele ha node ea basebetsi e qala kapa nako le nako ha ho sibolloa node e ncha.

Ho feta moo, puisano ea node-pod (kapa pod-pod) qetellong e feta har'a sebopeho eth0 (joalokaha ho bontšitsoe setšoantšong sa Flannel ka holimo). Sena se fella ka kenyelletso e eketsehileng tafoleng ea ARP bakeng sa mohloli o mong le o mong o tsamaellanang le moamoheli oa sebaka.

Tikolohong ea rona, puisano ea mofuta ona e atile haholo. Bakeng sa lintho tsa ts'ebeletso ho Kubernetes, ELB e thehiloe mme Kubernetes e ngolisa node ka 'ngoe le ELB. ELB ha e tsebe letho ka li-pods mme node e khethiloeng e ka 'na ea se ke ea e-ba sebaka sa ho qetela sa pakete. Taba ke hore ha node e amohela pakete e tsoang ho ELB, e nka hore e nahanela melao li-iptables bakeng sa ts'ebeletso e itseng, 'me ka tšohanyetso o khetha pod sebakeng se seng.

Nakong ea ho hlōleha, ho ne ho e-na le li-node tse 605 sehlopheng. Bakeng sa mabaka a boletsoeng ka holimo, sena se ne se lekane ho hlōla bohlokoa gc_thresh3, e leng ea kamehla. Ha sena se etsahala, lipakete ha li qale ho theoha feela, empa sebaka sohle sa aterese sa Flannel se nang le mask a / 24 se nyamela tafoleng ea ARP. Puisano ea li-node-pod le lipotso tsa DNS lia sitisoa (DNS e tšoaroa ka sehlopha; bala hamorao sehloohong sena bakeng sa lintlha).

Ho rarolla bothata bona, o hloka ho eketsa litekanyetso gc_thresh1, gc_thresh2 и gc_thresh3 ebe o qala hape Flannel ho ngolisa marang-rang a sieo hape.

Sekala sa DNS se sa lebelloang

Nakong ea ts'ebetso ea ho falla, re ile ra sebelisa DNS ka mafolofolo ho laola sephethephethe le ho fetisetsa litšebeletso butle-butle ho tloha meahong ea khale ho ea Kubernetes. Re beha boleng bo tlase ba TTL bakeng sa RecordSets e amanang le Route53. Ha lisebelisoa tsa khale li ntse li sebetsa maemong a EC2, tlhophiso ea rona ea tharollo e ne e supa Amazon DNS. Re ile ra nka sena habobebe mme litlamorao tsa TTL e tlase lits'ebeletso tsa rona le lits'ebeletso tsa Amazon (joalo ka DynamoDB) ha lia ka tsa hlokomeloa haholo.

Ha re ntse re falletse lits'ebeletso ho Kubernetes, re fumane hore DNS e ntse e sebetsana le likopo tse likete tse 250 motsotsoana. Ka lebaka leo, lits'ebetso li ile tsa qala ho ba le linako tse sa khaotseng le tse tebileng tsa lipotso tsa DNS. Sena se etsahetse leha ho na le boiteko bo matla ba ho ntlafatsa le ho chencha mofani oa DNS ho CoreDNS (e leng sehlohlolong se fihletseng li-pods tsa 1000 tse sebetsang ho li-cores tsa 120).

Ha re ntse re etsa lipatlisiso ka lisosa le litharollo tse ling, re ile ra fumana sengoloa, e hlalosang maemo a morabe a amang moralo oa ho sefa pakete letlooa ho Linux. Linako tseo re li boneng, hammoho le khaonta e ntseng e eketseha kenya_hlolehile ka sebopeho sa Flannel li ne li lumellana le liphuputso tsa sengoloa.

Bothata bo etsahala mothating oa ho fetolela Mohloli le Sebaka sa Aterese ea Sebaka sa Marang-rang (SNAT le DNAT) le ho kena ka har'a tafole. kgutlisetsa. E 'ngoe ea li-workaround tse ileng tsa buisanoa ka hare le tse khothalelitsoeng ke sechaba e ne e le ho isa DNS sebakeng sa basebetsi ka boeona. Boemong bona:

  • SNAT ha e hlokehe hobane sephethephethe se lula ka har'a node. Ha e hloke ho tsamaisoa ka har'a interface eth0.
  • DNAT ha e hlokehe ho tloha ha IP e eang teng e sebakeng sa node, 'me eseng pod e khethiloeng ka mokhoa o sa reroang ho latela melao. li-iptables.

Re ile ra etsa qeto ea ho khomarela mokhoa ona. CoreDNS e ile ea sebelisoa e le DaemonSet ho Kubernetes 'me ra kenya ts'ebetsong seva sa DNS sa lehae. rarolla pod e 'ngoe le e' ngoe ka ho beha folakha --cluster-dns litaelo kubelet . Tharollo ena e ile ea sebetsa bakeng sa nako ea DNS.

Leha ho le joalo, re ntse re bona tahlehelo ea lipakete le keketseho ea k'haontareng kenya_hlolehile ka sebopeho sa Flannel. Sena se ile sa tsoela pele ka mor'a hore mosebetsi o sebetse hobane re khonne ho felisa SNAT le / kapa DNAT bakeng sa sephethephethe sa DNS feela. Maemo a morabe a ne a bolokiloe bakeng sa mefuta e meng ea sephethephethe. Ka lehlohonolo, boholo ba lipakete tsa rona ke TCP, 'me haeba bothata bo hlaha li fetisetsoa hape. Re ntse re leka ho fumana tharollo e loketseng bakeng sa mefuta eohle ea sephethephethe.

Ho Sebelisa Lenģosa bakeng sa ho Lekanya Meroalo e Ntle

Ha re ntse re fallela lits'ebeletso tsa morao-rao ho ea Kubernetes, re ile ra qala ho utloa bohloko ke mojaro o sa leka-lekaneng pakeng tsa li-pods. Re fumane hore HTTP Keepalive e entse hore likhokahano tsa ELB li fanyehe holim'a li-pods tsa pele tsa phepelo e ngoe le e ngoe e phatlalalitsoeng. Kahoo, bongata ba sephethephethe bo ile ba feta karolong e nyenyane ea li-pods tse fumanehang. Tharollo ea pele eo re e lekileng e ne e beha MaxSurge ho 100% ho lipehelo tse ncha bakeng sa maemo a mabe ka ho fetesisa. Phello e ile ea fetoha e sa reng letho ebile e sa ts'episehe ho latela li-deployments tse kholoanyane.

Tharollo e 'ngoe eo re e sebelisitseng e ne e le ho eketsa likopo tsa lisebelisoa bakeng sa litšebeletso tsa bohlokoa ka maiketsetso. Tabeng ena, li-pods tse behiloeng haufi li tla ba le sebaka se seholo sa ho tsamaisa ha li bapisoa le li-pods tse ling tse boima. Le eona e ne e ke ke ea sebetsa ka nako e telele hobane e ne e tla ba tšenyo ea lisebelisoa. Ntle le moo, lits'ebetso tsa rona tsa Node li ne li entsoe ka khoele e le 'ngoe, ka hona, li ne li ka sebelisa motheo o le mong feela. Tharollo feela ea 'nete e ne e le ho sebelisa ho leka-lekanya mojaro hamolemo.

Ke khale re batla ho ananela ka botlalo moromuoa. Boemo ba hona joale bo ile ba re lumella ho e sebelisa ka mokhoa o fokolang haholo le ho fumana liphello hang-hang. Envoy ke proxy e phahameng, mohloli o bulehileng, oa layer-XNUMX o etselitsoeng likopo tse kholo tsa SOA. E ka kenya tšebetsong mekhoa e tsoetseng pele ea ho leka-lekanya mojaro, ho kenyeletsoa ho leka hape ka boiketsetso, li-circuit breaker, le ho fokotsa sekhahla sa lefatše. (Hlokomela. fetolela.: U ka bala haholoanyane ka sena ho sehlooho sena ka Istio, e thehiloeng ho Envoy.)

Re tlile ka tlhophiso e latelang: e-ba le Evoy sidecar bakeng sa pod e 'ngoe le e' ngoe le tsela e le 'ngoe,' me u kopanye sehlopha ho sejana sebakeng sa heno ka boema-kepe. Ho fokotsa menyetla e ka bang teng le ho boloka sebaka se senyenyane sa ho otla, re ile ra sebelisa sehlopha sa Envoy front-proxy pods, e le 'ngoe ho ea ka Availability Zone (AZ) bakeng sa tšebeletso ka 'ngoe. Ba ne ba itšetlehile ka enjene e bonolo ea ho sibolla litšebeletso e ngotsoeng ke e mong oa baenjiniere ba rona e ileng ea khutlisa feela lethathamo la li-pods ho AZ ka 'ngoe bakeng sa tšebeletso e fanoeng.

Baromuoa ba pele ba litšebeletso ba ile ba sebelisa mokhoa ona oa ho sibolla litšebeletso ka sehlopha se le seng le tsela. Re ile ra beha nako e lekaneng ea ho qeta nako, ra eketsa litlhophiso tsohle tsa potoloho, 'me ra eketsa tlhophiso e fokolang ea ho leka hape ho thusa ka liphoso tse le' ngoe le ho netefatsa hore ho tsamaisoa hantle. Re behile TCP ELB ka pel'a e 'ngoe le e' ngoe ea baemeli bana ba tšebeletso. Esita le haeba keepalive ho tswa ho proxy layer ea rona e ka sehloohong e ne e khomaretsoe ho li-pods tse ling tsa Evoy, li ne li ntse li khona ho sebetsana le mojaro hamolemo haholo 'me li ne li lokiselitsoe ho leka-lekanya ka bonyane_kopo ka morao.

Bakeng sa ho romelloa, re sebelisitse hook ea preStop ho li-pods tsa kopo le li-pods tsa sidecar. Hook e bakile phoso ha ho lekoa boemo ba sebaka sa ho qetela sa admin se ka har'a sets'oants'o sa koloi ea mahlakoreng 'me sa robala nakoana ho lumella likhokahano tse sebetsang ho emisa.

E 'ngoe ea mabaka a entseng hore re khone ho tsamaea ka potlako ke ka lebaka la metrics e qaqileng eo re ileng ra khona ho e kopanya habonolo ka mokhoa o tloaelehileng oa ho kenya Prometheus. Sena se ile sa re lumella ho bona hantle se neng se etsahala ha re ntse re lokisa maemo a tlhophiso le ho tsamaisa sephethephethe.

Liphello e bile tsa hang-hang le tse totobetseng. Re qalile ka litšebeletso tse sa leka-lekaneng ka ho fetisisa, 'me hona joale e sebetsa ka pel'a litšebeletso tsa bohlokoa ka ho fetisisa tsa 12 sehlopheng. Selemong sena re rera ho fetohela molemong oa lits'ebeletso tse felletseng tse nang le ts'ebetso e tsoetseng pele ea lits'ebeletso, ts'ebetso ea potoloho, ho lemoha lintho tse kantle, ho fokotsa sekhahla le ho lekola morao.

Phetoho ea Tinder ho ea Kubernetes
Setšoantšo sa 3-1. Khokahano ea CPU ea ts'ebeletso e le 'ngoe nakong ea ho fetela ho Envoy

Phetoho ea Tinder ho ea Kubernetes

Phetoho ea Tinder ho ea Kubernetes

Sephetho sa hoqetela

Ka boiphihlelo bona le lipatlisiso tse ling, re thehile sehlopha se matla sa meralo ea motheo se nang le litsebo tse matla tsa ho rala, ho tsamaisa le ho sebelisa lihlopha tse kholo tsa Kubernetes. Lienjiniere tsohle tsa Tinder joale li na le tsebo le boiphihlelo ba ho paka lijana le ho tsamaisa lits'ebetso ho Kubernetes.

Ha tlhokahalo ea matla a eketsehileng e ne e hlaha litsing tsa motheo tsa khale, re ile ra tlameha ho ema metsotso e 'maloa ho qala liketsahalo tse ncha tsa EC2. Joale lijana li qala ho sebetsa 'me li qala ho lokisa sephethephethe ka mor'a metsotsoana ho fapana le metsotso. Ho hlophisa lijana tse ngata ketsahalong e le 'ngoe ea EC2 ho boetse ho fana ka maikutlo a ntlafalitsoeng a holimo. Ka lebaka leo, re bolela esale pele ho fokotseha ho hoholo ha litšenyehelo tsa EC2019 ka 2 ha ho bapisoa le selemong se fetileng.

Ho falla ho ile ha nka lilemo tse ka bang peli, empa re e qetile ka Hlakubele 2019. Hajoale, sethala sa Tinder se sebetsa feela sehlopheng sa Kubernetes se nang le lits'ebeletso tse 200, li-node tse 1000, li-pods tse 15 le lijana tse 000 tse mathang. Meralo ea motheo ha e sa le eona feela sebaka sa lihlopha tsa ts'ebetso. Baenjineri bohle ba rona ba arolelana boikarabello bona mme ba laola ts'ebetso ea ho aha le ho tsamaisa lits'ebetso tsa bona ba sebelisa khoutu feela.

PS ho tsoa ho mofetoleli

Bala hape letoto la lingoliloeng ho blog ea rona:

Source: www.habr.com

Eketsa ka tlhaloso