Привет!
Никита байланыста - компанияның инженері SEMrush. Бүгін мен Қытайдағы semrush.com қызметіміздің тұрақтылығын қамтамасыз ету міндетіне қалай тап болғанымыз және оны жүзеге асыру барысында қандай қиындықтарға тап болғанымыз туралы айтып беремін (біздің деректер орталығының Америка Құрама Штаттарының шығыс жағалауында орналасқанын ескере отырып).
Бұл бірнеше мақалаға бөлінген үлкен әңгіме болады. Мұның бәрі біз үшін қалай болғанын айтып беремін: Қытайдан келген мүлдем жұмыс істемейтін қызметтен бастап, американдықтарға арналған американдық нұсқасы деңгейіндегі қызмет көрсету көрсеткіштеріне дейін. Бұл қызықты және пайдалы болады деп уәде беремін. Ендеше, кеттік.
Қытай интернетінің проблемалары
Тіпті желілік әкімшілендірудің ерекшеліктерін ең алыс адам естіген Қытайдың ұлы брандмауэрі. Уау, керемет естіледі, солай ма? Бірақ бұл не және ол қалай жұмыс істейді - бұл өте күрделі мәселе. Сіз Интернетте осыған арналған көптеген мақалаларды таба аласыз, бірақ техникалық тұрғыдан бұл брандмауэрдің құрылымы еш жерде сипатталмаған. Дегенмен, бұл таңқаларлық емес. Мен бірден мойындаймын, бір жылдық жұмыстың нәтижелеріне сүйене отырып, мен оның қалай жұмыс істейтінін нақты айта алмаймын, бірақ мен сізге өз пікірлерім мен практикалық қорытындыларымды айта аламын. Біз осы желіаралық қалқан туралы қауесеттерден бастаймыз.
Бұл брандмауэр туралы көптеген қауесеттер бар. Олардың негізгі және ең қызықтыларын бір тізімге жинайық:
- Google, Facebook, Twitter және басқа да ұқсас қызметтер Қытайда бұғатталған және жұмыс істемейді.
- Қытайдан ТЫС ЖӘНЕ ҚЫТАЙҒА өтетін кез келген трафик машиналық оқытудың көмегімен талданады және шектеледі (күдікті трафик жағдайында), бұл шекара арқылы өтуді (трафикті) айтарлықтай баяулатады.
- Қытайдың барлау агенттіктері желіаралық қалқан арқылы өтетін кез келген шифрланған трафикті бұзады.
- VPN туннельдері, IPSEC туннельдері тұрақсыз, апатқа ұшырайды және үнемі блокталады.
- Шифрлау неғұрлым қарапайым болса, трафикті аутентификациялау/шифрлау үшін пайдаланылатын өту фразасы неғұрлым қарапайым болса, ол қытайлық брандмауэр арқылы соғұрлым жылдам өтеді.
Міне, біз бұл қауесеттер туралы білдік:
- Google, Facebook, Twitter және басқа да ұқсас қызметтер шынымен бұғатталған (сіздің KO), бірақ көптеген техникалық Google домендері, мысалы, тыйым салынбаған және жұмыс істейді (бірдей gstatic.com). Бұдан шығатын қорытынды: бұғатталған сияқты көрінетін Google және басқа ресурстардың барлығын абайсызда кесіп тастауға болмайды.
- Шекарадан өтетін кез келген трафик оның уақытын айтарлықтай кешіктіреді. Екі нәтижені қараңыз. Бір сайт, бір бет, қарапайым GET бұралу'ом. Алғашқы өлшем Қытайдың өзінен (әдемі Шэньчжэнь қаласы) алынды. Екіншісі Гонконгтан сырттан өлшенді (оның егемендігі бар және онымен әлем арасында желіаралық қалқан жоқ). Түзу сызықтағы қалалар арасындағы қашықтық шамамен 30-40 км.
nikita@china-shenzhen:~# curl -o /dev/null -w@curl_time "https://www.semrush.com/info/ebay.com"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 381k 0 381k 0 0 71824 0 --:--:-- 0:00:05 --:--:-- 82832
time_namelookup: 0.004500
time_connect: 0.169342
time_appconnect: 0.723189
time_pretransfer: 0.723499
time_redirect: 0.000000
time_starttransfer: 1.532912
----------
time_total: 5.443407
----------
size_download: 390968 Bytes
speed_download: 71824.000B/s
nikita@china-hongkong:~# curl -o /dev/null -w@curl_time "https://www.semrush.com/info/ebay.com"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 319k 0 319k 0 0 2555k 0 --:--:-- --:--:-- --:--:-- 2573k
time_namelookup: 0.029366
time_connect: 0.030742
time_appconnect: 0.047310
time_pretransfer: 0.047388
time_redirect: 0.000000
time_starttransfer: 0.120793
----------
time_total: 0.124871
----------
size_download: 326755 Bytes
speed_download: 2616740.000B/sНазар аударыңыз уақытты қосу. Жалпы алғанда, сіз нәтижені көресіз: брандмауэр қосымша 4 секунд қосады, бұл өте ұзақ.
- VPN және IPSEC туннельдері жиі істен шығады. Мен бұл туралы сәл кейінірек және толығырақ айтатын боламын. Пайдаланушылар пайдаланатын VPN серверлері уақыт өте келе блокталады (әдетте пайдалану басталғаннан кейін бір күн ішінде).
- Қытайда тұратын адамдардан трафикті шифрлау неғұрлым қарапайым болса, ол шекарадан соғұрлым жылдам өтеді деген пікір бар, өйткені бұл жерде заңсыз ештеңе жоқ екенін түсіну оңай. Сол сияқты, «таза» трафик көбірек өткізу қабілеттілігі мен өту жылдамдығын алады, ал ештеңе түсінуге болмайтын «лас» трафик, керісінше, баяу өтуді алады. Мысалы, мен curl to қолданамын ifconfig.co HTTPS және HTTP протоколы арқылы.
curl -o /dev/null -w@curl_time "https://ifconfig.co/"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13 100 13 0 0 2 0 0:00:06 0:00:05 0:00:01 3
time_namelookup: 0.004305
time_connect: 0.397465
time_appconnect: 5.149305
time_pretransfer: 5.149393
time_redirect: 0.000000
time_starttransfer: 5.568847
----------
time_total: 5.568893
----------
size_download: 13 Bytes
speed_download: 2.000B/s
curl -o /dev/null -w@curl_time "http://ifconfig.co/"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 13 100 13 0 0 28 0 --:--:-- --:--:-- --:--:-- 28
time_namelookup: 0.004282
time_connect: 0.212457
time_appconnect: 0.000000
time_pretransfer: 0.212484
time_redirect: 0.000000
time_starttransfer: 0.450565
----------
time_total: 0.450620
----------
size_download: 13 Bytes
speed_download: 28.000B/sЖалпы жүктеп алу уақыты 5 байт үшін 13 секундтық айырмашылық. Сонымен қатар, мұндай сынақты бірнеше рет жасағанда, HTTP бойынша GET әр жолы әдетте бірдей уақытта аяқталатынын байқай аласыз, ал HTTPS-те сайт кейде 3, 5, 10 және тіпті 17 секундта жауап береді. Кейде SSL қателері орын алады:
Unknown SSL protocol error in connection to ifconfig.co:443.
Сонымен, бізде не бар:
- Қытайлық брандмауэр жасаған мәселелер жоғарыда сипатталған.
- Сыртқы ресурстарға және туннельдер ішіндегі пингтер мезгіл-мезгіл жоғалады.
- Екі нүкте арасындағы кідіріс үнемі өзгеріп отырады және көбінесе оны болжау мүмкін емес. Әртүрлі қалаларды/аймақтарды қосқанда, сіз аймақтардың географиялық орналасуына байланысты кідіріс аз болады деп күтесіз, бірақ сіз керісінше жағдайды аласыз.
- Интернет пен байланыс арналары не жылдам, не баяу. Аптаның күні мен күніне аздап тәуелділік бар, бірақ әрқашан емес.
- Қытайдан сыртқы әлемге DNS сұраулары кейде рұқсат етілген күту уақытынан асып кетеді.
Пайда болған сурет жай ғана «өте жақсы».
Деректер орталығы, мен айтып өткенімдей, Америка Құрама Штаттарының шығысында орналасқан және бүкіл SEMrush ондаған өзара байланысты өнімдерден, серверлерден, фронттерден, дерекқорлардан және осының барлығы DC және бұлттарда тұрады. Бізге, жүйелік әкімшілер тобы ретінде, аз күш-жігермен Қытайда жұмысты тез бастау міндеті қойылды.
Бізге маңызды сұраққа жауап беру керек болды: аз шығынмен өмір сүруге және қытайлық Интернет пен желіаралық қалқанға байланысты барлық мәселелерді желі/бұлт/сервер деңгейінде шешу мүмкін бе?
қабылдаудан бастадық .
ICP лицензиясы
Қытайда (Материктік Қытай) қызметіңізді орналастыру және сынақтарды жүргізу үшін алдымен домен үшін ICP лицензиясын алуыңыз керек.
Егер сіздің сайтыңыздың пайдаланушы трафигі Қытай материгінде тоқтатылса және доменіңізде ICP лицензиясы болмаса, сіздің трафик ISP/хостинг жағында блокталады. Бір қызығы, ICP лицензиясы Cloudflare немесе Alibaba Cloud болсын, белгілі бір провайдерді қамтиды. Сондықтан, егер сіз Cloudflare үшін ICP лицензиясын алып, веб-сайтыңызды олармен бірге орналастырсаңыз, Alibaba Cloud қызметіне «біркелкі» ауыса алмайсыз. Бұл лицензияға басқа хостинг қосу керек.
Доменге арналған ICP лицензиясын алғаннан кейін біз нақты техникалық идеялар мен шешімдер ойлап тауып, жүзеге асыра алдық.
Тестілеу шешімдері
Бірақ тікелей қою опцияларын жасамас бұрын, тұтқаларды бұрап, сайттың өнімділігін және оның жылдамдығын оңтайландырмас бұрын, біздің әрекеттеріміздің қайсысы жақсаратынын немесе керісінше сайттың жұмысын нашарлататынын көру үшін оны сынау құралын таңдау керек.
Біздің тестілеу құралы екі негізгі талапқа сай болуы керек еді:
- ол Қытайдан сынақ жүргізе алуы керек,
- оның браузер сынақтары болуы керек.
Сонымен таптық ! Олар бүкіл әлем бойынша тестілеу орындарын тамаша қамтиды. Қытайда сынақтарды осы құрал арқылы 100500 XNUMX провинциядан өткізуге болады. Әрқайсысында бірнеше түрлі провайдерлер + істеу мүмкіндігі бар Магистраль-тесттер (деректер орталығындағы виртуалды машина сияқты нәрсе) және Соңғы кезең-тесттер (мүмкіндігінше пайдаланушы шарттарына жақын, яғни жұмыс станциясы). Сынақтардың соңғы түрі қымбатырақ.
Жылдық келісім-шарт жасасқаннан кейін (бұл мүмкін емес), біз құралды зерттей бастадық. Шынын айтқанда, оның функционалдығы бізді таң қалдырды. Сіз іске қоса аласыз:
- DNS сынақтары,
- Веб-тесттер (браузер сынақтары, қарапайым GET/POST, мобильді клиент эмуляциясы және т.б.),
- Транзакциялық тексерулер (мысалы, логин),
- API сынақтары,
- Ping, traceroute, NTP және т.б.
Сіз бәрін тізімдей алмайсыз. Ең бастысы, әр сынақты тақырыптар мен басқа да параметрлер тобын қосу арқылы өте жақсы теңшеуге болады. Шығару - бұл тестіңізді толық сипаттайтын ақпараттың үлкен көлемі. Біз үшін ең қызықты нәрселер туралы айтатын болсақ (браузер сынақтары), нәтиже мыналарды қамтиды:
- Қосылу, күту, жүктеу, SSL, DNS уақыты,
- TTFB, TTLB, құжат аяқталды, көрсету уақыты, DOM жүктемесі,
- Жауап (алғашқы байтқа дейінгі уақытқа жақын нәрсе), веб-бетке жауап беру (соңғы байтқа жақын нәрсе),
- Кез келген пайыздық, Орташа, Медиандық уақыт
- Және т.б.
Тиісінше, бұл көрсеткіштердің барлығы өзгерістерді көру және жағдайдың жақсарғанын түсіну үшін тамаша. Біз негізінен қарадық Жауап, веб-бетке жауап, медиана, 75 және 95 пайыздар.
Басынан бері ауада болған маңызды сұрақ: Сіз Catchpoint-ке сене аласыз ба?? Бұл құрал Қытайдағы әртүрлі қалалардан сайтты жүктеудің нақты жылдамдығын көрсетеді ме, әлде бұл нақты пайдаланушы тәжірибесіне ешқандай қатысы жоқ вакуумдағы қандай да бір сынақ па?
Бұл үлкен мәселе, өйткені Ресейде Қытай сайтының қалай жұмыс істейтінін сенімді түрде білу мүмкін емес. Виртуалды машина арқылы шұлық-прокси жасау арқылы түпкілікті нәтиже сайт бірнеше минут ішінде жүктеледі, бұл сынақтар үшін қолайсыз, сондықтан қолмен тестілеудің жалғыз нұсқасы - таймері бар консольден бұралу және қарапайым GET. . Бұл көмектеседі, өйткені бұл сынақ желілік шешімнің жылдамдығын жақсы көрсетеді, ал егер браузер сынақтары болса, бұл өте жақсы.
Кейін Қытайға өзіміз барып, соған көз жеткіздік Сіз Catchpoint-ке сене аласыз, ол нақты өнімділік көрсеткіштерін дәл көрсетеді.
Cloudflare Қытай желісі
Біз semrush.com негізгі домені үшін Cloudflare-ді сәтті пайдаланғандықтан, біз олардың деп аталатын мүмкіндігін дереу қолданып көруді шештік. . Бұл опция тек жеке сұрау бойынша және қосымша ақыға Кәсіпорын сайттары үшін қосылады. Ол сонымен қатар Cloudflare провайдері ретінде тізімделген сәйкес ICP лицензиясы бар сайттарға ғана қолжетімді. Оны қосқаннан кейін Cloudflare ұсынған «Қытайлық CDN» сайт үшін қолжетімді болады - Қытай аймақтарынан келетін трафик ең жақын PoP (Presence Points) CF-ге түседі, содан кейін оның желілері немесе провайдерлер/серіктестердің желілері арқылы ол бастапқы жерге жеткізіледі. .
Бұл сынақ стендінің диаграммасы төменде берілген.
Бұл біз үшін тамаша нұсқа. Екінші домен де CF үшін болады, ол компанияда қолданылатын шешімдердің санын көбейтпейді, сонымен қатар іс жүзінде инфрақұрылымды қиындатпайды.
Біз браузер сынақтарын өткіздік және бұл келесідей болды:
Қызыл гауһар - сынақ сәтсіздігі. Төмендегі файлдар DNS қателері (күту уақытын шешу). Жоғарғы жағындағы сәтсіздіктер - күту уақыты.
Жұмыс уақыты: 86.6
Медиана: 18с
75 пайыздық: 29.3 с
95 пайыздық: 60 с
Медиана, жүктелгеннен кейін жойылды reCaptcha (Қытайда Google қызметі бұғатталған) 28 секундтан 18 секундқа қысқарды. Бірақ бұл semrush.com (АҚШ-тан) үшін бірдей сынақ сол беттегі (статикалық + динамикалық) пайдаланушылардың 10% (АҚШ-тан) үшін 95 секундтан аз уақыт бергенін ескерсек, бұл әлі де қорқынышты нәтижелер.
Әрбір сынаққа кіріп, қарап шығуға болады сарқырама және басқа да егжей-тегжейлі параметрлер. Біз қателердің себептерін зерттей бастадық, егер күту уақытында бәрі азды-көпті түсінікті болса: Қытайдағы Интернет «кіреді және шығады», сондықтан шетелден ресурстарды қосу және жүктеу жылдамдығы тұрақсыз және біркелкі емес, содан кейін DNS қателері бізді қатты таң қалдырды. Біз мұны таптық Поп Cloudflare шын мәнінде Қытайда орналасқан, сайттың мекенжайы кез келген IP мекенжайын шешеді, бірақ DNS серверлері американдық болып табылады, сондықтан DNS сұраулары шекарадан өтуге мәжбүр болады, сондықтан кейде олар сәтсіздікке ұшырайды.
Бұл сұрақты CF-мен түсіндіріп, бұл анықталды Олардың Қытайда өздерінің DNS серверлері жоқ, және қашан болатыны әлі белгісіз.
Сондықтан, біз тек Cloudflare DNS-ті сынауды шештік және сайтымыздың Cloudflare жұмыс механизмін «Тек DNS" Бұл Cloudflare трафикті өзі арқылы прокси арқылы жібермейтін режим, яғни ол DDoS қорғауын, CDN және басқа мүмкіндіктерді қамтамасыз етпейді және кәдімгі DNS сервері режимінде жұмыс істейді.
Бұл стенд келесі суретте схемалық түрде көрсетілген. Сурет Cloudflare DNS серверлері брандмауэрдің артында тұрғаны туралы жаңа білімді ескереді.
Catchpoint-те біз көптеген сәтсіздіктерді көрсететін қарапайым GET сынақтарын өткіздік (шолғыш сынақтары емес). Олар бірдей DNS қателерінен туындаған.
Біз бұл қателерді пайдаланып жөндеуді бастадық қазу және бірінші сұрау бойынша мекенжай дұрыс анықталғанын анықтады және қайталап сұрау бойынша біз әр жолы аламыз SERVFAIL и табылмады. Неліктен бұл кенеттен болып жатыр?
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)Cloudflare NS серверлеріне тікелей сұрау салу кезінде мұндай қателер жоқ:
root@iZwz97n2wgbp61qucbfrjsZ:~# for i in `seq 1 2`; do host semrushchina.cn ray.ns.cloudflare.com.; done
Using domain server:
Name: ray.ns.cloudflare.com.
Address: 173.245.59.138#53
Aliases:
semrushchina.cn has address 220.170.186.192
semrushchina.cn has address 220.170.186.192
Using domain server:
Name: ray.ns.cloudflare.com.
Address: 173.245.59.138#53
Aliases:
semrushchina.cn has address 220.170.186.192
semrushchina.cn has address 220.170.186.192Бұл мәселе «жергілікті» DNS серверінде немесе провайдердің серверінде екенін білдіреді.
Мұны қосымша тергеу көрсетті SERVFAIL шешімге келеміз AAAA-жазбалар.
Бұл Cloudflare-дан сұрау кезінде белгілі болды AAAA-доменде жоқ жазба, деп жауап берді Cloudflare А-қате және RFC сәйкес келмейтін жазба. Неліктен жергілікті шешуші (ххх) Маған ұнамады, ол жауап берді SERVFAIL. Бұл әрекет төмендегі журналда анық көрінеді:
root@iZwz97n2wgbp61qucbfrjsZ:~# dig -t AAAA semrushchina.cn @x.x.x.x
; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t AAAA semrushchina.cn @x.x.x.x
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55467
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;semrushchina.cn. IN AAAA
;; Query time: 334 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Tue Aug 14 23:38:50 CST 2018
;; MSG SIZE rcvd: 44
root@iZwz97n2wgbp61qucbfrjsZ:~# dig -t AAAA semrushchina.cn @dana.ns.cloudflare.com.
; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t AAAA semrushchina.cn @dana.ns.cloudflare.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63944
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;semrushchina.cn. IN AAAA
;; ANSWER SECTION:
semrushchina.cn. 300 IN A 220.170.186.192
;; Query time: 185 msec
;; SERVER: 173.245.58.105#53(173.245.58.105)
;; WHEN: Tue Aug 14 23:43:03 CST 2018
;; MSG SIZE rcvd: 60
Біз Cloudflare-ге қате туралы есепті жібердік, олар біраз уақыттан кейін оны түзетті. Бұл қызық болды: қазіргі уақытта Қытайда IPv6 қолдауы әлі жоқ, сондықтан Cloudflare сұрауға жауап ретінде ол жерде IPv6 мекенжайын бере алмады. AAAA-жазбалар. Соңында бәрі шешілді, осылайша Cloudflare Қытай үшін жауап бере бастады NODATA осындай өтініштерге.
Осылайша, Catchpoint сынақтарындағы DNS қателері күрт төмендеді, бірақ толық емес. Күту уақыты әлі де осында:
Ал біз басқа шешім іздей бастадық.
Келесі бөлімде мен қытайлық бұлтты қалай сынағанымызды айтып беремін Alibaba Cloud, Nginx-тің кішкене «сиқырының» көмегімен біз PoC (Тұжырымдаманың дәлелі) шешімдерін қалай тез жасай алдық, біз Multi-Cloud шешімдерін қалай жасадық, олардың бірі қызмет жұмысын жылдамдатуға айтарлықтай көмектесті. Қытайдан.
Бізбен бірге қалыңыз!
Келесі бөлімдер
Ақпарат көзі: www.habr.com
