Tinder hloov mus rau Kubernetes

Nco tseg. txhais.: Cov neeg ua haujlwm ntawm lub ntiaj teb nto moo Tinder cov kev pabcuam tsis ntev los no tau qhia qee cov ntsiab lus ntawm kev tsiv lawv cov kev tsim kho rau Kubernetes. Cov txheej txheem siv sijhawm yuav luag ob xyoos thiab ua rau muaj lub platform loj heev ntawm K8s, suav nrog 200 cov kev pabcuam tuav ntawm 48 txhiab lub thawv. Tinder engineers ntsib teeb meem dab tsi thiab lawv tau txais txiaj ntsig dab tsi? Nyeem cov lus txhais no.

Tinder hloov mus rau Kubernetes

Vim li cas?

Yuav luag ob xyoos dhau los, Tinder txiav txim siab txav nws lub platform mus rau Kubernetes. Kubernetes yuav tso cai rau pab pawg Tinder ntim thiab txav mus rau kev tsim khoom nrog kev siv zog tsawg los ntawm kev xa mus tsis tau (kev xa tawm tsis hloov). Hauv qhov no, kev sib dhos ntawm cov ntawv thov, lawv qhov kev xa tawm, thiab cov txheej txheem nws tus kheej yuav raug txiav txim siab los ntawm cov cai.

Peb kuj tau nrhiav kev daws teeb meem ntawm scalability thiab stability. Thaum qhov ntsuas tau dhau los ua qhov tseem ceeb, peb feem ntau yuav tsum tau tos ob peb feeb rau cov xwm txheej EC2 tshiab kom tig. Lub tswv yim ntawm kev tshaj tawm cov thawv thiab pib ua haujlwm hauv vib nas this es tsis txhob feeb ua rau peb nyiam heev.

Cov txheej txheem tau dhau los ua nyuaj. Thaum peb tsiv teb tsaws chaw thaum ntxov 2019, Kubernetes pawg tau mus txog qhov tseem ceeb thiab peb tau pib ntsib ntau yam teeb meem vim muaj tsheb khiav, pawg loj, thiab DNS. Raws li txoj kev, peb tau daws ntau yam teeb meem nthuav txog kev tsiv teb tsaws 200 cov kev pabcuam thiab tuav lub Kubernetes pawg uas muaj 1000 nodes, 15000 pods thiab 48000 lub thawv khiav.

Ua li cas?

Txij li thaum Lub Ib Hlis 2018, peb tau dhau los ntawm ntau theem ntawm kev tsiv teb tsaws chaw. Peb pib los ntawm kev ntim tag nrho peb cov kev pabcuam thiab xa mus rau Kubernetes kuaj huab ib puag ncig. Pib thaum Lub Kaum Hli, peb tau pib hloov pauv txhua qhov kev pabcuam uas twb muaj lawm rau Kubernetes. Thaum Lub Peb Hlis Ntuj xyoo tom ntej, peb ua tiav qhov kev tsiv teb tsaws chaw thiab tam sim no Tinder platform khiav tshwj xeeb rau Kubernetes.

Tsim cov duab rau Kubernetes

Peb muaj ntau dua 30 qhov chaw tso cai rau microservices khiav ntawm Kubernetes pawg. Cov cai hauv cov chaw khaws cia no tau sau ua ntau hom lus (piv txwv li, Node.js, Java, Scala, Go) nrog ntau lub sijhawm ua haujlwm rau tib hom lus.

Lub kaw lus tsim yog tsim los muab cov kev hloov kho siab "tsim cov ntsiab lus" rau txhua qhov kev pabcuam microservice. Nws feem ntau muaj Dockerfile thiab cov npe ntawm cov lus txib ntawm lub plhaub. Lawv cov ntsiab lus yog customizable kiag li, thiab nyob rau tib lub sij hawm, tag nrho cov tsim contexts yog sau raws li ib tug qauv qauv. Standardizing tsim cov ntsiab lus tso cai rau ib qho kev tsim ib qho los tswj tag nrho microservices.

Tinder hloov mus rau Kubernetes
Daim duab 1-1. Standardized tsim txheej txheem ntawm Builder thawv

