Tere!
Teiega on jĂ€lle Nikita â sĂŒsteemitehnik ettevĂ”ttest SEMrush. Selle artikliga jĂ€tkan lugu, kuidas me leiutasime lahenduse Hiina tulemĂŒĂŒrile meie teenuse jaoks semrush.com.
Uues RÀÀkisin:
- millised probleemid ilmnevad pÀrast otsuse tegemist "Peame tagama, et meie teenus toimiks Hiinas"
- millised probleemid on Hiina internetis
- miks on vajalik ICP-litsents
- kuidas ja miks me otsustasime testida meie testkeskkondi Catchpointi abil
- milline tulemus saadi meie esimesest lahendusversioonist, mis pÔhines Cloudflare Hiina vÔrgul
- kuidas me leidsime vead Cloudflare DNS-is
See osa on minu arvates kÔige huvitavam, kuna keskendub konkreetsetele tehnilistele rakendustele. Alustame, vÔi pigem jÀtkame, Alibaba Cloud.
Alibaba Cloud
Alibaba Cloud â ĂŒsna suur pilveteenuse pakkuja, millel on kĂ”ik teenused, mis vĂ”imaldavad tal Ă”igustatult end pilveteenuse pakkujana nimetada. HĂ€sti on see, et neil on vĂ”imalus registreeruda vĂ€lismaalastel ja et enamik veebisaidist on tĂ”lgitud inglise keelde (Hiina jaoks on see luksus). Selle pilvega saab töötada paljude maailma piirkondade, mandri-Hiina ning ka Vaikse ookeani Aasia (Hongkong, Taiwan jne) kaudu.
IPSEC
Alustasime geograafiast. Kuna meie testimine toimus Google Cloudis, oli meil vaja "ĂŒhendada" Alibaba Cloud GCP-ga, seetĂ”ttu vaatasime Google'i kohaloleku lokatsioone. Sel hetkel polnud neil veel enda andmekeskust Hongkongis.
LÀhim piirkond oli asia-east1 (Taiwan). Ali kÔige lÀhem piirkond mandri-Hiinast Taiwani oli cn-shenzhen (Shenzhen).
EL-i abil terraform K kirjeldasime ja tĂ”stsime kogu taristut GCP-s ja Ali. 100 Mbit/s tunnel kahe pilve vahel loodi praktiliselt koheselt. Shenzhenis ja Taiwani pool tĂ”stsime proxy virtuaalsed masinad. Shenzhenis terminaaliseeritakse kasutaja liiklus, edastatakse tunnelisse Taiwani ja sealt lĂ€hevad nad otse meie teenuse vĂ€lisele IP-le us-east (USA idarannik). Pingi aeg virtuaalmasinate vahel tunnelis 24ms, mis pole ĂŒldse halb.
Samas paigaldasime testimisala Alibaba Cloud DNS. PĂ€rast tsooni delegeerimist NS Ali, resolutsiooniaeg langes 470 ms-lt 50 ms. Enne seda oli tsoon ka Cloudflare'is.
Samaaegselt tunneliga asia-east1 loome veel ĂŒhe tunnel Shenzhenist otse us-east4. Seal loodi veel proxyd virtuaalne masina ja hakati mÔÔtma mĂ”lemaid lahendusi, marsruutides testliiklust Cookieside vĂ”i DNSi abil. Skeemiliselt on teststend kirjeldatud jĂ€rgmises joonises:
Tunnelite latentsus oli jÀrgmine:
Ali cn-shenzhen GCP asia-east1 â 24ms
Ali cn-shenzhen GCP us-east4 â 200ms
Brauseritestid Catchpoint teatasid suurepÀrasest jÔudluse parandusest.
VÔrdle tulemusi kahe lahenduse vahel:
Lahendus
Aeg
Mediaan
75. percentiil
95. percentiil
Cloudflare
86.6
18s
30s
60s
IPsec
99.79
18s
21s
30s
Need on andmed lahenduse kohta, mis kasutab IPSEC-tunnelit lÀbi asia-east1. Us-east4 kaudu olid tulemused halvemad ning vigu oli rohkem, seega ei too tulemusi vÀlja.
Antud kahe tunnelitestiga, millest ĂŒks lĂ”ppeb Hiinale lĂ€himas regioonis ja teine lĂ”pp-punktis, sai selgeks, et on oluline vĂ”imalikult kiiresti "hiinast vĂ€lja tĂ”mmata", ning seejĂ€rel kasutada kiireid vĂ”rke (CDN-teenusepakkujad, pilveteenusete pakkujad jne). Ei ole mĂ”istlik proovida ĂŒhel liikvel lĂ€bi tulekahjusĂŒsteemi minna ning jĂ”uda sihtpunkti. See pole kĂ”ige kiirem tee.
Ăldiselt on tulemused head, aga semrush.com'i mediaan on 8.8s ja 75. percentiil 9.4s (samal testil).
Ja enne kui edasi liikuda, sooviksin teha vĂ€ikese lĂŒhiĂŒlevaate.
LĂŒhiĂŒhendus
PĂ€rast seda, kui kasutaja siseneb saidile www.semrushchina.cn, mis lahendatakse "kiirete" Hiina DNS-serverite kaudu, lĂ€heb HTTP-pĂ€ring meie kiire lahenduse kaudu. Vastus saadetakse tagasi sama teed, kuid kĂ”ikides JS-skriptides, HTML-lehtedes ja muudes veebilehe elementides nĂ€idatakse domeeni semrush.com tĂ€iendavate ressursside jaoks, mis peavad olema laaditud lehe renderdamise kĂ€igus. See tĂ€hendab, et klient lahendab "peamise" A-kirje www.semrushchina.cn ja lĂ€heb kiirese tunnelisse, saavad kiiresti vastuse â HTML-lehe, milles öeldakse:
- lae see javascript sso.semrush.com-ilt,
- CSS-failid too cdn.semrush.com-ilt,
- ja veel too pilte dab.semrush.com-ilt.
- ja nii edasi.
Brauser hakkab minema "vĂ€limisse" internetti nende ressursside jĂ€rele, lĂ€bides iga kord aeglaselt vastuse takistav tulekahjusĂŒsteem.
Kuid eelmises testis esitati tulemused, kus lehes ei olnud ressursse semrush.com, ainult semrushchina.cn, ja *.semrushchina.cn lahendatakse Shenzhenis asuva virtuaalmasina aadressile, et pÀÀseda siis tunnelisse.
Ainult nii, suunates maksimaalselt kogu vĂ”imaliku liikluse lĂ€bi oma Hiina tulemĂŒĂŒri kiiruse lahenduse, on vĂ”imalik saavutada vastuvĂ”etavaid kiirus- ja saidi kĂ€ttesaadavuse nĂ€itajaid, samuti ausaid lahenduste teste.
Me tegime seda ilma ĂŒhegi koodimuudatuseta toote meeskondade poolelt.
Alamfilter
Lahendus sĂŒndis praktiliselt kohe pĂ€rast siinse probleemi ilmnemist. Me vajasime PoC (Proof of Concept), et nĂ€idata, et meie tulemĂŒĂŒri lahendused töötavad tĂ”eliselt hĂ€sti. Selleks tuli maksimaalselt kogu saidi liiklus selle lahenduse kaudu suunata. Ja me rakendasime nginx'is.
Alamfilter â see on ĂŒsna lihtne moodul nginx'is, mis vĂ”imaldab muuta ĂŒhe rea vastuse kehas teiseks reaks. Nii muudeti me kĂ”ik esinemised semrush.com . Tundub, et semrushchina.cn kĂ”ikides vastustes.
Ja⊠see ei töötanud, sest tagasiandmistelt saime komprimeeritud sisu, seega alamfilter ei leidnud vajalikku rida.Pidime lisama veel ĂŒhe kohaliku serveri nginx'i, mis dekomprimeeris vastuse ja edastas selle jĂ€rgmisele kohalikule serverile, mis tegi ridade asendamise, komprimeerimise ja edastamise jĂ€rgmisele silmusele vaheserverisse.
LÔpuks, kus klient oleks saanud <subdomain>.semrush.com, sai ta <subdomain>.semrushchina.cn ja lÀks usinalt lÀbi meie lahenduse.
Kuid ei piisa lihtsalt domeeni vahetamisest ĂŒhes suunas, kuna tagaplaanid ootavad endiselt semrush.com'i jĂ€rgnevate klientide pĂ€ringutes. SeetĂ”ttu samas serveris, kus toimub asendamine ĂŒhes suunas, saame lihtsa regulaaravalduse abil pĂ€ringust alamdomeeni ja seejĂ€rel teeme proxy_pass muutuja $host, mis on seadistatud $subdomain.semrush.com. See vĂ”ib tunduda segane, kuid see töötab. Ja see töötab hĂ€sti. Erinevate domeenide jaoks, mis nĂ”uavad teistsugust loogikat, luuakse lihtsalt omad serveriplokid ja tehakse eraldi konfiguratsioon. Allpool on nĂ€idatud lĂŒhendatud nginx konfiguratsioonid selle skeemi selgitamiseks ja demonstreerimiseks.
JÀrgmine konfiguratsioon kÀsitleb kÔiki Hiinast pÀrinevaid pÀringuid aadressil .semrushchina.cn:
kuula 80;
server_name ~^(?<subdomain>[w-]+).semrushchina.cn$;
sub_filter '.semrush.com' '.semrushchina.cn';
sub_filter_last_modified on;
sub_filter_once off;
sub_filter_types *;
gzip on;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
location / {
proxy_pass http://127.0.0.1:8083;
proxy_set_header Accept-Encoding "";
proxy_set_header Host $subdomain.semrush.com;
proxy_set_header X-Accept-Encoding $http_accept_encoding;
}
}See konfiguratsioon edastab localhost porti 83, kus ootab jÀrgmine konfiguratsioon:
kuula 127.0.0.1:8083;
server_name *.semrush.com;
location / {
resolver 8.8.8.8 ipv6=off;
gunzip on;
proxy_pass https://$host;
proxy_set_header Accept-Encoding gzip;
}
}Kordan, need on lĂŒhendatud konfiguratsioonid.
Nii see umbes vĂ€lja nĂ€eb. See vĂ”ib tunduda keeruline, aga sĂ”nades on see niimoodi. Tegelikult on kĂ”ik lihtsam kui kĂ”rvits đ
LĂŒhiheide lĂ”ppu
MĂ”nda aega olime Ă”nnelikud, sest mĂŒĂŒt langevatest IPSEC-tunnelitest ei tĂ”estunud. Aga siis hakkasid tunnelid langema. Paar korda pĂ€evas, paar minutit korraga. Natuke, aga meid see ei rahuldanud. Kuna mĂ”lemad tunnelid lĂ”petati Ali-s ĂŒhel ruuteril, otsustasime, et vĂ”ib-olla on see piirkondlik probleem ja tuleb ĂŒles tĂ”sta varukoopia piirkond.
Me tĂ”stsime ĂŒles. Tunnelid hakkasid langema erinevatel aegadel, kuid meie ĂŒlemineku tasemel nginxis toimis failover suurepĂ€raselt. Kuid seejĂ€rel hakkasid tunnelid jĂ€lle langema peaaegu samaaegselt đ Ja taas ilmusid 502 ja 504. Ăksikasjad hakkasid halvenema, seega hakkasime uurima vĂ”imalust Alibaba CEN (Cloud Enterprise Network).
CEN
CEN on ĂŒhendus kahe VPC vahel erinevates piirkondades Alibaba Cloudis, mis tĂ€hendab, et saate ĂŒhendada privaatvĂ”rgud mis tahes piirkondade vahel. Ja mis kĂ”ige olulisem: sellel kanalil on ĂŒsna range SLA. See on vĂ€ga stabiilne nii kiiruselt kui ka tööajalt. Aga ei ole kunagi nii lihtne:
- seda ON ĂLIMALT raske saada, kui te ei ole Hiina kodanikud ega juriidilised isikud,
- tuleb maksta iga megabiti ĂŒhenduse ribalaiuse eest.
Saades vĂ”imaluse ĂŒhendada Mandri-Hiina ja VĂ€lismaal, lĂ”ime CEN kahe piirkonna Ali vahel: cn-shenzhen ja us-east-1 (kĂ”ige lĂ€hem punta us-east4-le). Ali-s us-east-1 tĂ”stsime ĂŒles veel ĂŒhe virtuaalmasina, et oleks veel ĂŒks hop.
Tulenes jÀrgmine tulemus:
Brauserite testide tulemused on allpool:
Lahendus
Aeg
Mediaan
75. percentiil
95. percentiil
Cloudflare
86.6
18s
30s
60s
IPsec
99.79
18s
21s
30s
CEN
99.75
16s
21s
27s
Tulemustel on veidi paremad nÀitajad kui IPSEC-il. Aga IPSEC-i kaudu saab potentsiaalselt laadida kiirusel 100 Mbit/s, CEN-i kaudu ainult 5 Mbit/s kiirusel ja see on kallim.
KĂŒsimus on segas, eks? Ăhendada IPSEC-i kiirus ja CEN-i stabiilsus.
Nii me tegimegi, suunates liiklust nii IPSEC kui ka CEN kaudu, kui IPSEC-tunneli ĂŒhendus katkes. TĂ”steaeg kasvas mĂ€rkimisvÀÀrselt, kuid veebisaidi laadimiskiirus jĂ€i endiselt soovitust madalamaks. Siis tĂ”mbasin kĂ”ik skeemid, mida olime juba kasutanud ja testinud, ja otsustasin proovida lisada sellesse skeemi veel natuke GCP-d, nimelt GLB.
GLB
GLB â see on (vĂ”i Google Cloud Load Balancer). Sellel on meie jaoks oluline eelis: CDN kontekstis, sellel on anycast IP, mis vĂ”imaldab suunata liiklust lĂ€himasse andmekeskusesse kliendile, tĂ€nu millele liiklus jĂ”uab kiiremini Google'i kiire vĂ”rguni ja vĂ€hem liigub lĂ€bi "tavalise" interneti.
MÔtleme natuke, me tÔstsime HTTP/HTTPS LB GCP-s ja tagapool setsime meie virtuaalmasinad subfilteriga.
Oli mitu skeemi:
- Kasutage Cloudflare Hiina vĂ”rk, aga seekord mÀÀrasin Originâiks globaalse IP GLB.
- Kliendid on terminiseeritud cn-shenzhen, ja sealt suunatakse liiklus otse GLB.
- Otse Hiinast GLB.
- Kliendid on terminiseeritud cn-shenzhen, sealt suunatakse asia-east1 IPSEC kaudu (CEN kaudu), sealt edasi GLB-sse (rahune, allpool on pilt ja seletus) us-east4 Testisime kĂ”iki neid variante ja veel mitmeid hĂŒbriide:
Cloudflare + GLB
- See skeem ei rahuldanud meid tĂ”steaja ja DNS- tĂ”rgete poolest. Kuid test viidi lĂ€bi enne CF-bugi parandamist, vĂ”ib-olla on nĂŒĂŒd parem (kuid see ei vĂ€lista HTTP-aega).
Ali + GLB
- See skeem ei rahuldanud meid tĂ”steaja poolest, kuna GLB langes sageli allavoolu, kuna ĂŒhenduse loomine ei olnud mĂ”istliku aja jooksul vĂ”imalik vĂ”i aegumiste tĂ”ttu, sest Hiinas oleva serveri jaoks jÀÀb GLB aadress vĂ€liseks ja seega Hiina tulemĂŒĂŒri taha. Midagi erilist ei juhtunud.
GLB ainult
- Variant, mis sarnaneb eelmisele, ainult et selles ei kasutatud servereid Hiinas: liiklus lĂ€ks kohe GLB-sse (DNS-koodide muutmine). SeetĂ”ttu ei rahuldanud tulemused, kuna tavaliste Hiina klientide, kes kasutavad tavapĂ€raseid internetiteenuse pakkujaid, olukord tulemĂŒĂŒri ĂŒletamisel on palju halvem kui Ali Cloudil.
Shenzhen -> (CEN/IPSEC) -> Proksy -> GLB
- Siin otsustasime kasutada parimat kÔigist lahendustest:
stabiilsus ja garanteeritud SLA CEN-ilt
- kÔrge kiirus IPSEC-ist
- "kiire" Google'i vÔrk ja selle anycast.
- Skeem nÀeb vÀlja umbes nii: kasutajate liiklus terminiseeritakse virtuaalmasinas
ch-shenzhen ch-shenzhen. Seal on upstreams nginx, some of which refer to private IP servers located at the other end of the IPSEC tunnel, while others point to private server addresses on the other side of the CEN. IPSEC was configured for the region asia-east1 in GCP (it was the closest region to China at the time the solution was created. Now GCP also has a presence in Hong Kong). CEN is for the region us-east1 in Ali Cloud.
Then the traffic from both ends was directed to anycast IP GLB, that is, to the nearest Google point of presence, and went through its networks to the region us-east4 in GCP, where we had proxy virtual machines (with subfilter in nginx).
This hybrid solution, as we expected, allowed us to take advantage of each technology. Overall, traffic flows through a fast IPSEC, but if problems arise, we quickly and for a few minutes remove these servers from upstreams and direct traffic only through CEN until the tunnel stabilizes.
By implementing the 4th solution from the list above, we achieved what we wanted and what the business required at that time.
Results of browser tests for the new solution compared to previous ones:
Lahendus
Aeg
Mediaan
75. percentiil
95. percentiil
Cloudflare
86.6
18s
30s
60s
IPsec
99.79
18s
21s
30s
CEN
99.75
16s
21s
27s
CEN/IPsec + GLB
99.79
13s
16s
25s
CDN
In the solution we implemented, everything is good, only there is no CDN that could accelerate traffic at the regional and even city levels. Ideally, this should speed up website performance for end users by utilizing fast communication channels from the CDN provider. And we were always thinking about this. And now, the time has come for the next iteration of the project: searching and testing CDN providers in China.
And I will tell you about this in the next, final part đ
Allikas: habr.com
