Kuidas me lĂ€bisime Suure Hiina tulemĂŒĂŒri (osa 2)

Tere!

Teiega on jĂ€lle Nikita — sĂŒsteemiinsener ettevĂ”ttest SEMrush. Ja selle artikliga jĂ€rgin lugu sellest, kuidas me leiutasime lahenduse Hiina tulemĂŒĂŒrile meie teenuse jaoks semrush.com.

V eelmisel osal Ma rÀÀkisin:

  • millised probleemid tekivad pĂ€rast otsuse vastuvĂ”tmist „Me peame tagama, et meie teenus töötaks Hiinas“
  • millised probleemid on Hiina internetis
  • miks on vajalik ICP-luba
  • kuidas ja miks me otsustasime testida meie testimisĂŒsteeme teoreetiliselt Catchpoint'i abil
  • milline tulemus oli meie esimesel lahenduse variandil, mis pĂ”hines Cloudflare'i Hiina vĂ”rgul
  • kuidas me leidsime vea Cloudflare'i DNS-is

See osa on minu arvates kÔige huvitavam, kuna see keskendub konkreetsetele tehnilistele rakendustele. Ja alustame me, vÔi Ôigemini jÀtkame, koos Alibaba Cloud.

Alibaba Cloud

Alibaba Cloud — ĂŒsna suur pilvepakkuja, millel on kĂ”ik teenused, mis vĂ”imaldavad tal end Ă”iglaselt pilvepakkujana nimetada. Hea, et vĂ€lismaa kasutajad saavad liituda ning et suur osa saidist on tĂ”lgitud inglise keelde (Hiina jaoks on see luksus). Selles pilves on vĂ”imalik töötada paljude maailma piirkondadega, sealhulgas Mandri-Hiinaga ja ookeanilise Aasiaga (Hongkong, Taiwan jne).

IPSEC

Alustasime geograafiast. Kuna testisait asus Google Cloud'is, pidime 'ĂŒhendama' Alibaba Cloud'i GCP-iga, seega avasime Google'i kohalolekute nimekirja. Tol hetkel ei olnud neil veel oma andmekeskust Hongkongis.
LÀhim piirkond oli asia-east1 (Taiwan). Ali jaoks selgus, et kontinentalsest Hiinast lÀhim piirkond Taiwani suunas on cn-shenzhen (Shenzen).

KÀesoleva abil terraform kirdasime ja lÔime kogu infrastruktuuri GCP ja Ali vahel. 100 Mbit/s tunnel pilvede vahel loodi praktiliselt momentaalselt. Shenzenis ja Taiwanil loodi vahendavad virtuaalmasinad. Shenzenis terminaalitakse kasutajaliiklus, mis suunatakse kaudu tunnelit Taiwani, kust see juba otse suundub meie teenuse vÀlisele IP-le us-east (USA idaosa). Virtuaalmasinate vaheline latentsus tunnelite kaudu 24ms, mis pole nii halb.

Korraga paigaldasime testimisala Alibaba Cloud DNS. PĂ€rast tsooni delegeerimist NS Ali-le, kahanes resolvamise aeg 470 ms-lt 50 ms. Enne seda oli tsoon samuti Cloudflare'is.

Samaaegselt tunneliga asia-east1 tĂ”stsime ĂŒles veel ĂŒhe tunneli Shenzhenist otse us-east4. Seal lĂ”ime veel proksiseerivaid virtuaalmasinaid ja alustasime mĂ”lema lahenduse mÔÔtmist, suunates testimisliiklust Cookies vĂ”i DNS kaudu. Testimise ala on skeemiliselt kirjeldatud jĂ€rgmises joonises:

Tunnelite latentsus osutus jÀrgnevaks:
Ali cn-shenzhen <—> GCP asia-east1 — 24ms
Ali cn-shenzhen <—> GCP us-east4 — 200ms

Brauseritestid Catchpoint teatasid suurepÀrasest parandusmaterjalist.

VÔrdle kahe lahenduse testide tulemusi:

Lahendus
Suurus
Mediaan
75. protsentiil
95. protsentiil

Cloudflare
86.6
18s
30s
60s

IPsec
99.79
18s
21s
30s

Need on IPSEC-tunneli kasutava lahenduse andmed asia-east1. Us-east4 kaudu olid tulemused halvemad, lisaks rohkem vigu, seega ei too tulemusi vÀlja.

Selle tunnelitestide tulemuste pĂ”hjal, millest ĂŒks lĂ”ppeb Hiinale kĂ”ige lĂ€hemal asuvas piirkonnas ja teine lĂ”ppsihtkohas, on selge, et on oluline kiiresti „pinda hĂŒpata” Hiina tulemĂŒĂŒrist, seejĂ€rel kasutada kiireid vĂ”rgusid (nt CDN-teenuse pakkujad, pilveteenuste pakkujad jne). Pole mĂ”istlik pĂŒĂŒda korraga mööda tulemĂŒĂŒrist minna ja otse sihtkohta jĂ”uda. See ei ole kiireim tee.

Üldiselt on tulemused head, kuid semrush.com puhul on mediaan 8,8 s ja 75. protsentil 9,4 s (sama teste juures).
Ja enne, kui liigume edasi, tahaksin teha vĂ€ikese lĂŒhiĂŒlevaate.

LĂŒhiĂŒlevaade

PĂ€rast seda, kui kasutaja siseneb veebisaidile www.semrushchina.cn, mis lahendatakse kaudu „kiirete” Hiina DNS-serverite, suunatakse HTTP-pĂ€ring lĂ€bi meie kiire lahenduse. Vastus naaseb sama teed, kuid kĂ”ikide JS-skriptide, HTML-lehtede ja muude veebilehe elementide puhul on nĂ€idatud domeen semrush.com tĂ€iendavate ressursside jaoks, mis peavad olema laaditud lehe renderdamise kĂ€igus. See tĂ€hendab, et kliendil on reaalajas lahendatud „peamine” A-kirje www.semrushchina.cn ja ta lĂ€heb kiiresti tunnelisse, saab kiiresti vastuse — HTML-lehe, milles on öeldud:

  • lae alla sellist js sso.semrush.com-ist,
  • CSS-failid vĂ”ta cdn.semrush.com-ist,
  • ja veel too pilte dab.semrush.com-ist
  • ja nii edasi.

Brauser hakkab minema "vĂ€lisele" internetile, et neid ressursse leida, lĂ€bides iga kord aega sööva tulemĂŒĂŒriga.

Kuid eelmisel testil on esitatud tulemused, kus lehel ei ole ressursse semrush.com, ainult semrushchina.cn, ja *.semrushchina.cn resolveerub virtuaalmasina aadressiks Shenzhenis, et pÀÀseda tunnelisse.

Ainult nii, suunates kogu vĂ”imaliku liikluse lĂ€bi oma kiire tulemĂŒĂŒri lahenduse, on vĂ”imalik saavutada aktsepteeritavad kiirus ja saidi kĂ€ttesaadavuse nĂ€itajad ning ausad tulemused lahenduste testimisel.
Me tegime seda ilma ĂŒhtegi koodi parandamata toote poolel.

Alamfilter

Lahendus sĂŒndis praktiliselt kohe pĂ€rast seda, kui see probleem tekkis. Me vajamine ' PoC (Koncepte tĂ”endamine), et meie tulemĂŒĂŒri lĂ€bimislahendused tĂ”epoolest töötavad hĂ€sti. Selleks tuleb kogu saidi liiklus maksimaalselt suunata lĂ€bi selle lahenduse. Ja me rakendasime alamfiltrit nginx-is.

Alamfilter — see on ĂŒsna lihtne moodul nginx-is, mis vĂ”imaldab ĂŒhe rea vahetamist vastuse kehas teise vastu. Nii me vahetasime kĂ”ik esinemised semrush.com jĂ€rgnevaga semrushchina.cn kĂ”ikides vastustes.

Ja... see ei töötanud, kuna tagapoolt saime me kompresseeritud sisu, seetĂ”ttu ei leidnud subfilter Ă”iget rida. Pidi lisama veel ĂŒhe kohaliku serveri nginx-is, mis dekomprimeeris vastuse ja edastas selle jĂ€rgmisele kohalikule serverile, mis juba tegi rea vahetuse, komprimeeris ja andis selle jĂ€rgmisele vaheldus serverile.

LÔpuks, kus klient oleks saanud .semrush.com, sai ta .semrushchina.cn ja kuulekas lÀks lÀbi meie lahenduse.

Kuid lihtsalt domeeni vahetamine ĂŒhes suunas ei piisa, kuna tagapool ootavad ikka veel semrush.com jĂ€rgmistelt klientide pĂ€ringutelt. SeetĂ”ttu, samas serveris, kus toimub vahetus ĂŒhes suunas, kasutades lihtsat regulaarset vĂ€ljendit, saame pĂ€ringust alamdomeeni ning edasi teeme proxy_pass muutujaga $host, mÀÀratud $subdomain.semrush.com. See vĂ”ib tunduda keeruline, aga see töötab. Ja töötab hĂ€sti. Erinevate loogikatega ĂŒksikute domeenide jaoks luuakse lihtsalt oma serveriplokid ja tehakse eraldi konfigureerimine. Allpool on esitatud lĂŒhendatud nginx konfiguratsioonid selguse huvides ja selle skeemi nĂ€itamiseks.