Txhawm rau kom ua tiav qhov siab tshaj plaws ntawm cov sijhawm ua haujlwm (runtime ib puag ncig) tib txheej txheem tsim yog siv thaum lub sij hawm tsim kho thiab kev sim. Peb tau ntsib ib qho kev sib tw nthuav heev: peb yuav tsum tsim txoj hauv kev los xyuas kom meej qhov sib xws ntawm kev tsim ib puag ncig thoob plaws lub platform. Yuav kom ua tiav qhov no, tag nrho cov txheej txheem sib dhos yog nqa tawm hauv lub thawv tshwj xeeb. Builder.

Nws qhov kev siv lub thawv yuav tsum tau siv cov txheej txheem Docker siab heev. Builder tau txais txiaj ntsig ntawm tus neeg siv hauv zos ID thiab cov lus zais (xws li SSH key, AWS daim ntawv pov thawj, thiab lwm yam) yuav tsum tau nkag mus rau Tinder chaw cia khoom ntiag tug. Nws mounts cov npe hauv zos uas muaj cov peev txheej los khaws cov khoom qub. Txoj hauv kev no txhim kho kev ua tau zoo vim tias nws tshem tawm qhov xav tau los luam cov khoom qub ntawm lub thawv Builder thiab tus tswv tsev. Cov khoom tsim khoom khaws cia tuaj yeem rov siv dua yam tsis muaj kev teeb tsa ntxiv.

Rau qee qhov kev pabcuam, peb yuav tsum tsim lwm lub thawv los qhia qhov chaw sib sau ua ke rau lub sijhawm ua haujlwm (piv txwv li, Node.js bcrypt tsev qiv ntawv tsim cov platform tshwj xeeb binary artifacts thaum lub sijhawm teeb tsa). Thaum lub sijhawm muab tso ua ke, cov kev xav tau yuav txawv ntawm cov kev pabcuam, thiab Dockerfile zaum kawg tau muab tso ua ke ntawm ya.

Kubernetes pawg architecture thiab tsiv teb tsaws

Cluster loj tswj

Peb txiav txim siab siv kub-aws rau automated pawg xa tawm ntawm Amazon EC2 piv txwv. Thaum pib, txhua yam ua haujlwm hauv ib lub pas dej ua ke ntawm nodes. Peb tau pom sai sai txog qhov yuav tsum tau cais cov khoom ua haujlwm los ntawm qhov loj me thiab hom piv txwv kom siv tau zoo dua ntawm cov peev txheej. Lub logic yog tias khiav ob peb loaded multi-threaded pods tau ua kom paub tseeb hais tias ntawm kev ua tau zoo tshaj li lawv coexistence nrog ib tug loj tus naj npawb ntawm ib tug xov tooj pods.

Thaum kawg peb tau txiav txim siab:

  • m5.4x ua - rau kev saib xyuas (Prometheus);
  • c5.4x ua - rau Node.js workload (ib-threaded workload);
  • c5.2x ua - rau Java thiab Mus (ntau txoj haujlwm ua haujlwm);
  • c5.4x ua - rau cov tswj vaj huam sib luag (3 nodes).

Kev tsiv teb tsaws chaw

Ib qho ntawm cov kauj ruam npaj rau kev tsiv teb tsaws los ntawm cov txheej txheem qub rau Kubernetes yog los hloov cov kev sib txuas lus ncaj qha uas twb muaj lawm ntawm cov kev pabcuam rau cov khoom siv thauj khoom tshiab (Elastic Load Balancers (ELB). Lawv tau tsim los ntawm ib qho subnet tshwj xeeb ntawm cov huab virtual ntiag tug (VPC). Cov subnet no tau txuas nrog Kubernetes VPC. Qhov no tso cai rau peb tsiv mus nyob modules maj mam, tsis xav txog qhov tshwj xeeb kev txiav txim ntawm kev pab cuam dependencies.

Cov ntsiab lus kawg no tau tsim los siv qhov hnyav ntawm cov ntaub ntawv DNS uas muaj CNAMEs taw qhia rau txhua ELB tshiab. Txhawm rau hloov pauv, peb ntxiv qhov nkag tshiab taw qhia rau ELB tshiab ntawm Kubernetes qhov kev pabcuam nrog qhov hnyav ntawm 0. Peb mam li teem sijhawm Lub Sijhawm Rau Kev Nyob (TTL) ntawm qhov nkag tau teem rau 0. Tom qab qhov no, cov khoom qub thiab qhov hnyav tshiab tau maj mam kho, thiab thaum kawg 100% ntawm cov load raug xa mus rau lub server tshiab. Tom qab qhov kev hloov pauv tiav, TTL tus nqi rov qab mus rau qib txaus.

Java modules peb muaj tuaj yeem tiv nrog TTL DNS qis, tab sis cov ntawv thov Node tsis tuaj yeem. Ib tug ntawm cov engineers rov sau ib feem ntawm qhov kev sib txuas ntawm pas dej ua ke thiab qhwv nws hauv ib tus neeg saib xyuas uas kho cov pas dej txhua txhua 60 vib nas this. Txoj kev xaiv tau ua haujlwm zoo heev thiab tsis muaj kev cuam tshuam kev ua tau zoo.

Cov ntsiab lus kawm

Qhov txwv ntawm Network Fabric

Thaum sawv ntxov ntxov ntawm Lub Ib Hlis 8, 2019, Tinder platform poob nthav poob. Hauv kev teb rau qhov tsis sib haum xeeb hauv platform latency ua ntej thaum sawv ntxov, tus naj npawb ntawm cov pods thiab cov nodes hauv pawg tau nce. Qhov no ua rau ARP cache tau tag nrho ntawm peb cov nodes.

Muaj peb qhov kev xaiv Linux ntsig txog ARP cache:

Tinder hloov mus rau Kubernetes
(qhov chaw)

gc_thresh 3 - qhov no yog ib qho nyuaj txwv. Cov tsos ntawm "cov neeg nyob ib puag ncig lub rooj dhau" nkag hauv lub cav txhais tau tias txawm tias tom qab synchronous khib nyiab (GC), tsis muaj chaw txaus hauv ARP cache los khaws cov neeg nyob sib ze. Nyob rau hauv cov ntaub ntawv no, lub kernel tsuas yog muab pov tseg lub pob ntawv kiag li.

Peb siv Flannel raws li ib tug network ntaub hauv Kubernetes. Cov pob ntawv raug xa mus dhau VXLAN. VXLAN yog qhov L2 qhov uas tau tsa saum toj ntawm L3 network. Cov thev naus laus zis siv MAC-hauv-UDP (MAC Chaw Nyob-hauv-User Datagram Protocol) encapsulation thiab tso cai nthuav dav ntawm Layer 2 network ntu. Cov txheej txheem thauj khoom ntawm lub cev cov ntaub ntawv chaw network yog IP ntxiv rau UDP.

Tinder hloov mus rau Kubernetes
Daim duab 2–1. Flannel daim duab (qhov chaw)

Tinder hloov mus rau Kubernetes
Daim duab 2–2. VXLAN pob (qhov chaw)

Txhua tus neeg ua haujlwm Kubernetes node faib qhov chaw nyob virtual nrog /24 daim npog ntsej muag los ntawm qhov loj / 9 thaiv. Rau txhua qhov node yog txhais tau tias ib qho kev nkag mus rau hauv lub rooj sib tham, ib qho kev nkag hauv lub rooj ARP (ntawm flannel.1 interface), thiab ib qho kev nkag rau hauv lub rooj hloov pauv (FDB). Lawv raug ntxiv thawj zaug uas tus neeg ua haujlwm node pib lossis txhua lub sijhawm pom cov node tshiab.

Tsis tas li ntawd, kev sib txuas lus ntawm node-pod (los yog pod-pod) kev sib txuas lus thaum kawg mus los ntawm qhov interface eth0 (raws li qhia hauv daim duab Flannel saum toj no). Qhov no ua rau muaj kev nkag mus ntxiv hauv ARP lub rooj rau txhua qhov chaw sib txuas thiab chaw ua haujlwm.

Hauv peb ib puag ncig, hom kev sib txuas lus no muaj ntau heev. Rau cov khoom siv hauv Kubernetes, ELB yog tsim thiab Kubernetes sau npe rau txhua qhov ntawm ELB. Lub ELB tsis paub dab tsi txog cov pods thiab qhov xaiv ntawm node tej zaum yuav tsis yog qhov chaw kawg ntawm pob ntawv. Lub ntsiab lus yog tias thaum lub pob tau txais ib pob ntawv los ntawm ELB, nws txiav txim siab nws coj mus rau hauv tus account cov cai. iptables rau ib qho kev pabcuam tshwj xeeb thiab xaiv ib qho pod ntawm lwm qhov.

Thaum lub sij hawm tsis ua hauj lwm, muaj 605 nodes nyob rau hauv pawg. Rau cov laj thawj tau hais los saum no, qhov no txaus los kov yeej qhov tseem ceeb gc_thresh 3, uas yog lub neej ntawd. Thaum qhov no tshwm sim, tsis tsuas yog cov pob ntawv pib poob, tab sis tag nrho Flannel virtual chaw nyob nrog / 24 daim npog ntsej muag ploj ntawm ARP rooj. Node-pod kev sib txuas lus thiab cov lus nug DNS cuam tshuam (DNS yog tuav hauv pawg; nyeem tom qab hauv kab lus no kom paub meej).

Txhawm rau daws qhov teeb meem no, koj yuav tsum tau ua kom muaj txiaj ntsig gc_thresh 1, gc_thresh 2 ΠΈ gc_thresh 3 thiab rov pib Flannel rov sau npe rau cov tes hauj lwm uas ploj lawm.

Tsis xav txog DNS scaling

Thaum lub sij hawm txoj kev tsiv teb tsaws, peb nquag siv DNS los tswj kev khiav tsheb thiab maj mam hloov cov kev pabcuam los ntawm cov txheej txheem qub mus rau Kubernetes. Peb teeb tsa tus nqi qis TTL rau cov RecordSets cuam tshuam hauv Route53. Thaum cov txheej txheem qub tau khiav ntawm EC2 piv txwv, peb qhov kev daws teeb meem tau taw qhia rau Amazon DNS. Peb tau txais qhov no rau kev tso cai thiab qhov cuam tshuam ntawm TTL qis ntawm peb cov kev pabcuam thiab Amazon cov kev pabcuam (xws li DynamoDB) mus tsis pom ntau.

Raws li peb tsiv teb tsaws kev pabcuam rau Kubernetes, peb pom tias DNS tau ua tiav 250 txhiab thov ib ob. Raws li qhov tshwm sim, cov ntawv thov tau pib muaj sijhawm tas li thiab hnyav rau cov lus nug DNS. Qhov no tau tshwm sim txawm tias muaj kev siv dag zog zoo los txhim kho thiab hloov tus neeg muab kev pabcuam DNS rau CoreDNS (uas thaum lub sijhawm nce siab mus txog 1000 pods khiav ntawm 120 cores).

Thaum tshawb nrhiav lwm yam ua tau thiab kev daws teeb meem, peb tau tshawb pom tsab xov xwm, piav qhia txog haiv neeg tej yam kev mob cuam tshuam rau pob ntawv lim dej netfilter hauv Linux. Lub sij hawm uas peb tau pom, ua ke nrog qhov nce ntxiv insert_failed hauv Flannel interface tau ua raws li qhov kev tshawb pom ntawm tsab xov xwm.

Qhov teeb meem tshwm sim nyob rau theem ntawm Source and Destination Network Address Translation (SNAT thiab DNAT) thiab nkag mus rau hauv lub rooj tom ntej conntrack. Ib qho kev daws teeb meem tau sib tham sab hauv thiab tawm tswv yim los ntawm cov zej zog yog txav DNS mus rau tus neeg ua haujlwm ntawm nws tus kheej. Hauv qhov no:

  • SNAT tsis xav tau vim tias cov tsheb thauj mus los nyob hauv cov node. Nws tsis tas yuav tsum tau routed los ntawm lub interface eth0.
  • DNAT tsis xav tau txij li qhov chaw IP chaw nyob hauv zos rau ntawm node, thiab tsis yog ib qho random xaiv pod raws li txoj cai iptables.

Peb txiav txim siab los ua raws li txoj hauv kev no. CoreDNS tau xa mus ua DaemonSet hauv Kubernetes thiab peb tau siv lub hauv paus ntawm DNS server hauv daws teeb meem.conf txhua lub pod los ntawm kev teeb tsa tus chij --cluster-dns pab pawg kub kubβ€Š. Qhov kev daws teeb meem no tau ua kom zoo rau DNS timeouts.

Txawm li cas los xij, peb tseem pom pob ntawv poob thiab nce hauv lub txee insert_failed hauv Flannel interface. Qhov no txuas ntxiv tom qab qhov kev ua haujlwm tau ua tiav vim tias peb tuaj yeem tshem tawm SNAT thiab / lossis DNAT rau DNS tsheb nkaus xwb. Cov xwm txheej ntawm haiv neeg tau khaws cia rau lwm hom kev tsheb. Hmoov zoo, feem ntau ntawm peb cov pob ntawv yog TCP, thiab yog tias muaj teeb meem tshwm sim lawv tsuas yog rov xa rov qab. Peb tseem tab tom sim nrhiav kev daws teeb meem tsim nyog rau txhua hom tsheb.

Siv Envoy kom zoo dua Load Balancing

Raws li peb tsiv teb tsaws cov kev pabcuam rov qab mus rau Kubernetes, peb tau pib raug kev txom nyem los ntawm qhov tsis sib npaug ntawm cov khoom siv. Peb pom tias HTTP Keepalive ua rau ELB kev sib txuas los dai rau ntawm thawj cov pods npaj txhij ntawm txhua qhov kev xa tawm dov tawm. Yog li, feem ntau ntawm cov tsheb khiav mus los ntawm ib feem me me ntawm cov pods muaj. Thawj qhov kev daws teeb meem peb tau sim yog teeb tsa MaxSurge rau 100% ntawm kev xa tawm tshiab rau cov xwm txheej phem tshaj plaws. Cov txiaj ntsig tau dhau los ua qhov tsis tseem ceeb thiab tsis muaj txiaj ntsig nyob rau hauv cov nqe lus ntawm kev xa tawm loj dua.

Lwm qhov kev daws teeb meem uas peb tau siv yog txhawm rau nce kev thov kev pab cuam rau cov kev pabcuam tseem ceeb. Nyob rau hauv cov ntaub ntawv no, pods tso nyob ze yuav muaj ntau chav rau maneuver piv rau lwm cov pods hnyav. Nws yuav tsis ua hauj lwm nyob rau hauv lub sij hawm ntev vim hais tias nws yuav yog ib tug pov tseg ntawm kev pab. Tsis tas li ntawd, peb cov ntawv thov Node yog ib leeg-xov thiab, raws li, tsuas yog siv ib qho tseem ceeb xwb. Qhov kev daws teeb meem nkaus xwb yog siv cov khoom sib npaug zoo dua.

Peb tau ntev xav kom txaus siab rau Envoy. Qhov xwm txheej tam sim no tso cai rau peb xa nws mus rau txoj kev txwv tsis pub dhau thiab tau txais cov txiaj ntsig tam sim. Envoy yog qhov ua tau zoo, qhib qhov chaw, txheej-XNUMX npe tsim los rau cov ntawv thov SOA loj. Nws tuaj yeem siv cov txheej txheem kev ntsuas siab tshaj plaws, suav nrog kev rov ua haujlwm tsis siv neeg, Circuit Court breakers, thiab kev txwv thoob ntiaj teb. (Nco tseg. txhais.: Koj tuaj yeem nyeem ntxiv txog qhov no hauv qhov no tsab xov xwm txog Istio, uas yog raws li Envoy.)

Peb tuaj nrog kev teeb tsa hauv qab no: muaj Envoy sidecar rau txhua lub pod thiab ib txoj hauv kev, thiab txuas cov pawg mus rau lub thawv hauv zos ntawm qhov chaw nres nkoj. Txhawm rau txo qhov muaj peev xwm cascading thiab tuav lub vojvoog me me, peb siv lub nkoj ntawm Envoy pem hauv ntej-proxy pods, ib qho ntawm Availability Zone (AZ) rau txhua qhov kev pabcuam. Lawv cia siab rau qhov yooj yim kev pab cuam nrhiav cav sau los ntawm ib qho ntawm peb cov engineers uas tsuas yog xa rov qab cov npe ntawm cov pods hauv txhua AZ rau ib qho kev pabcuam.

Kev Pabcuam pem hauv ntej-Envoys tom qab ntawd siv qhov kev pabcuam tshawb pom no nrog ib pawg nce toj thiab txoj hauv kev. Peb teem sijhawm kom txaus, nce tag nrho cov kev teeb tsa hluav taws xob hluav taws xob, thiab ntxiv qhov kev sim ua kom tsawg tsawg los pab nrog kev ua tsis tiav thiab ua kom muaj kev xa mus zoo. Peb muab TCP ELB tso rau pem hauv ntej ntawm txhua qhov kev pab cuam pem hauv ntej-Envoys. Txawm hais tias tus Keepalive los ntawm peb cov txheej txheem tseem ceeb tau daig ntawm qee qhov Envoy pods, lawv tseem tuaj yeem tuav cov khoom thauj tau zoo dua thiab tau teeb tsa kom sib npaug los ntawm qhov tsawg tshaj plaws_request hauv backend.

Rau kev xa tawm, peb siv preStop nuv ntawm ob daim ntawv thov pods thiab sidecar pods. Tus nuv ua rau muaj qhov yuam kev hauv kev tshuaj xyuas cov xwm txheej ntawm qhov kawg ntawm tus thawj tswj hwm nyob rau ntawm lub thawv sidecar thiab mus pw ib ntus kom tso cai rau kev sib txuas ua haujlwm kom xaus.

Ib qho ntawm cov laj thawj uas peb tuaj yeem txav tau sai heev yog vim cov ncauj lus kom ntxaws uas peb tuaj yeem yooj yim koom ua ke rau hauv ib qho kev teeb tsa Prometheus. Qhov no tso cai rau peb pom raws nraim li cas tau tshwm sim thaum peb hloov kho cov kev teeb tsa thiab rov faib cov tsheb khiav.

Cov txiaj ntsig tau tam sim ntawd thiab pom tseeb. Peb tau pib nrog cov kev pabcuam tsis sib npaug tshaj plaws, thiab tam sim no nws ua haujlwm nyob rau hauv pem hauv ntej ntawm 12 cov kev pabcuam tseem ceeb tshaj plaws hauv pawg. Xyoo no peb tab tom npaj kev hloov pauv mus rau qhov kev pabcuam tag nrho nrog kev tshawb nrhiav cov kev pabcuam siab dua, kev tawg Circuit Court, kev kuaj pom qhov tsis zoo, kev txwv tus nqi thiab kev taug qab.

Tinder hloov mus rau Kubernetes
Daim duab 3–1. CPU convergence ntawm ib qho kev pabcuam thaum hloov mus rau Envoy

Tinder hloov mus rau Kubernetes

Tinder hloov mus rau Kubernetes

Qhov kawg tshwm sim

Los ntawm cov kev paub dhau los no thiab kev tshawb fawb ntxiv, peb tau tsim cov pab pawg muaj zog nrog kev txawj ntse hauv kev tsim, xa tawm, thiab ua haujlwm loj Kubernetes pawg. Tag nrho Tinder engineers tam sim no muaj kev paub thiab kev paub los ntim cov thawv thiab xa cov ntawv thov rau Kubernetes.

Thaum xav tau kev muaj peev xwm ntxiv tau tshwm sim ntawm cov txheej txheem qub, peb yuav tsum tau tos ob peb feeb rau qhov tshiab EC2 tshwm sim. Tam sim no cov thawv pib khiav thiab pib ua cov tsheb khiav hauv vib nas this tsis yog feeb. Teem sijhawm ntau lub thawv ntawm ib qho piv txwv EC2 kuj tseem muab kev txhim kho kab rov tav. Yog li ntawd, peb kwv yees qhov txo qis ntawm EC2019 tus nqi hauv 2 piv rau xyoo tas los.

Kev tsiv teb tsaws chaw tau siv sijhawm yuav luag ob xyoos, tab sis peb ua tiav nws thaum Lub Peb Hlis 2019. Tam sim no, Tinder platform khiav tshwj xeeb rau ntawm Kubernetes pawg uas muaj 200 cov kev pabcuam, 1000 nodes, 15 pods thiab 000 khiav ntim. Infrastructure tsis yog lub luag haujlwm ntawm pawg ua haujlwm lawm. Tag nrho peb cov engineers qhia txog lub luag haujlwm no thiab tswj cov txheej txheem ntawm kev tsim thiab xa tawm lawv cov ntawv thov siv code nkaus xwb.

PS los ntawm tus txhais lus

Nyeem kuj tseem muaj cov kab lus ntawm peb cov blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib