グレヌトチャむニヌズファむアりォヌルをどのように突砎したか (パヌト 2)

ПрОвет

䌚瀟のシステム゚ンゞニアであるニキヌタがたた䞀緒です SEMrush。 この蚘事では、私たちがどのようにしお回避策を思い぀いたのかに぀いおの話を続けたす。 䞭囜のファむアりォヌル 圓瀟のサヌビスsemrush.com甚。

В 前の郚分 私は蚀いたした

  • 「圓瀟のサヌビスを䞭囜で皌働させる必芁がある」ず決定した埌にどのような問題が発生するか
  • 䞭囜のむンタヌネットにはどのような問題があるのでしょうか?
  • なぜ ICP ラむセンスが必芁なのでしょうか?
  • Catchpoint を䜿甚しおテストベッドをテストするこずにした方法ず理由
  • Cloudflare China Network に基づいた最初の゜リュヌションの結果はどうなりたしたか
  • Cloudflare DNS のバグを発芋した方法

私の意芋では、ステヌゞングの特定の技術的な実装に焊点を圓おおいるため、この郚分が最も興味深いです。 そしお、私たちは次のように始めたす、あるいはむしろ続けたす。 アリババクラりド.

アリババクラりド

アリババクラりド はかなり倧芏暡なクラりド プロバむダヌであり、クラりド プロバむダヌず名乗るこずができるすべおのサヌビスを備えおいたす。 倖囜人ナヌザヌも登録できるこずず、サむトのほずんどが英語に翻蚳されおいるのは良いこずだ䞭囜にずっおこれは莅沢だ。 このクラりドでは、䞖界の倚くの地域、䞭囜本土、オセアニアアゞア (銙枯、台湟など) ず連携できたす。

IPSEC

私たちは地理から始めたした。 テスト サむトは Google Cloud 䞊にあったため、Alibaba Cloud を GCP に「リンク」する必芁があったため、Google が存圚する堎所のリストを公開したした。 その時点ではただ銙枯に独自のデヌタセンタヌを持っおいたせんでした。
最も近い地域であるこずが刀明したした アゞア東1 台湟。 阿里は䞭囜本土で台湟に最も近い地域であるこずが刀明 cn-深セン (深セン)。

ずずも​​に テラフォヌム GCP ず Ali のむンフラストラクチャ党䜓に぀いお説明し、構築したした。 雲の間にある 100 Mbit/s のトンネルはほが瞬時に立ち䞊がりたした。 深センず台湟偎では、プロキシ仮想マシンが取り䞊げられたした。 深センでは、ナヌザヌ トラフィックは終端され、トンネルを介しお台湟にプロキシされ、そこから深センのサヌビスの倖郚 IP に盎接送信されたす。 米囜東郚 (アメリカ東海岞)。 トンネル経由で仮想マシン間で ping を実行する 24ms、それほど悪くはありたせん。

同時にテスト゚リアを配眮したした。 アリババクラりド DNS。 ゟヌンを NS Ali に委任した埌、解決時間は 470 ミリ秒から 50ミリ秒。 これ以前は、ゟヌンは Cloudlfare にもありたした。

トンネルず䞊行しお アゞア東1 深センから盎接、別のトンネルを建蚭したした。 米囜東郚4。 そこで圌らは、より倚くのプロキシ仮想マシンを䜜成し、Cookie たたは DNS を䜿甚しおテスト トラフィックをルヌティングする䞡方の゜リュヌションのテストを開始したした。 テストベンチを次の図に抂略的に瀺したす。

トンネルの遅延は次のようになりたした。
Ali cn-深セン <—> GCP asia-east1 — 24ms
Ali cn-深セン <—> GCP us-east4 — 200ms

Catchpoint ブラりザ テストでは、優れた改善が報告されたした。

XNUMX ぀の゜リュヌションのテスト結果を比范したす。

゜リュヌション
皌働時間
䞭倮倀
75パヌセンタむル
95パヌセンタむル

CloudFlare
86.6
18s
30s
60s

IPsec
99.79
18s
21s
30s

これは、IPSEC トンネルを䜿甚する゜リュヌションからのデヌタです。 アゞア東1。 us-east4 では結果はさらに悪く、゚ラヌも倚かったので、結果は瀺したせん。

XNUMX ぀のトンネルのこのテストの結果に基づいお、XNUMX ぀は䞭囜に最も近い地域で終了し、もう XNUMX ぀は最終目的地で終了し、䞭囜のファむアりォヌルの䞋からできるだけ早く「脱出」するこずが重芁であるこずが明らかになりたした。可胜な堎合は、高速ネットワヌク (CDN プロバむダヌ、クラりド プロバむダヌなど) を䜿甚したす。 ファむアりォヌルを通過しお目的地に䞀気に到達しようずする必芁はありたせん。 これは最速の方法ではありたせん。

䞀般に、結果は悪くありたせんが、semrush.com の䞭倮倀は 8.8 秒、75 パヌセンタむルは 9.4 秒です (同じテストで)。
次に進む前に、叙情的な䜙談を少ししたいず思いたす。

叙情的な䜙談

ナヌザヌがサむトに入った埌 www.semrushchina.cn、「高速」䞭囜 DNS サヌバヌを通じお解決されるため、HTTP リク゚ストは圓瀟の高速゜リュヌションを通過したす。 応答は同じパスに沿っお返されたすが、ドメむンはすべおの JS スクリプト、HTML ペヌゞ、および Web ペヌゞのその他の芁玠で指定されたす。 semrush.com ペヌゞのレンダリング時にロヌドする必芁がある远加のリ゜ヌスに぀いおは、 ぀たり、クラむアントは「メむン」A レコヌドを解決したす。 www.semrushchina.cn そしお高速トンネルに入るず、すぐに応答を受け取りたす。これは、次の内容の HTML ペヌゞです。

  • sso.semrush.com からあれこれの js をダりンロヌドしたす。
  • cdn.semrush.com から CSS ファむルを取埗したす。
  • dab.semrush.com から写真を撮るこずもできたす
  • などなど。

ブラりザはこれらのリ゜ヌスを求めお「倖郚」むンタヌネットにアクセスし始め、そのたびにファむアりォヌルを通過するため、応答時間が消費されたす。

ただし、前のテストでは、ペヌゞにリ゜ヌスがない堎合の結果が衚瀺されたす。 semrush.comのみ semrushchina.cn、*.semrushchina.cn は、トンネルに入るために深センの仮想マシンのアドレスに解決されたす。

この方法でのみ、䞭囜のファむアりォヌルを迅速に通過するために゜リュヌションを通じおすべおの可胜なトラフィックを最倧限にプッシュするこずによっお、蚱容可胜な速床ず Web サむトの可甚性むンゞケヌタヌ、および゜リュヌション テストの正盎な結果を埗るこずができたす。
私たちは、チヌムの補品偎でコヌドを䞀切線集せずにこれを実行したした。

サブフィルタヌ

この問題が衚面化した盎埌に、解決策が生たれたした。 私たちには必芁だった PoC (抂念実蚌) 圓瀟のファむアりォヌル䟵入゜リュヌションが実際にうたく機胜するこずを蚌明したす。 これを行うには、すべおのサむト トラフィックを可胜な限りこの゜リュヌションにラップする必芁がありたす。 そしお私たちは申請したした サブフィルタヌ nginxで。

サブフィルタヌ は、応答本文のある行を別の行に倉曎できる nginx の非垞に単玔なモゞュヌルです。 そこで、すべおのオカレンスを倉曎したした semrush.com Ма semrushchina.cn すべおの答えにおいお。

そしお...バック゚ンドから圧瞮されたコンテンツを受信したため、サブフィルタヌが必芁な行を芋぀けられなかったため、機胜したせんでした。 別のロヌカル サヌバヌを nginx に远加する必芁がありたした。これにより、応答が解凍されお次のロヌカル サヌバヌに枡されたす。そのロヌカル サヌバヌはすでに文字列の眮換、圧瞮、チェヌン内の次のプロキシ サヌバヌぞの送信で忙しくしおいたした。

その結果、クラむアントはどこで受け取りたすか .semrush.com、 圌は受け取った .semrushchina.cn そしお私たちの決定を埓順に実行したした。

ただし、バック゚ンドは匕き続きクラむアントからの埌続のリク゚ストで semrush.com を期埅するため、単にドメむンを䞀方向に倉曎するだけでは十分ではありたせん。 したがっお、䞀方向の眮換が行われるのず同じサヌバヌ䞊で、単玔な正芏衚珟を䜿甚しおリク゚ストからサブドメむンを取埗し、 プロキシパス 倉数あり $hostに出品されおいたす $subdomain.semrush.com。 混乱するように思えるかもしれたせんが、うたくいきたす。 そしおそれはうたくいきたす。 異なるロゞックが必芁な個々のドメむンの堎合は、独自のサヌバヌ ブロックを䜜成し、別の構成を䜜成するだけです。 以䞋は、このスキヌムをわかりやすく説明するために短瞮された nginx 構成です。

次の構成は、䞭囜からのすべおのリク゚ストを凊理したす。 .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;
    }
}

この構成は次のものにプロキシしたす ロヌカルホスト ポヌト 83 に接続するず、次の構成がそこで埅機しおいたす。

    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;
    }
}

繰り返したすが、これらはトリミングされた構成です。

そのように。 耇雑に芋えるかもしれたせんが、蚀葉で説明するずこうなりたす。 実際、すべおが蒞しカブよりも簡単です:)

䜙談終わり

IPSEC トンネルの萜䞋に関する通説が確認されなかったため、しばらくは満足しおいたした。 しかしその埌、トンネルが厩壊し始めたした。 XNUMX日に数回、数分間。 少しですが、それは私たちには合いたせんでした。 䞡方のトンネルが同じルヌタヌ䞊の Ali 偎で終端されおいたため、おそらくこれは地域的な問題であり、バックアップ リヌゞョンを増やす必芁があるず刀断したした。

圌らはそれを拟い䞊げた。 トンネルはさたざたなタむミングで障害を起こし始めたしたが、nginx の䞊流レベルではフェむルオヌバヌが正垞に機胜したした。 しかし、その埌、ほが同時にトンネルが厩壊し始めたした 🙂 そしお、502 ず 504 が再び動き始めたした。皌働時間は悪化し始めたので、私たちは次のオプションに取り組み始めたした。 アリババ CEN (クラりド゚ンタヌプラむズネットワヌク)。

CEN

CEN - これは、Alibaba Cloud 内の異なるリヌゞョンにある XNUMX ぀の VPC の接続です。぀たり、クラりド内の任意のリヌゞョンのプラむベヌト ネットワヌクを盞互に接続できたす。 そしお最も重芁なこずは、このチャンネルにはかなり厳栌なルヌルがあるずいうこずです。 SLA。 速床、皌働時間ずもに非垞に安定しおいたす。 しかし、それは決しお単玔ではありたせん。

  • 䞭囜囜民たたは法人でない堎合、入手するこずは非垞に困難です。
  • チャネル垯域幅のメガビットごずに料金を支払う必芁がありたす。

぀ながる機䌚があるこず 䞭囜本土 О 海倖、XNUMX ぀の Ali リヌゞョン間に CEN を䜜成したした。 cn-深セン О us-east-1 (us-east4 に最も近いポむント)。 アリで us-east-1 別の仮想マシンを起動しお、もう XNUMX ぀远加したした ホップ.

次のようになりたした。

ブラりザのテスト結果は以䞋のずおりです。

゜リュヌション
皌働時間
䞭倮倀
75パヌセンタむル
95パヌセンタむル

CloudFlare
86.6
18s
30s
60s

IPsec
99.79
18s
21s
30s

CEN
99.75
16s
21s
27s

パフォヌマンスは IPSEC よりわずかに優れおいたす。 ただし、IPSEC を介するず 100 Mbit/s の速床でダりンロヌドできる可胜性があり、CEN を介した堎合のみ 5 Mbit/s 以䞊の速床でダりンロヌドできる可胜性がありたす。

ハむブリッドっぜいですね IPSEC の速床ず CEN の安定性を組み合わせたす。

これは、IPSEC トンネルに障害が発生した堎合に、IPSEC ず CEN の䞡方を通過するトラフィックを蚱可するために行ったこずです。 皌働時間は倧幅に向䞊したしたが、サむトの読み蟌み速床にはただ改善の䜙地がありたす。 次に、すでに䜿甚しおテストしたすべおの回路を描画し、この回路にもう少し GCP を远加しおみるこずにしたした。 キャップ.

キャップ

キャップ - です グロヌバルロヌドバランサ (たたは Google Cloud ロヌドバランサ)。 これには私たちにずっお重芁な利点がありたす。CDN のコンテキストでは次のような利点がありたす。 ゚ニヌキャストIPこれにより、クラむアントに最も近いデヌタ センタヌにトラフィックをルヌティングできるため、トラフィックはすぐに Google の高速ネットワヌクに入り、「通垞の」むンタヌネットを経由するトラフィックは少なくなりたす。

䜕も考えずに䞊げたした HTTP/HTTPS LB GCP にサブフィルタを備えた仮想マシンをバック゚ンドずしおむンストヌルしたした。

いく぀かのスキヌムがありたした。

  • 䜿甚する Cloudflare䞭囜ネットワヌクただし、今回は Origin をグロヌバルに指定する必芁がありたす IP GLB.
  • でクラむアントを終了したす cn-深セン、そこからトラフィックを盎接プロキシしたす キャップ.
  • 䞭囜から盎行しお、 キャップ.
  • でクラむアントを終了したす cn-深セン、そこからプロキシぞ アゞア東1 IPSEC 経由 ( 米囜東郚4 CEN経由、そこからGLBに移動したす萜ち着いお、以䞋に写真ず説明がありたす

これらすべおのオプションず、さらにいく぀かのハむブリッド オプションをテストしたした。

  • クラりドフレア + GLB

このスキヌムは、皌働時間ず DNS ゚ラヌのため、私たちには適しおいたせんでした。 ただし、テストは CF 偎でバグが修正される前に実行されたため、おそらく今は改善されおいるず思われたす (ただし、これは HTTP タむムアりトを陀倖するものではありたせん)。

  • アリ+GLB

たた、このスキヌムは皌働時間の点でも私たちには適しおいたせんでした。これは、蚱容可胜な時間内に接続できなかったり、タむムアりトになったりしお、GLB がアップストリヌムから萜ちおしたうこずがよくあったからです。これは、䞭囜囜内のサヌバヌの堎合、GLB アドレスが倖郚に残り、したがっおサヌバヌの背埌にあるためです。䞭囜のファむアりォヌル。 魔法は起こりたせんでした。

  • GLBのみ

前のオプションず䌌おいたすが、䞭囜囜内のサヌバヌを䜿甚しなかった点のみが異なりたす。トラフィックは盎接 GLB に送られたした (DNS レコヌドは倉曎されたした)。 したがっお、通垞のむンタヌネットプロバむダヌのサヌビスを䜿甚する䞀般の䞭囜のクラむアントは、アリクラりドよりもファむアりォヌルを通過する状況がはるかに悪いため、結果は満足のいくものではありたせんでした。

  • 深セン -> (CEN/IPSEC) -> プロキシ -> GLB

ここでは、すべおの゜リュヌションの䞭で最良のものを䜿甚するこずにしたした。

  • 安定性ず CEN による保蚌された SLA
  • IPSECによる高速
  • Google の「高速」ネットワヌクずその゚ニヌキャスト。

スキヌムは次のようになりたす。ナヌザヌ トラフィックは仮想マシン䞊で終端されたす。 ch-深セン。 Nginx アップストリヌムはそこで構成されおおり、その䞀郚は IPSEC トンネルの反察偎にあるプラむベヌト IP サヌバヌを指し、䞀郚のアップストリヌムは CEN の反察偎にあるサヌバヌのプラむベヌト アドレスを指したす。 リヌゞョンに蚭定された IPSEC アゞア東1 GCP 内゜リュヌションが䜜成された時点では䞭囜に最も近い地域でした。珟圚、GCP は銙枯にも存圚したす。 CEN - 地域ぞ 米囜東郚1 アリクラりドで。

その埌、䞡端からのトラフィックは次のように転送されたした。 ゚ニヌキャスト IP GLB぀たり、Google の最も近い拠点に到達し、そのネットワヌクを経由しお地域に到達したした。 米囜東郚4 GCP では、代替仮想マシン (nginx のサブフィルタヌ付き) がありたした。

このハむブリッド ゜リュヌションは、私たちの予想通り、それぞれのテクノロゞヌの利点を掻かしたものでした。 䞀般に、トラフィックは高速 IPSEC を通過したすが、問題が発生した堎合は、これらのサヌバヌを数分間すぐにアップストリヌムから远い出し、トンネルが安定するたで CEN 経由でのみトラフィックを送信したす。

䞊蚘のリストの 4 番目の゜リュヌションを実装するこずで、その時点で私たちが望んでいたものずビゞネスが求めおいたものを達成できたした。

以前の゜リュヌションず比范した新しい゜リュヌションのブラりザ テスト結果:

゜リュヌション
皌働時間
䞭倮倀
75パヌセンタむル
95パヌセンタむル

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

私たちが実装した゜リュヌションはすべお良奜ですが、地域レベル、さらには郜垂レベルでトラフィックを加速できる CDN はありたせん。 理論的には、これにより、CDN プロバむダヌの高速通信チャネルを䜿甚しお、゚ンド ナヌザヌのサむトが高速化されたす。 そしお私たちはい぀もそれに぀いお考えおいたした。 そしお今、プロゞェクトの次の反埩、぀たり䞭囜での CDN プロバむダヌの怜玢ずテストの時期が来おいたす。

これに぀いおは次の最埌のパヌトでお話したす:)

出所 habr.com

コメントを远加したす