Tinder mgbanwe na Kubernetes

Rịba ama. ntụgharị asụsụ.: Ndị ọrụ nke ọrụ Tinder ama ama na nso nso a kesara ụfọdụ nkọwa teknụzụ nke ịkwaga akụrụngwa ha na Kubernetes. Usoro ahụ were ihe fọrọ nke nta ka ọ bụrụ afọ abụọ wee rụpụta mmalite nke nnukwu ikpo okwu na K8s, nke gụnyere ọrụ 200 kwadoro na 48 puku arịa. Olee ihe isi ike ndị na-akpali mmasị ndị injinia Tinder zutere na gịnị ka ha nwetara Gụọ nsụgharị a.

Tinder mgbanwe na Kubernetes

Ntak-a?

Ihe fọrọ nke nta ka ọ bụrụ afọ abụọ gara aga, Tinder kpebiri ịkwaga ikpo okwu ya na Kubernetes. Kubernetes ga-ahapụ ndị otu Tinder ka ha na-akpakọba ma kwaga na mmepụta na obere mbọ site na mbugharị enweghị ike. (nkwanye enweghị mgbanwe). N'okwu a, mgbakọ nke ngwa, ntinye ha, na akụrụngwa n'onwe ya ga-akọwapụta nke ọma site na koodu.

Anyị na-achọkwa ihe ngwọta maka nsogbu nke scalability na nkwụsi ike. Mgbe scaling ghọrọ ihe dị egwu, anyị na-echekarị ọtụtụ nkeji maka ihe ọhụrụ EC2 ga-atụgharị. Echiche nke ịmalite arịa na ịmalite ijere okporo ụzọ na sekọnd kama nkeji oge bịara mara anyị ezigbo mma.

Usoro ahụ wee bụrụ nke siri ike. N'oge njem anyị na mbido 2019, ụyọkọ Kubernetes ruru oke egwu wee malite izute nsogbu dị iche iche n'ihi ụda okporo ụzọ, nha ụyọkọ, na DNS. Ka anyị na-aga, anyị doziri ọtụtụ nsogbu ndị na-adọrọ mmasị metụtara ịkwaga ọrụ 200 na idowe ụyọkọ Kubernetes nke nwere oghere 1000, 15000 pods na 48000 na-agba ọsọ.

N'ụzọ dị aaa?

Kemgbe Jenụwarị 2018, anyị agabigala ọkwa dị iche iche nke mbata. Anyị malitere site na ịbuba ọrụ anyị niile na ibuga ha na gburugburu igwe ojii Kubernetes. Malite na Ọktọba, anyị malitere iji ụzọ ebuga ọrụ niile dị na Kubernetes. Ka ọ na-erule Maachị nke afọ na-esote, anyị gwụchara njem ahụ ma ugbu a, ikpo okwu Tinder na-agba naanị na Kubernetes.

Ihe onyonyo ewuru maka Kubernetes

Anyị nwere ihe karịrị ebe nchekwa koodu isi iri atọ maka microservices na-agba ọsọ na ụyọkọ Kubernetes. Edere koodu dị na ebe nchekwa ndị a n'asụsụ dị iche iche (dịka ọmụmaatụ, Node.js, Java, Scala, Go) nwere ọtụtụ oge ịgba ọsọ maka otu asụsụ.

Emebere usoro ihe owuwu ahụ iji nye “ọnọdụ nrụpụta” nke a na-ahazi nke ọma maka microservice ọ bụla. Ọ na-enwekarị Dockerfile na ndepụta nke iwu shei. Ọdịnaya ha bụ nke a na-ahazi kpamkpam, ma n'otu oge ahụ, a na-ede ihe ndị a niile na-ewu ụlọ dịka usoro ahaziri ahazi. Ịhazi ọnọdụ ihe nrụpụta na-enye ohere ka otu usoro ihe owuwu jikwaa ọrụ microservice niile.

Tinder mgbanwe na Kubernetes
Ọgụgụ 1-1. Usoro iwu kwadoro site na akpa ihe nrụpụta

Iji nweta nkwekọ kachasị n'etiti oge ọsọ ọsọ (gburugburu oge ịgba ọsọ) A na-eji otu usoro ụlọ ahụ eme ihe n'oge mmepe na ule. Anyị chere ihe ịma aka na-adọrọ mmasị ihu: anyị ga-emepụta ụzọ iji hụ na gburugburu ebe a na-ewu ụlọ na-agbanwe agbanwe n'ofe ikpo okwu dum. Iji mezuo nke a, a na-eme usoro mgbakọ niile n'ime akpa pụrụ iche. Nrụpụta.

Mmejuputa akpa ya chọrọ usoro Docker dị elu. Onye nrụpụta na-eketa NJ onye ọrụ mpaghara yana ihe nzuzo (dịka igodo SSH, nzere AWS, wdg) achọrọ iji nweta ebe nchekwa Tinder nkeonwe. Ọ na-ebuli akwụkwọ ndekọ aha mpaghara nwere isi mmalite iji chekwaa ihe arụrụ arụ. Ụzọ a na-eme ka arụmọrụ dịkwuo mma n'ihi na ọ na-ewepụ mkpa ọ dị ịdeomi ihe arụrụ arụ n'etiti ihe Nrụpụta ihe na onye ọbịa. Enwere ike ijikwa ihe nrụpụta ụlọ echekwara na-enweghị nhazi ọzọ.

Maka ụfọdụ ọrụ, anyị ga-emepụta akpa ọzọ iji mapụta gburugburu mkpokọta na gburugburu oge ojiri gaa (dịka ọmụmaatụ, ọbá akwụkwọ Node.js bcrypt na-ewepụta arịa ọnụọgụ abụọ akọwapụtara n'elu ikpo okwu n'oge nrụnye). N'oge usoro nchịkọta, ihe achọrọ nwere ike ịdịgasị iche n'etiti ọrụ, na achịkọtara Dockerfile ikpeazụ na ofufe.

Ihe owuwu ụyọkọ Kubernetes na mbugharị

Njikwa nha ụyọkọ

Anyị kpebiri iji kube-aws maka mwepu ụyọkọ akpaghị aka na Amazon EC2. Na mmalite, ihe niile na-arụ ọrụ n'otu ọdọ mmiri ọnụ. Anyị chọpụtara ngwa ngwa na ọ dị mkpa ikewapụta ibu ọrụ site na nha na ụdị ihe atụ iji jiri akụrụngwa rụọ ọrụ nke ọma. Echiche ahụ bụ na ịgba ọsọ ọtụtụ pọd multi-threaded a na-ebu ibu tụgharịrị bụrụ nke a na-ahụ anya n'ihe gbasara arụmọrụ karịa ibikọ ọnụ ha na ọnụ ọgụgụ buru ibu nke otu eriri.

N'ikpeazụ anyị biri na:

  • m5.4 ukwu - maka nlekota oru (Prometheus);
  • c5.4 ukwu - maka Node.js ọrụ (ọrụ nwere otu eriri);
  • c5.2 ukwu - maka Java na Go (ibu ọrụ multithreaded);
  • c5.4 ukwu - maka njikwa njikwa (3 ọnụ).

Mbugharị

Otu n'ime usoro nkwado maka ịkwaga site na akụrụngwa ochie gaa Kubernetes bụ ibugharị nzikọrịta ozi dị n'etiti ọrụ na ndị na-ahụ maka ibu ọhụrụ (ELB). Emepụtara ha na otu subnet nke igwe ojii nkeonwe (VPC). Ejikọrọ subnet a na Kubernetes VPC. Nke a nyere anyị ohere ịkwaga modul nke nta nke nta, na-atụleghị usoro dabere na ọrụ.

Emepụtara njedebe njedebe ndị a site na iji ndekọ DNS dị arọ nke nwere CNAME na-atụ aka na ELB ọhụrụ ọ bụla. Iji gbanwee, anyị gbakwunyere ntinye ọhụrụ na-atụ aka na ELB ọhụrụ nke ọrụ Kubernetes nke nwere ibu nke 0. Anyị na-edozi Time To Live (TTL) nke ntinye a na-etinye na 0. Mgbe nke a gasịrị, ihe ochie na nke ọhụrụ dị arọ. ji nwayọọ nwayọọ gbanwee, na n'ikpeazụ 100% nke ibu e zigara na ihe nkesa ọhụrụ. Ka emechara mgbanwe ahụ, uru TTL laghachiri n'ọkwa zuru oke.

Modul Java anyị nwere nwere ike ịnagide TTL DNS dị ala, mana ngwa Node enweghị ike. Otu n'ime ndị injinia degharịrị akụkụ nke koodu ọdọ mmiri njikọ wee kechie ya na onye njikwa na-emelite ọdọ mmiri ndị ahụ kwa sekọnd 60 ọ bụla. Usoro a họọrọ na-arụ ọrụ nke ọma na-enweghị mmebi arụmọrụ ọ bụla pụtara ìhè.

Ihe nkuzi a

Oke nke Network Fabric

N'isi ụtụtụ Jenụwarị 8, 2019, ikpo okwu Tinder dara na mberede. Na nzaghachi maka mmụba na-enweghị njikọ na nkwụsị ikpo okwu n'isi ụtụtụ ahụ, ọnụ ọgụgụ pods na ọnụ na ụyọkọ ahụ mụbara. Nke a mere ka cache ARP gwụ n'ọnụ anyị niile.

Enwere nhọrọ Linux atọ metụtara cache ARP:

Tinder mgbanwe na Kubernetes
(isi iyi)

gc_thresh3 - nke a bụ oke siri ike. Ọdịdị nke "tebụl ndị agbata obi na-erubiga ókè" n'ime ndekọ ahụ pụtara na ọbụlagodi mgbe nchịkọta ihe mkpofu synchronous (GC), enweghị ohere zuru ezu na cache ARP iji chekwaa ntinye agbataobi. N'okwu a, kernel tụfuru ngwugwu ahụ kpamkpam.

Anyị na -eji Flannel dị ka ákwà netwọk na Kubernetes. A na-ebufe ngwugwu site na VXLAN. VXLAN bụ ọwara L2 ewelitere n'elu netwọk L3. Nkà na ụzụ na-eji MAC-in-UDP (MAC Adreesị-in-User Datagram Protocol) mkpuchi ma na-enye ohere mgbasawanye nke ngalaba netwọk Layer 2. Usoro njem na netwọk data etiti bụ IP gbakwunyere UDP.

Tinder mgbanwe na Kubernetes
Ọgụgụ 2–1. Eserese flannel (isi iyi)

Tinder mgbanwe na Kubernetes
Ọgụgụ 2-2. ngwugwu VXLAN (isi iyi)

Ọnụ onye ọrụ Kubernetes ọ bụla na-ekenye oghere adreesị mebere yana ihe nkpuchi / 24 site na nnukwu / 9 ngọngọ. Maka ọnụ ụzọ ọ bụla nke a bụ pụtara otu ntinye na tebụl ntụgharị, otu ntinye na tebụl ARP (na flannel.1 interface), na otu ntinye na tebụl mgbanwe (FDB). A na-agbakwunye ha oge mbụ a malitere ọnụ ọnụ onye ọrụ ma ọ bụ oge ọ bụla achọpụtara ọnụ ọhụrụ.

Na mgbakwunye, nkwurịta okwu node-pod (ma ọ bụ pod-pod) na-aga n'ihu na interface ahụ eth0 (dị ka egosiri na eserese Flannel dị n'elu). Nke a na-ebute ntinye agbakwunyere na tebụl ARP maka ebe ọ bụla kwekọrọ na ebe ọbịbịa.

Na gburugburu anyị, ụdị nzikọrịta ozi a na-ahụkarị. Maka ihe ọrụ na Kubernetes, e mepụtara ELB ma Kubernetes debanye aha ọnụ nke ọ bụla na ELB. ELB amaghị ihe ọ bụla gbasara pọd na ọnụ ahọpụtara nwere ike ọ gaghị abụ ebe ikpeazụ nke ngwugwu ahụ. Isi ihe bụ na mgbe ọnụ na-enweta ngwugwu site na ELB, ọ na-atụle ya na-eburu n'uche iwu iptables maka otu ọrụ ma họrọ pọd na ọnụ ụzọ ọzọ.

N'oge ọdịda ahụ, enwere oghere 605 na ụyọkọ ahụ. Maka ebumnuche ndị ekwuru n'elu, nke a zuru oke iji merie mkpa ahụ gc_thresh3, nke bụ ndabara. Mgbe nke a mere, ọ bụghị naanị na a ga-ahapụ ngwugwu, mana oghere adreesị Flannel mebere nke nwere ihe mkpuchi / 24 na-apụ n'anya na tebụl ARP. Akwụsịla nkwurịta okwu Node-pod na ajụjụ DNS (a na-akwado DNS na ụyọkọ; gụọ n'ime akụkọ a maka nkọwa).

Iji dozie nsogbu a, ịkwesịrị ịbawanye ụkpụrụ gc_thresh1, gc_thresh2 и gc_thresh3 ma malitegharịa Flannel ka ịdebanye aha netwọk ndị efu.

Ntụle DNS na-atụghị anya ya

N'oge usoro mbugharị, anyị na-eji DNS arụsi ọrụ ike iji jikwaa okporo ụzọ ma jiri nwayọ bufee ọrụ site na akụrụngwa ochie gaa Kubernetes. Anyị debere ụkpụrụ TTL dị obere maka RecordSets metụtara na Route53. Mgbe akụrụngwa ochie na-arụ ọrụ na oge EC2, nhazi mkpebi anyị rụtụrụ aka na Amazon DNS. Anyị ewere nke a egwuri egwu yana mmetụta TTL dị ala na ọrụ anyị yana ọrụ Amazon (dị ka DynamoDB) ahụghị nke ukwuu.

Ka anyị na-akwaga ọrụ na Kubernetes, anyị chọpụtara na DNS na-edozi arịrịọ 250 puku kwa nkeji. N'ihi ya, ngwa malitere inwe oge na-adịgide adịgide na nke siri ike maka ajụjụ DNS. Nke a mere n'agbanyeghị mbọ dị egwu iji bulie ma gbanwee onye na-eweta DNS na CoreDNS (nke na oke ibu ruru 1000 pods na-agba ọsọ na cores 120).

Ka anyị na-enyocha ihe ndị ọzọ nwere ike ime na azịza ya, anyị chọpụtara ederede, na-akọwa ọnọdụ agbụrụ na-emetụta usoro nzacha ngwugwu ntanye na Linux. Oge nkwụsị anyị hụrụ, yana ọnụ ọgụgụ na-abawanye ụba tinye_emeghị na Flannel interface kwekọrọ na nchoputa nke isiokwu.

Nsogbu a na-eme na ọkwa nke Source na Destination Network Address Translation (SNAT na DNAT) na ntinye na-esote na tebụl. nkwekọrịta. Otu n'ime nsogbu ndị a tụlere n'ime ma ndị obodo tụrụ aro bụ ịkwaga DNS na ọnụ ọnụ onye ọrụ n'onwe ya. N'okwu a:

  • SNAT adịghị mkpa n'ihi na okporo ụzọ na-anọ n'ime ọnụ. Ọ dịghị mkpa ka a ga-ebufe ya site na interface eth0.
  • DNAT adịghị mkpa ebe ọ bụ na ebe IP na-aga bụ mpaghara na ọnụ ọnụ, ọ bụghịkwa pọd ahọpụtara na-enweghị usoro dịka iwu siri dị. iptables.

Anyị kpebiri ịrapara na usoro a. Ebugara CoreDNS dị ka DaemonSet na Kubernetes ma anyị mejuputa sava DNS node dị na mpaghara. azịza .conf pọd ọ bụla site na ịtọ ọkọlọtọ --ụyọkọ-dns otu kubelet . Ihe ngwọta a tụgharịrị ka ọ dị irè maka oge nkwụsị DNS.

Agbanyeghị, anyị ka hụrụ mfu ngwugwu yana mmụba na counter tinye_emeghị na interface Flannel. Nke a gara n'ihu ka emechara usoro ahụ n'ihi na anyị nwere ike iwepụ SNAT na/ma ọ bụ DNAT maka naanị okporo ụzọ DNS. Edobere ọnọdụ agbụrụ maka ụdị okporo ụzọ ndị ọzọ. Ọ dabara nke ọma, ọtụtụ n'ime ngwugwu anyị bụ TCP, ma ọ bụrụ na nsogbu emee, a na-ebugharị ya naanị. Anyị ka na-agbalị ịchọta ngwọta kwesịrị ekwesị maka ụdị okporo ụzọ niile.

Iji onye nnọchi anya maka ịhazi oke ibu ka mma

Ka anyị na-akwaga ọrụ azụ azụ na Kubernetes, anyị malitere na-ata ahụhụ site na ibu na-enweghị isi n'etiti pọd. Anyị chọpụtara na HTTP Keepalive mere ka njikọ ELB kwụgidere na pọd mbụ dị njikere nke mbugharị ọ bụla ewepụtara. Ya mere, ọtụtụ n'ime okporo ụzọ ahụ gafere ntakịrị pasent nke pọd dịnụ. Ihe ngwọta mbụ anyị nwalere bụ ịtọ MaxSurge ka ọ bụrụ 100% na mbugharị ọhụrụ maka ọnọdụ kachasị njọ. Mmetụta ahụ tụgharịrị bụrụ ihe na-abaghị uru na nke na-adịghị mma n'ihe gbasara ibugharị ibu.

Ihe ngwọta ọzọ anyị ji mee ihe bụ ịbawanye arịrịọ akụrụngwa maka ọrụ dị oke mkpa. N'okwu a, pọd ndị e debere n'akụkụ ga-enwe ohere ịmegharị ahụ ma e jiri ya tụnyere pọd ndị ọzọ dị arọ. Ọ gaghị arụ ọrụ n'ikpeazụ n'ihi na ọ ga-abụ n'iyi nke ihe onwunwe. Na mgbakwunye, ngwa Node anyị nwere otu eriri yana, yabụ, enwere ike iji naanị otu isi. Naanị ezigbo ngwọta bụ iji ndozi ibu ka mma.

Anyị ogologo oge chọrọ ịghọta nke ọma Ụkọ. Ọnọdụ dị ugbu a mere ka anyị tinye ya n'ụzọ dị oke oke ma nweta nsonaazụ ozugbo. Onye ozi bụ onye nrụpụta ọrụ dị elu, mepere emepe, proxy Layer-7 emebere maka ngwa SOA buru ibu. Ọ nwere ike mejuputa usoro ndozi ibu dị elu, gụnyere mgbagharị akpaka, ihe mgbaji sekit, na mmachi ọnụego zuru ụwa ọnụ. (Rịba ama. ntụgharị asụsụ.: Ị nwere ike ịgụkwu gbasara nke a na isiokwu a banyere Istio, nke dabeere na Envoy.)

Anyị nwetara nhazi nke a: nwee ụgbọ ala nke Envoy maka pọd ọ bụla na otu ụzọ, ma jikọọ ụyọkọ na akpa na mpaghara site na ọdụ ụgbọ mmiri. Iji wedata cascading nwere ike ma jikwaa obere radius kụrụ, anyị na-eji ụgbọ mmiri nke Envoy front-proxy pods, otu mpaghara Availability (AZ) maka ọrụ ọ bụla. Ha dabere na injin nchoputa ọrụ dị mfe nke otu injinia dere nke weghachiri naanị ndepụta pọd na AZ ọ bụla maka ọrụ enyere.

Ndị ozi n'ihu ndị ọrụ jiri usoro nchọpụta ọrụ a nwere otu ụyọkọ na ụzọ dị elu. Anyị na-ewepụta oge nkwụsị zuru oke, mụbaa ntọala sekit niile, ma gbakwunye nhazi nlegharị anya dị ntakịrị iji nyere aka na ọdịda otu ma hụ na mbusa ọrụ dị mma. Anyị debere TCP ELB n'ihu ndị ozi n'ihu ndị a. Ọbụlagodi na keepalive si na proxy oyi akwa anyị rapaara n'ụfọdụ pọọdụ ndị ozi, ha ka nwere ike ijikwa ibu ahụ nke ọma ma hazie ya ka ha guzozie site na small_request na azụ azụ.

Maka mbugharị, anyị na-eji nko preStop na pọd ngwa yana pọọdụ ụgbọ ala. nko ahụ kpalitere njehie na ịlele ọkwa nke njedebe njedebe admin dị na akpa sidecar wee hie ụra nwa oge iji kwe ka njikọ na-arụ ọrụ kwụsị.

Otu n'ime ihe mere anyị ji nwee ike ịkwaga ngwa ngwa bụ n'ihi metrik zuru ezu na anyị nwere ike ịmekọrịta ngwa ngwa n'ime nrụnye Prometheus. Nke a nyere anyị ohere ịhụ kpọmkwem ihe na-eme mgbe anyị na-edozi nhazi nhazi na nkesa okporo ụzọ.

Nsonaazụ pụtara ozugbo na doro anya. Anyị malitere site na ọrụ ndị na-enweghị isi, ma ugbu a ọ na-arụ ọrụ n'ihu ọrụ 12 kachasị mkpa na ụyọkọ ahụ. N'afọ a, anyị na-eme atụmatụ mgbanwe gaa na ntupu ọrụ zuru oke nwere nchọta ọrụ dị elu karịa, mgbawa sekit, nchọpụta ihe dịpụrụ adịpụ, mmachi ọnụego na nchọta.

Tinder mgbanwe na Kubernetes
Ọgụgụ 3–1. Nchikota CPU nke otu ọrụ n'oge mgbanwe gaa na Envoy

Tinder mgbanwe na Kubernetes

Tinder mgbanwe na Kubernetes

Nsonaazụ ikpeazụ

Site na ahụmịhe a na nyocha ndị ọzọ, anyị ewulitela otu akụrụngwa akụrụngwa siri ike nwere nka siri ike n'ichepụta, ibugharị, na ịrụ nnukwu ụyọkọ Kubernetes. Ndị injinia Tinder niile nwere ugbu a ihe ọmụma na ahụmịhe iji chịkọta arịa ma buga ngwa na Kubernetes.

Mgbe mkpa maka ikike ndị ọzọ bilitere na akụrụngwa ochie, anyị kwesịrị ichere ọtụtụ nkeji maka usoro EC2 ọhụrụ ịmalite. Ugbu a arịa na-amalite ịgba ọsọ wee malite nhazi okporo ụzọ n'ime sekọnd kama nkeji. Ịhazi ọtụtụ akpa n'otu ihe atụ EC2 na-enyekwa ntinye uche kwụ ọtọ. N'ihi ya, anyị na-ebu amụma mbelata dị ukwuu na ọnụ ahịa EC2019 na 2 ma e jiri ya tụnyere afọ gara aga.

Mbugharị ahụ were ihe fọrọ nke nta ka ọ bụrụ afọ abụọ, mana anyị mechara ya na Maachị 2019. Ikpokoro Tinder na-agba naanị na ụyọkọ Kubernetes nke nwere ọrụ 200, ọnụ 1000, pọd 15 na arịa 000 na-agba ọsọ. Akụrụngwa abụghịzi ngalaba naanị otu ọrụ. Ndị injinia anyị niile na-ekekọrịta ọrụ a ma na-achịkwa usoro iwulite na ibuga ngwa ha site na iji naanị koodu.

PS sitere na onye ntụgharị

Gụọkwa usoro akụkọ dị na blọọgụ anyị:

isi: www.habr.com

Tinye a comment