Fifindran'ny Tinder mankany Kubernetes

Fanamarihana. transl.: Nizara pitsopitsony ara-teknika sasany momba ny fifindran'ny fotodrafitrasa ho any Kubernetes ireo mpiasan'ny serivisy Tinder malaza eran-tany. Naharitra roa taona teo ho eo ny dingana ary niafara tamin'ny fanombohana sehatra midadasika be amin'ny K8s, misy serivisy 200 nampiantranoana kaontenera 48 arivo. Inona avy ireo fahasahiranana mahaliana hitan'ireo injeniera Tinder ary inona no vokatra azony? Vakio ity dikanteny ity.

Fifindran'ny Tinder mankany Kubernetes

Nahoana?

Efa ho roa taona lasa izay, nanapa-kevitra ny hamindra ny sehatra misy azy ho any Kubernetes i Tinder. Ny Kubernetes dia mamela ny ekipan'ny Tinder hipetraka sy hifindra amin'ny famokarana miaraka amin'ny ezaka kely indrindra amin'ny alàlan'ny fametrahana tsy miova. (fametrahana tsy miova). Amin'ity tranga ity, ny fivorian'ny fampiharana, ny fametrahana azy, ary ny fotodrafitrasa mihitsy dia hofaritana manokana amin'ny alàlan'ny code.

Nitady vahaolana amin'ny olan'ny scalability sy ny fitoniana ihany koa izahay. Rehefa nanjary nanakiana ny fanamafisam-peo, dia matetika izahay no niandry minitra maromaro mba hivoahan'ny tranga EC2 vaovao. Nanjary nahasarika anay ny hevitra momba ny fandefasana kaontenera sy ny fanombohana ny fifamoivoizana ao anatin'ny segondra fa tsy minitra.

Nivadika ho sarotra ny dingana. Nandritra ny fifindra-moninay tamin'ny fiandohan'ny taona 2019, nahatratra faobe goavana ny kluster Kubernetes ary nanomboka nisedra olana isan-karazany izahay noho ny habetsahan'ny fifamoivoizana, ny haben'ny cluster ary ny DNS. Teny an-dalana, namaha olana mahaliana maro mifandraika amin'ny fifindra-monina tolotra 200 sy ny fikojakojana vondrona Kubernetes misy node 1000, pods 15000 ary kaontenera mandeha 48000 izahay.

Amin'ny fomba ahoana?

Nanomboka tamin’ny volana janoary 2018 dia nandalo dingana maro samihafa ny fifindra-monina. Nanomboka tamin'ny fametrahana ny tolotray rehetra izahay ary nandefa azy ireo ho any amin'ny tontolon'ny rahona fitsapana Kubernetes. Nanomboka tamin'ny volana oktobra, nanomboka namindra ny tolotra rehetra efa misy ho any Kubernetes izahay. Tamin'ny volana martsa tamin'ny taona nanaraka, nahavita ny fifindra-monina izahay ary ankehitriny ny sehatra Tinder dia mandeha irery ao amin'ny Kubernetes.

Manangana sary ho an'ny Kubernetes

Manana tahiry loharano 30 mahery izahay ho an'ny microservices mandeha amin'ny cluster Kubernetes. Ny kaody ao amin'ireo tahiry ireo dia nosoratana tamin'ny fiteny samihafa (ohatra, Node.js, Java, Scala, Go) miaraka amin'ny tontolon'ny fandehanana maro ho an'ny fiteny iray ihany.

Ny rafitra fananganana dia natao hanomezana "contexte build" azo zahana tanteraka ho an'ny microservice tsirairay. Matetika izy io dia misy Dockerfile sy lisitry ny baiko shell. Ny votoatiny dia azo zahana tanteraka, ary miaraka amin'izay, ireo contexte fananganana rehetra ireo dia nosoratana araka ny endrika manara-penitra. Ny fametrahana ny contexte fananganana manara-penitra dia ahafahan'ny rafitra fananganana tokana mitantana ny microservices rehetra.

Fifindran'ny Tinder mankany Kubernetes
Sary 1-1. Fomba fananganana manara-penitra amin'ny alàlan'ny container Builder

Mba hahatratrarana ny tsy fitoviana ambony indrindra eo amin'ny fotoana fandehanana (tontolo iainana) ny dingana fananganana mitovy no ampiasaina mandritra ny fampandrosoana sy ny fitsapana. Niatrika fanamby tena mahaliana izahay: tsy maintsy namolavola fomba hiantohana ny tsy fitovian'ny tontolo fanorenana manerana ny lampihazo manontolo. Mba hanaovana izany, ny fizotran'ny fivoriambe rehetra dia atao ao anaty fitoeran-javatra manokana. Builder.

Nitaky teknika Docker mandroso ny fampiharana azy. Ny Mpamorona dia mandova ny ID mpampiasa eo an-toerana sy ny tsiambaratelo (toy ny lakile SSH, ny fahazoan-dàlana AWS, sns.) takiana amin'ny fidirana amin'ny tahiry Tinder manokana. Mametraka lahatahiry eo an-toerana misy loharano hitehirizana ireo artifacts ho azy. Manatsara ny fampandehanana ity fomba fiasa ity satria manafoana ny filàna kopia ny artifacts manorina eo amin'ny fitoeran'ny Mpamorona sy ny mpampiantrano. Azo ampiasaina indray tsy misy fanampim-panazavana fanampiny ny artifacts fananganana voatahiry.

Ho an'ny serivisy sasany dia tsy maintsy namorona fitoeran-javatra hafa izahay mba hanoratana ny tontolo fanangonana amin'ny tontolon'ny fandehanana (ohatra, ny tranomboky bcrypt Node.js dia mamorona artifact binary manokana amin'ny sehatra mandritra ny fametrahana). Mandritra ny fizotran'ny fanangonana dia mety miovaova ny fepetra takiana amin'ny serivisy, ary ny Dockerfile farany dia natambatra amin'ny lalitra.

Kubernetes cluster architecture sy fifindra-monina

Fitantanana ny haben'ny kluster

Nanapa-kevitra ny hampiasa izahay kube-aws ho an'ny fametrahana cluster mandeha ho azy amin'ny tranga Amazon EC2. Tany am-piandohana, ny zava-drehetra dia niasa tao amin'ny dobo iraisana iray. Tsapanay haingana fa ilaina ny manasaraka ny enta-mavesatry ny asa araka ny habeny sy ny karazana ohatra mba hampiasana tsara kokoa ny loharanon-karena. Ny lojika dia ny fampandehanana pods maromaro misy kofehy maromaro dia lasa azo vinavinaina kokoa amin'ny lafiny fampisehoana noho ny fiaraha-miaina miaraka amin'ny pods tokana misy kofehy maromaro.

Tamin'ny farany dia nipetraka izahay:

  • m5.4x lehibe - ho fanaraha-maso (Prometheus);
  • c5.4x lehibe - ho an'ny enta-mavesatry ny Node.js (enta-mavesatra tokana);
  • c5.2x lehibe - ho an'ny Java sy Go (enta-mavesatra maromaro);
  • c5.4x lehibe - ho an'ny tontonana fanaraha-maso (3 nodes).

fifindra-monina

Iray amin'ireo dingana fiomanana amin'ny fifindra-monina avy amin'ny fotodrafitrasa taloha mankany Kubernetes ny fampidinana ny fifandraisana mivantana misy eo amin'ny serivisy mankany amin'ireo mpandrindra entana vaovao (Elastic Load Balancers (ELB). Izy ireo dia noforonina tamin'ny subnet manokana amin'ny rahona tsy miankina virtoaly (VPC). Ity subnet ity dia mifandray amin'ny VPC Kubernetes. Izany dia namela anay hifindra monina tsikelikely, tsy misy fiheverana ny filaharan'ny fiankinan'ny serivisy.

Ireo teboka farany ireo dia noforonina tamin'ny alàlan'ny andiana rakitra DNS mavesatra izay misy CNAME manondro ny ELB vaovao tsirairay. Mba hivadika dia nampidirinay ny fidirana vaovao manondro ny ELB vaovao amin'ny serivisy Kubernetes miaraka amin'ny lanja 0. Avy eo dia nametraka ny Time To Live (TTL) amin'ny fidirana napetraka ho 0. Taorian'izany, ny lanja taloha sy vaovao dia Nahitsy tsikelikely, ary tamin'ny farany 100% ny entana dia nalefa tany amin'ny mpizara vaovao. Rehefa vita ny fifandimbiasana dia niverina tamin'ny ambaratonga sahaza kokoa ny sandan'ny TTL.

Ny mody Java nanananay dia afaka niatrika ny TTL DNS ambany, fa ny fampiharana Node dia tsy afaka. Ny iray amin'ireo injeniera dia nanoratra indray ny ampahany amin'ny kaody dobo fifandraisana ary nofonosiny tao anaty mpitantana iray izay nanavao ny dobo isaky ny 60 segondra. Niasa tsara ilay fomba nofidina ary tsy nisy fahasimbana hita maso.

Ireo lesona

Ny fetran'ny lamban-tambajotra

Ny marainan'ny 8 Janoary 2019, nianjera tsy nampoizina ny sehatra Tinder. Ho setrin'ny fitomboana tsy misy ifandraisany amin'ny fahatarana amin'ny sehatra tany am-piandohan'io maraina io, dia nitombo ny isan'ny pods sy nodes ao amin'ny cluster. Izany dia nahatonga ny cache ARP ho reraka amin'ny node rehetra.

Misy safidy Linux telo mifandraika amin'ny cache ARP:

Fifindran'ny Tinder mankany Kubernetes
(loharano)

gc_thresh3 - fetra sarotra izany. Ny fisehon'ireo fidirana “mihoatra ny latabatra mpifanolo-bodirindrina” ao amin'ny diary dia midika fa na dia taorian'ny fanangonana fako mirindra (GC), dia tsy ampy ny toerana tao amin'ny cache ARP mba hitehirizana ny fidirana mifanila aminy. Amin'ity tranga ity, ny kernel dia nanary tanteraka ny fonosana.

Mampiasa izahay Flannel toy ny tambazotran'ny Kubernetes. Ampitaina amin'ny VXLAN ny fonosana. VXLAN dia tonelina L2 natsangana eo ambonin'ny tambajotra L3. Ny teknolojia dia mampiasa MAC-in-UDP (MAC Address-in-User Datagram Protocol) encapsulation ary mamela ny fanitarana ny fizarana tambajotra Layer 2. Ny protocole fitaterana ao amin'ny tambajotra ivotoerana ara-batana dia IP plus UDP.

Fifindran'ny Tinder mankany Kubernetes
Sary 2–1. kisary flannel (loharano)

Fifindran'ny Tinder mankany Kubernetes
Sary 2–2. fonosana VXLAN (loharano)

Ny node mpiasa Kubernetes tsirairay dia manome habaka adiresy virtoaly misy saron-tava /24 avy amin'ny sakana /9 lehibe kokoa. Ho an'ny node tsirairay dia ity dia midika hoe fidirana iray ao amin'ny latabatra fitetezana, fidirana iray ao amin'ny latabatra ARP (eo amin'ny seha-pifaneraserana flannel.1), ary fidirana iray ao amin'ny latabatra fanodina (FDB). Izy ireo dia ampiana amin'ny fotoana voalohany natomboka ny node mpiasa na isaky ny misy node vaovao hita.

Ankoatra izany, ny fifandraisana node-pod (na pod-pod) dia mandalo amin'ny interface eth0 (araka ny aseho amin'ny kisary Flannel etsy ambony). Izany dia miteraka fidirana fanampiny ao amin'ny tabilao ARP ho an'ny loharano tsirairay sy ny mpampiantrano toerana.

Eo amin'ny tontolo iainantsika dia tena mahazatra io karazana fifandraisana io. Ho an'ny zavatra serivisy ao amin'ny Kubernetes, dia misy ELB noforonina ary i Kubernetes dia manoratra ny node tsirairay amin'ny ELB. Ny ELB dia tsy mahalala na inona na inona momba ny pods ary ny node voafantina dia mety tsy ny toerana farany amin'ny fonosana. Ny zava-misy dia rehefa mahazo fonosana avy amin'ny ELB ny node iray, dia heveriny fa mandray ny fitsipika izany iptables ho an'ny serivisy manokana ary mifidy pod amin'ny node hafa.

Tamin'ny fotoanan'ny tsy fahombiazana dia nisy 605 nodes tao amin'ny cluster. Noho ireo antony voalaza etsy ambony ireo dia ampy handresena ny maha-zava-dehibe izany gc_thresh3, izay ny default. Rehefa mitranga izany dia tsy ny fonosana ihany no manomboka milatsaka, fa ny habaka adiresy virtoaly Flannel manontolo miaraka amin'ny saron-tava / 24 dia tsy hita ao amin'ny latabatra ARP. Tapaka ny fifandraisana amin'ny node-pod sy ny fanontaniana DNS (DNS dia apetraka ao anaty cluster; vakio ato amin'ity lahatsoratra ity ny antsipiriany).

Mba hamahana ity olana ity dia mila mampitombo ny soatoavina ianao gc_thresh1, gc_thresh2 и gc_thresh3 ary avereno indray ny Flannel mba hanoratra indray ireo tambajotra tsy hita.

Fanamafisana DNS tsy nampoizina

Nandritra ny fizotry ny fifindra-monina dia nampiasa DNS mavitrika izahay hitantana ny fifamoivoizana ary hamindra tsikelikely ny serivisy avy amin'ny fotodrafitrasa taloha mankany Kubernetes. Nametraka sanda TTL somary ambany izahay ho an'ny RecordSets mifandraika amin'ny Route53. Rehefa nandeha tamin'ny tranga EC2 ny fotodrafitrasa taloha, dia nanondro ny Amazon DNS ny fikirakirana solver. Noraisinay ho azo antoka izany ary ny fiantraikan'ny TTL ambany amin'ny serivisy sy ny serivisy Amazon (toy ny DynamoDB) dia tsy voamarika loatra.

Rehefa nifindra tolotra ho any Kubernetes izahay dia nahita fa ny DNS dia mamatsy fangatahana 250 arivo isan-tsegondra. Vokatr'izany dia nanomboka niaina fotoana tsy tapaka sy matotra ho an'ny fangatahana DNS ny fampiharana. Nitranga izany na dia teo aza ny ezaka tsy nampoizina hanamafisana sy hamadika ny mpamatsy DNS amin'ny CoreDNS (izay nahatratra 1000 pods mandeha amin'ny cores 120 amin'ny entana ambony indrindra).

Teo am-pikarohana ireo antony sy vahaolana hafa azo atao, dia nahita izahay lahatsoratra, mamaritra ny toetry ny hazakazaka misy fiantraikany amin'ny rafitra sivana fonosana sivana net amin'ny Linux. Ny fe-potoana hitanay, miaraka amin'ny kaontina mitombo insert_failed ao amin'ny interface Flannel dia nifanaraka tamin'ny valin'ny lahatsoratra.

Ny olana dia mitranga eo amin'ny dingan'ny Source and Destination Network Address Translation (SNAT sy DNAT) ary ny fidirana manaraka eo amin'ny latabatra. mampifandray. Iray amin'ireo vahaolana noresahina tao anatiny sy naroson'ny vondrom-piarahamonina ny famindrana ny DNS ho any amin'ny node mpiasa. Raha izany dia:

  • Tsy ilaina ny SNAT satria mijanona ao anaty node ny fifamoivoizana. Tsy mila mandeha amin'ny alalan'ny interface tsara eth0.
  • Tsy ilaina ny DNAT satria eo an-toerana ny IP alehan'ny node, fa tsy pod voafantina kisendrasendra araka ny fitsipika iptables.

Nanapa-kevitra ny hifikitra amin'io fomba fiasa io izahay. CoreDNS dia napetraka ho DaemonSet ao amin'ny Kubernetes ary nampihatra mpizara DNS node eo an-toerana izahay solve.conf ny pod tsirairay amin'ny fametrahana saina --cluster-dns didy kubelet . Ity vahaolana ity dia hita fa mahomby amin'ny DNS timeouts.

Na izany aza, mbola hitanay ny fahaverezan'ny fonosana sy ny fitomboan'ny kaontera insert_failed ao amin'ny interface Flannel. Nitohy izany taorian'ny fampiharana ny vahaolana satria afaka nanafoana ny SNAT sy/na DNAT ho an'ny fifamoivoizana DNS ihany izahay. Ny fepetran'ny hazakazaka dia voatahiry ho an'ny karazana fifamoivoizana hafa. Soa ihany fa ny ankamaroan'ny fonosanay dia TCP, ary raha misy olana dia averina alefa fotsiny. Mbola mitady vahaolana sahaza ho an’ny karazana fifamoivoizana rehetra izahay.

Mampiasa Envoy ho an'ny fampifandanjana entana tsara kokoa

Rehefa nifindra tolotra backend ho any Kubernetes izahay, dia nanomboka nijaly noho ny entana tsy voalanjalanja eo anelanelan'ny pods. Hitanay fa ny HTTP Keepalive dia nahatonga ny fifandraisana ELB hihantona amin'ireo pods efa vonona voalohany amin'ny fandefasana tsirairay navoaka. Noho izany, ny ankamaroan'ny fifamoivoizana dia nandalo ampahany kely amin'ny pods misy. Ny vahaolana voalohany nosedrainay dia ny fametrahana MaxSurge ho 100% amin'ny fametrahana vaovao ho an'ny tranga ratsy indrindra. Ny vokany dia nivadika ho tsinontsinona sy tsy nampanantenaina amin'ny resaka fametrahana lehibe kokoa.

Vahaolana iray hafa nampiasainay dia ny fampitomboana ny fangatahana loharanon-karena ho an'ny serivisy manan-danja. Amin'ity tranga ity, ny pods apetraka eo akaiky eo dia hanana toerana malalaka kokoa raha oharina amin'ny pods mavesatra hafa. Tsy hahomby koa izany rehefa ela ny ela satria ho fandaniam-bola. Ho fanampin'izany, ny fampiharana Node dia manana kofehy tokana ary, araka izany, dia tsy afaka mampiasa afa-tsy fototra iray. Ny hany vahaolana tena izy dia ny fampiasana fampifandanjana entana tsara kokoa.

Efa ela no naniry ny hankasitraka tanteraka iraka. Ny zava-misy amin'izao fotoana izao dia nahafahan'ny fametrahana azy tamin'ny fomba voafetra sy nahazoana vokatra avy hatrany. Envoy dia proxy avo lenta, open-source, layer-XNUMX natao ho an'ny rindranasa SOA lehibe. Afaka mampihatra teknika fampifandanjana entana mandroso izy, ao anatin'izany ny famerenana mandeha ho azy, ny fiatoana amin'ny faritra ary ny famerana ny tahan'ny eran-tany. (Fanamarihana. transl.: Azonao atao ny mamaky bebe kokoa momba izany ao amin'ny ity lahatsoratra ity momba an'i Istio, izay mifototra amin'ny Envoy.)

Tonga tamin'ity fanamboarana manaraka ity izahay: manana sidecar Envoy ho an'ny pod tsirairay sy lalana tokana, ary ampifandraiso amin'ny kaontenera eo an-toerana amin'ny alàlan'ny seranana ny cluster. Mba hampihenana ny mety hisian'ny fikorianan'ny rivotra sy ny fihazonana ny radius voadona kely, dia nampiasa andian-tsambon'ny Envoy front-proxy pods izahay, iray isaky ny Availability Zone (AZ) isaky ny serivisy. Niantehitra tamin'ny maotera fitadiavana serivisy tsotra nosoratan'ny injeniera iray izahay izay namerina fotsiny lisitry ny pods isaky ny AZ ho an'ny serivisy iray.

Avy eo dia nampiasa ity mekanisma fitadiavana serivisy ity miaraka amin'ny kluster sy lalana iray ny serivisy eo anoloana. Nametraka fe-potoana sahaza izahay, nampitombo ny fandrindrana fiatoan'ny faritra rehetra, ary nampiana fanazaran-tena faran'izay kely mba hanampiana amin'ny tsy fahombiazana tokana sy hiantohana ny fametrahana milamina. Nametraka TCP ELB teo anoloan'ny tsirairay amin'ireo iraka eo anoloana ireo izahay. Na dia niraikitra tamin'ny pods Envoy sasany aza ny keepalive avy amin'ny sosona proxy lehibe, dia mbola afaka nitantana tsara kokoa ny entana izy ireo ary namboarina mba handanjalanja amin'ny alalan'ny least_request ao ambadika.

Ho an'ny fametrahana dia nampiasa ny fihokoana preStop teo amin'ny pods fampiharana sy ny pods sidecar izahay. Niteraka hadisoana teo amin'ny fijerena ny satan'ny tondro fiafaran'ny admin hita eo amin'ny kaontenera sidecar ny hook ary natory vetivety mba hamela ny fifandraisana mavitrika hitsahatra.

Ny iray amin'ireo antony nahafahantsika nifindra haingana dia noho ny metrika amin'ny antsipiriany izay afaka nampidirinay mora tamin'ny fametrahana Prometheus mahazatra. Izany dia namela anay hahita tsara ny zava-mitranga rehefa nanitsy ny mari-pamantarana fanamafisana sy nizara indray ny fifamoivoizana.

Niharihary teo no ho eo ny vokatra. Nanomboka tamin'ny serivisy tsy voalanjalanja indrindra izahay, ary amin'izao fotoana izao dia miasa eo anoloan'ireo serivisy 12 manan-danja indrindra ao amin'ny cluster. Amin'ity taona ity dia mikasa ny hifindra ho amin'ny harato serivisy feno izahay miaraka amin'ny fahitana serivisy mandroso kokoa, fanapahana fitetezam-paritra, fitiliana lavitra kokoa, famerana ny tahan'ny ary tracing.

Fifindran'ny Tinder mankany Kubernetes
Sary 3–1. CPU convergence amin'ny serivisy iray mandritra ny tetezamita mankany Envoy

Fifindran'ny Tinder mankany Kubernetes

Fifindran'ny Tinder mankany Kubernetes

Valiny farany

Tamin'ny alalan'ity traikefa sy fikarohana fanampiny ity, dia nanangana ekipa fotodrafitrasa matanjaka izahay manana fahaiza-manao matanjaka amin'ny famolavolana, fametrahana ary fampandehanana vondrona Kubernetes lehibe. Ny injeniera Tinder rehetra izao dia manana ny fahalalana sy traikefa amin'ny famenoana ireo kaontenera ary mametraka fampiharana amin'ny Kubernetes.

Rehefa nipoitra ny filana fahafahana fanampiny tamin'ny fotodrafitrasa taloha, dia tsy maintsy niandry minitra maromaro izahay vao natomboka ny tranga EC2 vaovao. Manomboka mandeha izao ny kaontenera ary manomboka manodina ny fifamoivoizana ao anatin'ny segondra fa tsy minitra. Ny fandrindrana kaontenera maromaro amin'ny ohatra EC2 tokana dia manome fifantohana mitsivalana. Vokatr'izany dia maminavina ny fihenan'ny vidin'ny EC2019 izahay amin'ny taona 2 raha oharina amin'ny taona lasa.

Efa ho roa taona ny fifindra-monina, saingy vita tamin'ny martsa 2019 izany. Amin'izao fotoana izao, ny sehatra Tinder dia mandeha irery amin'ny cluster Kubernetes misy serivisy 200, node 1000, pods 15 ary kaontenera mandeha 000. Tsy ny fotodrafitrasa irery intsony no fehezin'ny ekipa miasa. Ny injenierantsika rehetra dia mizara izany andraikitra izany ary mifehy ny fizotran'ny fananganana sy ny fametrahana ny fampiharana azy ireo amin'ny fampiasana kaody fotsiny.

PS avy amin'ny mpandika teny

Vakio ihany koa lahatsoratra maromaro ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment