Thoir an aire. eadar-theangachadh.Tha an t-artaigil seo, a sgrĂŹobh Galo Navarro, PrĂŹomh Innleadair Bathar-bog aig aâ chompanaidh Eòrpach Adevinta, na ârannsachadhâ inntinneach is teagasgach air raon obrachaidhean bun-structair. Chaidh an tiotal tĂšsail atharrachadh beagan san eadar-theangachadh airson adhbhar a mhĂŹnicheas an t-Ăšghdar aig an toiseach.

Nota bhon ĂšghdarTha e coltach ris an fhoillseachadh seo Tha an t-artaigil seo air barrachd aire fhaighinn na bha dĂšil. Tha mi fhathast aâ faighinn beachdan feargach mun tiotal meallta agus cuid de luchd-leughaidh aâ faireachdainn mĂŹ-thoilichte. Tha mi aâ tuigsinn nan adhbharan airson seo, agus mar sin ged a tha mi ann an cunnart an sgeulachd gu lèir a mhilleadh, tha mi airson mĂŹneachadh dè a tha an t-artaigil seo mu dheidhinn. Nuair a bhios sgiobaidhean aâ gluasad gu Kubernetes, bidh mi aâ mothachadh rud neònach: a h-uile uair a thig duilgheadas am bĂ rr (mar eisimpleir, barrachd dĂ il Ă s deidh imrich), is e Kubernetes aâ chiad rud a chuireas iad aâ choire, ach tha e aâ tionndadh a-mach nach e an t-eagraiche a tha ri choireachadh idir. Tha an t-artaigil seo ag innse sgeulachd aon chĂšis mar sin. Tha an tiotal aige aâ nochdadh glaodh bho aon de na luchd-leasachaidh againn (chĂŹ thu nas fhaide air adhart nach robh dad aig Kubernetes ris). Cha lorg thu foillseachaidhean iongantach sam bith mu Kubernetes, ach faodaidh tu a bhith an dĂšil ri beagan leasanan math mu shiostaman iom-fhillte.
Beagan sheachdainean air ais, bha an sgioba agam aâ gluasad aon mhicro-sheirbheis gu Ă rd-Ăšrlar bunaiteach anns an robh CI/CD, Ă rainneachd cinneasachaidh stèidhichte air Kubernetes, meatairean, agus feartan feumail eile. Bâ e pròiseact pĂŹleat a bha seo: bha sinn an dĂšil togail air agus timcheall air 150 seirbheis eile a ghluasad anns na mĂŹosan a tha romhainn. Tha na seirbheisean seo uile aâ toirt cumhachd do chuid de na margaidhean air-loidhne as motha san SpĂ inn (Infojobs, Fotocasa, agus feadhainn eile).
Ăs dèidh dhuinn an aplacaid a chuir a-mach gu Kubernetes agus beagan trafaic ath-stiĂšireadh thuige, bha iongnadh eagallach romhainn. Latency (latency) Bha an Ă ireamh de dhâiarrtasan ann an Kubernetes 10 uiread nas Ă irde na ann an EC2. Mu dheireadh, bâ fheudar fuasgladh a lorg air an duilgheadas seo no an imrich microservice a thrèigsinn (agus, is dòcha, am pròiseact gu lèir).
Carson a tha latency cho Ă rd ann an Kubernetes na ann an EC2?
Gus am bacadh a lorg, chruinnich sinn meatairean air feadh slighe na h-iarrtas gu lèir. Tha an ailtireachd againn sĂŹmplidh: bidh geata API (Zuul) aâ cur iarrtasan gu eisimpleirean microservice ann an EC2 no Kubernetes. Ann an Kubernetes, bidh sinn aâ cleachdadh Smachdair Ingress NGINX, agus tha na backends nan nithean cunbhalach den t-seòrsa le tagradh JVM air Ă rd-Ăšrlar Spring.
EC2
+---------------+
| +---------+ |
| | | |
+-------> BACKEND | |
| | | | |
| | +---------+ |
| +---------------+
+------+ |
Public | | |
-------> ZUUL +--+
traffic | | | Kubernetes
+------+ | +-----------------------------+
| | +-------+ +---------+ |
| | | | xx | | |
+-------> NGINX +------> BACKEND | |
| | | xx | | |
| +-------+ +---------+ |
+-----------------------------+Bha coltas ann gu robh aâ chĂšis co-cheangailte ri dĂ il aig ĂŹre tòiseachaidh giollachd aâ chĂšl-raoin (chomharraich mi an raon trioblaideach air aâ ghraf mar âxxâ). Ann an EC2, thug freagairt an tagraidh timcheall air 20 ms. Ann an Kubernetes, dhâ èirich an dĂ il gu 100-200 ms.
Chuir sinn Ă s gu sgiobalta do na h-amharasan a dhâ fhaodadh a bhith ann co-cheangailte ris an atharrachadh ruith-Ăšine. Dhâfhan an dreach JVM mar a bha e. Cha robh cĂšisean containerachaidh co-cheangailte ri chèile nas motha: bha an aplacaid mu thrĂ th ag obair gu soirbheachail ann an soithichean ann an EC2. Luchdaich? Ach chunnaic sinn latencies Ă rd eadhon le aon iarrtas gach diog. Bha stadan cruinneachadh sgudail neo-shuntasach cuideachd.
Dhâfhaighnich aon de na rianairean Kubernetes againn an robh eisimeileachdan taobh a-muigh sam bith aig an aplacaid, leis gun robh ceistean DNS air cĂšisean coltach ris adhbhrachadh roimhe.
Beachd-bharail 1: Fuasgladh ainmean DNS
Airson gach iarrtas, bidh an aplacaid againn aâ dèanamh aon gu trĂŹ gairmean gu eisimpleir AWS Elasticsearch ann an Ă rainn mar elastic.spain.adevinta.comTaobh a-staigh nan soithichean a thâ againn , gus an urrainn dhuinn sgrĂšdadh a dhèanamh a bheil an rannsachadh fearainn aâ toirt Ăšine mhòr dha-rĂŹribh.
Ceistean DNS bhon chontair:
[root@be-851c76f696-alf8z /]# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 22 msec
;; Query time: 22 msec
;; Query time: 29 msec
;; Query time: 21 msec
;; Query time: 28 msec
;; Query time: 43 msec
;; Query time: 39 msecIarrtasan coltach ri seo bho aon de na h-eisimpleirean EC2 a tha aâ ruith an tagraidh:
bash-4.4# while true; do dig "elastic.spain.adevinta.com" | grep time; sleep 2; done
;; Query time: 77 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msec
;; Query time: 0 msecLeis gu bheil rannsachaidhean aâ toirt timcheall air 30ms, dhâfhĂ s e soilleir gu robh rĂšn DNS nuair a bha e aâ faighinn cothrom air Elasticsearch gu dearbh aâ cur ris an dĂ il a bha aâ sĂŹor fhĂ s.
Ach, bha seo neònach airson dà adhbhar:
- Tha tòrr aplacaidean Kubernetes againn mu thrà th a bhios ag eadar-obrachadh le goireasan AWS gun dà il mhòr a bhith orra. Ge bith dè an adhbhar, tha e sònraichte don chÚis seo.
- Tha fios againn gu bheil an JVM aâ cur an gnĂŹomh tasgadan DNS sa chuimhne. Anns na h-ĂŹomhaighean againn, tha luach an TTL air a chòdachadh gu cruaidh ann an
$JAVA_HOME/jre/lib/security/java.securityagus suidhich gu 10 diogan:networkaddress.cache.ttl = 10Ann am faclan eile, bu chòir don JVM a h-uile ceist DNS a stòradh airson 10 diogan.
Gus aâ chiad bharail a dhearbhadh, chuir sinn romhainn rannsachaidhean DNS a dhĂŹ-cheadachadh airson Ăšine agus faicinn an rèiticheadh ââan duilgheadas. An toiseach, smaoinich sinn air an aplacaid ath-rèiteachadh gus conaltradh le Elasticsearch gu dĂŹreach tro sheòladh IP seach ainm an Ă rainn aige. Bhiodh seo air atharrachadh còd agus cleachdadh Ăšr a dhĂŹth, agus mar sin dĂŹreach mhapadh sinn an Ă rainn chun t-seòladh IP aige ann an /etc/hosts:
34.55.5.111 elastic.spain.adevinta.comFhuair an soitheach a sheòladh IP cha mhòr sa bhad. Mar thoradh air an seo, bha beagan leasachaidh ann, ach cha robh sinn ach beagan nas fhaisge air an ĂŹre dĂ il a bha dĂšil. Ged a bha fuasgladh DNS aâ toirt Ăšine mhòr, cha robh an fhĂŹor adhbhar fhathast ri lorg againn.
Diagnosachd lĂŹonra
Cho-dhĂšin sinn an trafaic bhon chontair a sgrĂšdadh le bhith aâ cleachdadh tcpdumpgus sĂšil a chumail air dè dĂŹreach a tha aâ tachairt air an lĂŹonra:
[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap An uairsin chuir sinn cuid de dhâiarrtasan agus luchdaich sinn sĂŹos an glacadh aca (kubectl cp my-service:/capture.pcap capture.pcap) airson tuilleadh mion-sgrĂšdaidh ann an .
Cha robh dad amharasach mu na ceistean DNS (ach a-mhĂ in aon mhion-fhiosrachadh beag a bhruidhneas mi nas fhaide air adhart). Ach, bha beagan rudan neònach ann an mar a phròiseas an t-seirbheis againn gach iarrtas. Seo dealbh-sgrĂŹn bho ghlacadh aâ sealltainn an iarrtas ga ghabhail mus do thòisich am freagairt:

Tha Ă ireamhan nam pacaidean air an sealltainn sa chiad cholbh. Airson soilleireachd, tha mi air na diofar shruthan TCP a chomharrachadh ann an dath.
Tha an sruth uaine aâ tòiseachadh le pacaid 328 aâ sealltainn mar a stèidhich an neach-dèiligidh (172.17.22.150) ceangal TCP ris aâ chontair (172.17.36.147). Ăs dèidh aâ chiad chrathadh-lĂ imhe (328-330), thug pacaid 331 HTTP GET /v1/.. â iarrtas aâ tighinn a-steach don t-seirbheis againn. Thug am pròiseas gu lèir 1 ms.
Tha an sruth liath (aâ tòiseachadh le pacaid 339) aâ sealltainn gun do chuir an t-seirbheis againn iarrtas HTTP chun an eisimpleir Elasticsearch (chan eil crathadh-lĂ imhe TCP ann oir tha e aâ cleachdadh ceangal a tha ann mu thrĂ th). Thug seo 18 ms.
Gu ruige seo tha a h-uile cà il ceart gu leòr, agus tha na h-amannan faisg air a rèir nan dà il ris a bheil dÚil (20-30 ms nuair a thèid a thomhas bhon neach-dèiligidh).
Ach, bheir an earrann ghorm 86 ms. Dè tha aâ dol air adhart an sin? Le pacaid 333, chuir an t-seirbheis againn iarrtas HTTP GET gu /latest/meta-data/iam/security-credentials, agus dĂŹreach Ă s a dhèidh, thairis air an aon cheangal TCP, iarrtas GET eile gu /latest/meta-data/iam/security-credentials/arn:...
Fhuair sinn a-mach gu robh seo a rèir gach iarrtas tron ââlorg. Gu dearbh, bha rĂšn DNS beagan nas slaodaiche anns na soithichean againn (tha am mĂŹneachadh airson an iongantas seo gu math inntinneach, ach sĂ bhalaidh mi e airson artaigil air leth). Thionndaidh e a-mach gur e gairmean chun t-seirbheis AWS Instance Metadata airson gach iarrtas a bha ag adhbhrachadh nan dĂ il mhòr.
Beachd-bharail 2: Cus ghairmean gu AWS
Buinidh an dĂ cheann-uidhe Bidh am microservice againn aâ cleachdadh na seirbheis seo nuair a bhios iad ag obair le Elasticsearch. Tha an dĂ ghairm nam pĂ irt den phròiseas Ăšghdarrachaidh bunaiteach. Bidh an ceann-uidhe a chaidh a chleachdadh rè an iarrtas tĂšsail aâ toirt seachad an dreuchd IAM co-cheangailte ris an eisimpleir.
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/
arn:aws:iam::<account_id>:role/some_roleBidh an dĂ rna iarrtas aâ cur fios chun dĂ rna ceann-uidhe airson ceadan sealach airson an eisimpleir seo:
/ # curl http://169.254.169.254/latest/meta-data/iam/security-credentials/arn:aws:iam::<account_id>:role/some_role`
{
"Code" : "Success",
"LastUpdated" : "2012-04-26T16:39:16Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "ASIAIOSFODNN7EXAMPLE",
"SecretAccessKey" : "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"Token" : "token",
"Expiration" : "2017-05-17T15:09:54Z"
} Faodaidh an neach-dèiligidh an cleachdadh airson Ăšine ghoirid agus feumaidh iad teisteanasan Ăšra fhaighinn bho Ă m gu Ă m (gus an tig an ceann-latha gu crĂŹch). ExpirationTha am modail sĂŹmplidh: bidh AWS gu tric aâ cuairteachadh iuchraichean sealach airson adhbharan tèarainteachd, ach faodaidh luchd-ceannach an stòradh san tasgadan airson beagan mhionaidean gus an cunnart coileanaidh a tha an lĂšib teisteanasan Ăšra fhaighinn a chothromachadh.
Bu chòir don AWS Java SDK uallach a ghabhail airson aâ phròiseas seo a chur air dòigh, ach airson adhbhar air choireigin chan eil seo aâ tachairt.
Ăs dèidh dhuinn sgrĂšdadh a dhèanamh air cĂšisean air GitHub, thachair sinn ri duilgheadas Chuidich i sinn le bhith aâ dearbhadh an taobh anns am bu chòir dhuinn cladhach nas fhaide.
Bidh SDK AWS ag Ăšrachadh teisteanasan nuair a thachras aon de na cumhaichean a leanas:
- An ceann-latha crĂŹochnachaidh aca (
Expiration) aâ dol a-steachEXPIRATION_THRESHOLD, air a chòdachadh gu cruaidh gu 15 mionaidean. - Tha barrachd Ăšine air a dhol seachad bhon oidhirp mu dheireadh air teisteanasan Ăšrachadh na tha
REFRESH_THRESHOLD, air a chòdachadh gu cruaidh airson 60 mionaid.
Gus na cinn-latha crĂŹochnachaidh a bhâ aig na teisteanasan a bha sinn aâ faighinn fhaicinn, ruith sinn na h-òrdughan cURL gu h-Ă rd bhon dĂ chuid an soitheach agus an eisimpleir EC2. Bha ceann-latha crĂŹochnachaidh mòran nas giorra aig an teisteanas a fhuaireadh bhon t-soitheach: dĂŹreach 15 mionaidean.
A-nis bha a h-uile cĂ il soilleir: airson aâ chiad iarrtas, bha an t-seirbheis againn aâ faighinn teisteanasan sealach. Leis gun robh an ceann-latha crĂŹochnachaidh aca cuibhrichte gu 15 mionaidean, bhiodh an AWS SDK gan Ăšrachadh air iarrtasan Ă s dèidh sin. Agus thachair seo le gach iarrtas.
Carson a tha Ăšine dligheachd theisteanasan air fĂ s nas giorra?
Tha seirbheis Meata-dhĂ ta Eisimpleirean AWS air a dhealbhadh gus obrachadh le eisimplearan EC2, chan e Kubernetes. Air an lĂ imh eile, cha robh sinn airson eadar-aghaidh an tagraidh atharrachadh. Gus seo a choileanadh, chleachd sinn â inneal a leigeas le luchd-cleachdaidh (innleadairean a bhios aâ cur a-mach aplacaidean chun aâ chruinneachaidh) dreuchdan IAM a shònrachadh do shoithichean ann am pods mar gum biodh iad nan eisimpleirean EC2, le bhith aâ cleachdadh riochdairean air gach nĂłd Kubernetes. Bidh KIAM aâ glacadh ghairmean chun t-seirbheis AWS Instance Metadata agus gan giullachd bhon tasgadan aige, Ă s deidh dhaibh a bhith air an toirt bho AWS roimhe. Bho shealladh an aplacaid, chan eil dad ag atharrachadh.
Bidh KIAM aâ toirt seachad teisteanasan geĂ rr-Ăšine do phodan. Tha seo ciallach leis gu bheil fad-beatha cuibheasach pod nas giorra na fad-beatha eisimpleir EC2. Gu gnĂ thach, thig crĂŹoch air teisteanasan. .
Mu dheireadh, bidh an dĂ roghainn bunaiteach seo a chur còmhla aâ cruthachadh duilgheadas. Bidh a h-uile teisteanas a thèid a thoirt do thagradh aâ tighinn gu crĂŹch an dèidh 15 mionaidean. Bidh SDK Java AWS aâ sparradh Ăšrachadh air teisteanas sam bith aig a bheil nas lugha na 15 mionaidean air fhĂ gail gus an tig an crĂŹoch air.
Mar thoradh air an sin, feumaidh an teisteanas sealach Ăšrachadh le gach iarrtas, agus tha sin aâ ciallachadh grunn ghairmean chun API AWS agus aâ meudachadh an dĂ il gu mòr. Lorg sinn seo ann an AWS Java SDK. , a tha aâ toirt iomradh air duilgheadas coltach ris.
Thionndaidh am fuasgladh a-mach gu bhith sĂŹmplidh. Rinn sinn ath-rèiteachadh air KIAM gus iarraidh air teisteanasan le amannan dligheachd nas fhaide. Cho luath âs a thachair seo, thòisich iarrtasan aâ dol air adhart Ă s aonais seirbheis AWS Metadata, agus thuit an dĂ il gu ĂŹrean eadhon nas ĂŹsle na ann an EC2.
toraidhean
A rèir ar n-eòlais le imrichean, chan e biastagan ann an Kubernetes no eileamaidean Ă rd-Ăšrlair eile aon de na stòran dhuilgheadasan as cumanta. Agus chan eil e co-cheangailte ri lochdan bunaiteach sam bith anns na microservices a tha sinn aâ gluasad. Bidh duilgheadasan gu tric ag èirigh dĂŹreach air sgĂ th 's gu bheil sinn a' cur diofar eileamaidean ri chèile.
Bidh sinn aâ measgachadh shiostaman iom-fhillte nach do rinn eadar-obrachadh le chèile a-riamh roimhe, an dĂšil gum bi iad aâ cruthachadh aon shiostam nas motha. Gu mĂŹ-fhortanach, mar as motha de eileamaidean, âs ann as motha an comas airson mearachd agus âs ann as Ă irde an entropy.
Nar cĂšis-ne, cha robh an dĂ il Ă rd mar thoradh air biastagan no droch cho-dhĂšnaidhean ann an Kubernetes, KIAM, an AWS Java SDK, no ar microservice. Bâ e toradh dĂ shuidheachadh bunaiteach neo-eisimeileach a bhâ ann: aon ann an KIAM agus aon ann an AWS Java SDK. Leotha fhèin, tha ciall anns an dĂ shuidheachadh: am poileasaidh Ăšrachaidh teisteanas gnĂŹomhach ann an AWS Java SDK agus an Ăšine ghoirid crĂŹochnachaidh teisteanas ann an KAIM. Ach nuair a thèid an cur còmhla, bidh na toraidhean do-sheachanta. Chan eil dĂ fhuasgladh neo-eisimeileach agus loidsigeach gu riatanach aâ dèanamh ciall nuair a thèid an cur còmhla.
PS bhon eadar-theangair
Faodaidh tu barrachd ionnsachadh mu ailtireachd goireas KIAM airson AWS IAM a thoirt còmhla ri Kubernetes ann an bho na luchd-cruthachaidh aige.
Agus anns aâ bhlog againn, faodaidh tu cuideachd leughadh:
- ÂŤ";
- ÂŤ";
- ÂŤ";
- ÂŤ".
Source: www.habr.com