JÀrgmine konfiguratsioon töötleb kÔik pÀringud Hiinast .semrushchina.cn:

    listen 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 suunab localhost port 83, kus ootab jÀrgmist konfiguratsiooni:

    listen 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.

Ligikaudu nii. See vĂ”ib tunduda keeruline, aga see on sĂ”nades. Tegelikkuses on kĂ”ik lihtsam kui koogitĂŒkk 🙂

Looduse kÔrvalejuhtimise lÔpp

MĂ”nda aega olime Ă”nnelikud, sest vÀÀrarusaamad IPSEC-tunnelite kokku kukkumisest ei leidnud kinnitust. Kuid siis hakkasid tunnelid kokku kukkuma. Mitu korda pĂ€evas, paar minutit. Veidi, kuid see ei rahuldanud meid. Kuna mĂ”lemad tunnelid lĂ”ppesid Ali poolel ĂŒhes ruuteris, arvasime, et vĂ”ib-olla on see piirkondlik probleem ja tuleb tĂ”sta varunduspiirkonda.

TĂ”stsime ĂŒles. Tunnelid hakkasid kokku kukkuma erinevatel aegadel, kuid meil töötas upstream tasemel nginxis failover suurepĂ€raselt. Siiski hakkasid tunnelid jĂ€lle peaaegu samaaegselt kokku kukkuma 🙂 Ja taas ilmusid 502 ja 504. Üksuse tööaeg halvenes, mistĂ”ttu hakkasime vaatama varianti koos Alibaba CEN (Cloud Enterprise Network).

CEN

CEN on kahe VPC ĂŒhendamine erinevates piirkondades Alibaba Cloudis, st saate ĂŒhendada eraklikud vĂ”rgud mis tahes piirkondades pilves omavahel. Ja mis kĂ”ige tĂ€htsam: sellel kanali on ĂŒsna ranged SLA. See on vĂ€ga stabiilne nii kiiruselt kui ka tööajalt. Kuid kunagi ei ole asjad lihtsalt lihtsad:

  • seda on ÄÄRETSI keeruline saada, kui te ei ole Hiina kodanikud vĂ”i juriidilised isikud,
  • tuleb maksta iga megabiti kanalil lĂ€bivĂ”ime eest.

Saades vĂ”imaluse ĂŒhendada Mandri-Hiina ja VĂ€lismaal, me oleme loonud CEN kahe piirkonna vahel Ali: cn-shenzhen ja us-east-1 (kĂ”ige lĂ€hem punkt us-east4). Ali us-east-1 tĂ”stsime veel ĂŒhe virtuaalmasina, et oleks veel ĂŒks hop.

Tulemus oli selline:

Brauseritestide tulemused on allpool:

Lahendus
Suurus
Mediaan
75. protsentiil
95. protsentiil

Cloudflare
86.6
18s
30s
60s

IPsec
99.79
18s
21s
30s

CEN
99.75
16s
21s
27s

NÀitajad on veidi paremad kui IPSEC-il. Kuid IPSEC-i kaudu on potentsiaalselt vÔimalik laadida kiirusel 100 Mbit/s, samas kui CEN-i kaudu ainult 5 Mbit/s ja see maksab rohkem.

KĂŒsimus on, kas luua hĂŒbriid, eks? Ühendades IPSEC-i kiirus ja CEN-i stabiilsus.

Ja nii me tegime, suunates liiklus nii IPSEC-i kui ka CEN-i kaudu IPSEC-i tunnelite tĂ”rke korral. Üksikasjalikus tĂ”usis oluliselt, kuid saidi laadimiskiirus jĂ€ttis veel soovida. Siis ma joonistasin kĂ”ik skeemid, mida oleme juba kasutanud ja testinud, ja otsustasin proovida lisada sellele skeemile veel veidi GCP-d, nimelt GLB.

GLB

GLB — see on Global Load Balancer (vĂ”i Google Cloud Load Balancer). Sellel on meie jaoks oluline eelis: CDN-i kontekstis on sellel anycast IP, mis vĂ”imaldab suunata liiklust lĂ€himasse andmekeskusesse kliendile, mistĂ”ttu liiklus jĂ”uab kiirelt Google'i vĂ”rku ja vĂ€heneb “tavalise” interneti kaudu kulgev liiklus.

MÔtlemata kaua, lÔime HTTP/HTTPS LB GCP-s ja tagapindadega seadsime meie virtuaalmasinad koos subfilteriga.

Nende skeemide seas oli

  • Kasutage Cloudflare Hiina vĂ”rk, kuid seekord tuleb kasutada Origin'it, et nĂ€idata globaalset IP GLB.
  • Klientide lĂ”petamine cn-shenzhen, ja sealt edastada liiklus kohe GLB.
  • Otseselt Hiinast GLB.
  • Klientide lĂ”petamine cn-shenzhen, sealt edastada asia-east1 IPSEC-i kaudu ( us-east4 CEN-i kaudu), sealt juba GLB-sse (rahune, allpool on pilt ja selgitus)

Oleme testinud neid kĂ”iki variante ja veel mitmeid hĂŒbriidlahendusi:

  • Cloudflare + GLB

See skeem ei rahuldanud meid uptime ja DNS-veerudega. Kuid testid viidi lĂ€bi enne CF vea parandamist, vĂ”ib-olla on nĂŒĂŒd parem (siiski ei vĂ€lista see HTTP-aega).

  • Ali + GLB

See skeem ei rahuldanud meid uptime osas, kuna GLB kukkus sageli vĂ€lja, kuna ĂŒhenduse loomine oli ebapiisava ajaga vĂ”i aegumise tĂ”ttu, kuna GLB aadress Hiina sees jÀÀb vĂ€lisse, mis tĂ€hendab, et see on Hiina tulemĂŒĂŒris. Maagia ei juhtunud.

  • GLB ainult

Variant, mis sarnaneb eelnevale, kuid seal ei kasutatud servereid Hiinas: liiklus suundus kohe GLB-sse (vahetasime DNS-kirjeid). Seega ei rahuldanud tulemused, kuna tavaliste Hiina klientide, kes kasutavad tavaliste internetiteenuse pakkujate teenuseid, olukord tulemĂŒĂŒri lĂ€bimise osas on palju halvem kui Ali Cloud'il.

  • Shenzhen -> (CEN/IPSEC) -> Proksi -> GLB

Siin otsustasime kasutada parimat kÔigest, mis on saadaval:

  • stabiilsus ja garanteeritud SLA CEN-ist
  • kĂ”rge kiirus IPSEC-i kaudu
  • Google'i “kiiret” vĂ”rku ja tema anycast-id.

Schema nĂ€eb vĂ€lja umbes nii: kasutajate liiklus lĂ”peb virtuaalmasinas ch-shenzhen. Seal on seadistatud nginx-i upstream'id, millest osa viitab privaatsete IP-serverite poole, mis asuvad IPSEC-tunneli teises otsas, ning osa upstream'e — privaatserverite aadressidele CEN-i teises otsas. IPSEC seadistati piirkonda asia-east1 GCP (oli kĂ”ige lĂ€hem piirkond Hiinale lahenduse loomise hetkel. Praegu on GCP-l ka kohalolek Hongkongis). CEN — piirkonda us-east1 Ali Cloud-is.

Edasi suunati liiklus mÔlemast otsast anycast IP GLB, see tÀhendab lÀhimasse Google'i kohaloleku punkti, ja suundus tema vÔrkude kaudu piirkonda us-east4 GCP-s, kus asusid asendavad virtuaalmasinad (nginx-is subfilteriga).

See hĂŒbriidlahendus, nagu me ootasime, lubas kasutusele vĂ”tta iga tehnoloogia eelised. Üldiselt liigub liiklus kiiresti IPSEC-i kaudu, kuid kui tekivad probleemid, viskame need serverid kiiresti upstream'idest vĂ€lja ja suuname liikluse ainult CEN-i kaudu, kuni tunnel stabiliseerub.

Rakendades eeltoodud lahendust, saavutasime selles osas, mida soovisime ja mida Àri tol hetkel meilt nÔudis.

Uue lahenduse brauseritestide tulemused vÔrreldes varasematega:

Lahendus
Suurus
Mediaan
75. protsentiil
95. protsentiil

Cloudflare
86.6
18s
30s
60s

IPsec
99.79
18s
21s
30s

CEN
99.75
16s
21s
27s

CEN/IPsec + GLB
99.79
13 s
16s
25 s

CDN

Meie rakendatud lahenduses on kĂ”ik hĂ€sti, ainult et puudub CDN, mis vĂ”iks kiirendada liiklust regionaalsel ja isegi linna tasemel. Idee on, et see peaks parandama saidi tööd lĂ”ppkasutajate jaoks, kasutades CDN-teenuse pakkuja kiireid ĂŒhendusi. Me mĂ”tlesime selle ĂŒle pidevalt. NĂŒĂŒd on kĂ€es jĂ€rgmise projekti iteratsiooni aeg: CDN-teenuse pakkujate otsimine ja testimine Hiinas.

Ja sellest rÀÀgin teile jĂ€rgmises, lĂ”plikus osas 🙂

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster