"Kubernetes adachulukitsa latency nthawi 10": ndani ali ndi mlandu pa izi?
Zindikirani. transl.: Nkhaniyi, yolembedwa ndi Galo Navarro, yemwe ali ndi udindo wa Principal Software Engineer ku kampani ya ku Ulaya ya Adevinta, ndi "kafukufuku" wochititsa chidwi komanso wophunzitsa pa ntchito ya zomangamanga. Mutu wake woyambirira udakulitsidwa pang'ono pomasulira pazifukwa zomwe wolemba akufotokoza pachiyambi penipeni.
Chidziwitso kuchokera kwa wolemba: Zikuwoneka ngati izi anakopeka chidwi chochuluka kuposa momwe amayembekezera. Ndimamvabe mawu okwiya akuti mutu wa nkhaniyo ndi wosocheretsa komanso kuti owerenga ena ndi achisoni. Ndikumvetsa zifukwa zomwe zikuchitika, choncho, ngakhale kuti pali chiopsezo chowononga chiwembu chonsecho, ndikufuna ndikuuzeni nthawi yomweyo zomwe nkhaniyi ikunena. Chochititsa chidwi chomwe ndachiwona ngati magulu akusamukira ku Kubernetes ndikuti nthawi iliyonse pakabuka vuto (monga kuchuluka kwa latency pambuyo pa kusamuka), chinthu choyamba chomwe chimaimbidwa mlandu ndi Kubernetes, koma kenako zimakhala kuti woyimbayo sakuyenera. mlandu. Nkhaniyi ikufotokoza za nkhani ina yotero. Dzina lake limabwereza kufuula kwa m'modzi mwa omwe amatipanga (pambuyo pake mudzawona kuti Kubernetes alibe chochita nazo). Simupeza mavumbulutso odabwitsa okhudza Kubernetes pano, koma mutha kuyembekezera maphunziro angapo okhudza machitidwe ovuta.
Titatumiza ku Kubernetes ndikuwongolera kuchuluka kwa magalimoto komweko, zodabwitsa zowopsa zidatiyembekezera. Kuchedwa (kuchedwa) zopempha ku Kubernetes zinali zochulukirapo ka 10 kuposa mu EC2. Kawirikawiri, kunali koyenera kupeza njira yothetsera vutoli, kapena kusiya kusamuka kwa microservice (ndipo, mwinamwake, polojekiti yonse).
Chifukwa chiyani latency ili yokwera kwambiri ku Kubernetes kuposa mu EC2?
Kuti tipeze cholepheretsa, tinasonkhanitsa ma metrics panjira yonse yofunsira. Zomangamanga zathu ndizosavuta: ma proxies a API (Zuul) amapempha ku microservice zochitika mu EC2 kapena Kubernetes. Ku Kubernetes timagwiritsa ntchito NGINX Ingress Controller, ndipo kumbuyo ndi zinthu wamba ngati Kutumizidwa ndi ntchito ya JVM pa nsanja ya Spring.
Vutoli likuwoneka kuti likukhudzana ndi kuchedwa koyambirira kumbuyo (ndinalemba malo ovuta pa graph ngati "xx"). Pa EC2, kuyankha kwa pempho kunatenga pafupifupi 20ms. Ku Kubernetes, latency idakwera mpaka 100-200 ms.
Tidachotsa mwachangu omwe akuwakayikira okhudzana ndi kusintha kwa nthawi yoyendetsa. Mtundu wa JVM umakhalabe womwewo. Mavuto a Containerization nawonso analibe chochita ndi izi: pulogalamuyo inali ikuyenda bwino m'mitsuko ya EC2. Mukutsegula? Koma tidawona kuchedwa kwambiri ngakhale pempho limodzi pamphindikati. Kuima kotolera zinyalala kukhozanso kunyalanyazidwa.
M'modzi mwa oyang'anira athu a Kubernetes adadabwa ngati pulogalamuyi ili ndi zodalira zakunja chifukwa mafunso a DNS adayambitsanso zofanana m'mbuyomu.
Hypothesis 1: Kusintha kwa dzina la DNS
Pa pempho lililonse, ntchito yathu imapeza chitsanzo cha AWS Elasticsearch kamodzi kapena katatu mu domain ngati elastic.spain.adevinta.com. Mkati mwa zotengera zathu pali chipolopolo, kotero titha kuyang'ana ngati kusaka domain kumatenga nthawi yayitali.
Poganizira kuti kuyang'anaku kudatenga pafupifupi 30ms, zidawonekeratu kuti kusamvana kwa DNS mukamapeza Elasticsearch kunalidi kumathandizira pakuwonjezeka kwa latency.
Komabe, izi zinali zachilendo pazifukwa ziwiri:
Tili kale ndi matani a mapulogalamu a Kubernetes omwe amalumikizana ndi zothandizira za AWS popanda kuvutika ndi latency yayikulu. Ziribe chifukwa chake, zikukhudzana makamaka ndi nkhaniyi.
Tikudziwa kuti JVM imachita kukumbukira DNS caching. Pazithunzi zathu, mtengo wa TTL walembedwamo $JAVA_HOME/jre/lib/security/java.security ndikukhazikitsa masekondi 10: networkaddress.cache.ttl = 10. Mwanjira ina, JVM iyenera kusungitsa mafunso onse a DNS kwa masekondi 10.
Kuti titsimikizire lingaliro loyamba, tinaganiza zosiya kuyimba DNS kwakanthawi ndikuwona ngati vutolo latha. Choyamba, tidaganiza zokonzanso pulogalamuyo kuti ilumikizane mwachindunji ndi Elasticsearch ndi adilesi ya IP, osati kudzera mu dzina lachidziwitso. Izi zingafunike kusintha kachidindo ndi kutumizidwa kwatsopano, chifukwa chake tidangoyika malowa ku adilesi yake ya IP /etc/hosts:
34.55.5.111 elastic.spain.adevinta.com
Tsopano chidebecho chinalandira IP pafupifupi nthawi yomweyo. Izi zinapangitsa kusintha kwina, koma tinali pafupi pang'ono ndi milingo ya latency yomwe ikuyembekezeka. Ngakhale kusamvana kwa DNS kunatenga nthawi yayitali, chifukwa chenicheni sichinatipezebe.
Diagnostics kudzera pa netiweki
Tinaganiza zosanthula kuchuluka kwa magalimoto kuchokera ku chidebecho pogwiritsa ntchito tcpdumpkuti muwone zomwe zikuchitika pa intaneti:
[root@be-851c76f696-alf8z /]# tcpdump -leni any -w capture.pcap
Mtsinje wobiriwira woyambira ndi paketi 328 umasonyeza momwe kasitomala (172.17.22.150) adakhazikitsira mgwirizano wa TCP ku chidebe (172.17.36.147). Pambuyo pa kugwirana chanza koyamba (328-330), phukusi 331 linabweretsa HTTP GET /v1/.. - pempho lobwera ku ntchito yathu. Njira yonse idatenga 1 ms.
Mtsinje wotuwa (kuchokera pa paketi 339) ukuwonetsa kuti ntchito yathu idatumiza pempho la HTTP ku chitsanzo cha Elasticsearch (palibe TCP kugwirana chanza chifukwa ikugwiritsa ntchito kulumikizana komwe kulipo). Izi zidatenga 18ms.
Pakalipano zonse zili bwino, ndipo nthawizo zimagwirizana ndi kuchedwa komwe kumayembekezeredwa (20-30 ms poyesedwa kuchokera kwa kasitomala).
Komabe, gawo la buluu limatenga 86ms. Kodi chikuchitika ndi chiyani mmenemo? Ndi paketi 333, ntchito yathu idatumiza pempho la HTTP GET ku /latest/meta-data/iam/security-credentials, ndipo zitatha izi, pa kulumikizana komweku kwa TCP, pempho lina la GET ku /latest/meta-data/iam/security-credentials/arn:...
Tidapeza kuti izi zikubwerezedwa ndi pempho lililonse pakutsata. Kusamvana kwa DNS ndikocheperako pang'ono muzotengera zathu (mafotokozedwe a izi ndi osangalatsa, koma ndisungira nkhani ina). Zinapezeka kuti chifukwa cha kuchedwa kwanthawi yayitali chinali kuyimbira foni ku AWS Instance Metadata service pa pempho lililonse.
Hypothesis 2: mafoni osafunikira ku AWS
Mapeto onse ndi a AWS Instance Metadata API. Microservice yathu imagwiritsa ntchito ntchitoyi poyendetsa Elasticsearch. Mafoni onsewa ndi gawo lazovomerezeka zoyambira. Mapeto omwe amapezeka pa pempho loyamba amakhudza udindo wa IAM wokhudzana ndi chitsanzocho.
Chifukwa chiyani nthawi yovomerezeka ya ziphaso yakhala yayifupi?
AWS Instance Metadata idapangidwa kuti izigwira ntchito ndi zochitika za EC2, osati Kubernetes. Kumbali ina, sitinafune kusintha mawonekedwe ogwiritsira ntchito. Kwa izi tinagwiritsa ntchito KIAM - chida chomwe, pogwiritsa ntchito othandizira pa node iliyonse ya Kubernetes, chimalola ogwiritsa ntchito (mainjiniya omwe amatumiza mapulogalamu kumagulu) kuti agawire maudindo a IAM kuzinthu zomwe zili m'matumba ngati kuti zinali zochitika za EC2. KIAM imadula mafoni ku ntchito ya AWS Instance Metadata ndikuwasintha kuchokera ku cache yake, atawalandira kale kuchokera ku AWS. Kuchokera pamalingaliro ogwiritsira ntchito, palibe chomwe chimasintha.
KIAM imapereka satifiketi kwakanthawi kochepa ku ma pod. Izi ndizomveka poganizira kuti moyo wapakati wa pod ndi waufupi kuposa chitsanzo cha EC2. Nthawi yovomerezeka ya ziphaso zofanana ndi mphindi khumi ndi zisanu.
Zotsatira zake, ngati mutaphimba zonse ziwiri zosasinthika pamwamba pa wina ndi mzake, pamakhala vuto. Satifiketi iliyonse yoperekedwa ku ntchitoyo imatha pakadutsa mphindi 15. Komabe, AWS Java SDK imakakamiza kukonzanso satifiketi iliyonse yomwe yatsala ndi mphindi zosakwana 15 tsiku lake lisanathe.
Zotsatira zake, satifiketi yakanthawiyo imakakamizika kukonzedwanso ndi pempho lililonse, lomwe limaphatikizapo kuyimba mafoni angapo ku AWS API ndikupangitsa kuwonjezeka kwakukulu kwa latency. Mu AWS Java SDK tapeza pempho lazinthu, lomwe limatchula vuto lofananalo.
Yankho lake linakhala losavuta. Tidangosinthanso KIAM kuti ipemphe satifiketi yokhala ndi nthawi yayitali yovomerezeka. Izi zitachitika, zopempha zinayamba kuyenda popanda kutenga nawo mbali pa ntchito ya AWS Metadata, ndipo latency inatsikira kumagulu otsika kwambiri kuposa EC2.
anapezazo
Kutengera zomwe takumana nazo pakusamuka, chimodzi mwazinthu zomwe zimayambitsa zovuta si nsikidzi ku Kubernetes kapena zinthu zina papulatifomu. Komanso sichithana ndi zolakwika zilizonse mu ma microservices omwe tikuyenda. Nthawi zambiri mavuto amadza chifukwa chophatikiza zinthu zosiyanasiyana.