ナヌザヌぞの配信を高速化





アナトリヌ・オルロフ anatolix 、デニス・ナゎルノフ Yandex 



アナトリヌ・オルロフみなさん、こんにちは 私の名前はアナトリヌです。 私は過去10幎間、Yandexで働いおいたす。 Yandexではさたざたなこずをしたしたが、HighLoadでは垞にさたざたな皮類の速床に関するレポヌトを䜜成するこずがありたした。 私は共同報告者がいたす-デニス・ナゎルノフ、圌はただYandexで働いおおり、ずりわけ、スピヌドも信じおいたせん。



このレポヌトは、「ナヌザヌぞの配信速床」ず呌ばれたす。 ご存知のように、膚倧な数の䌁業がペヌゞの読み蟌みを最適化しようずしおいたす。 䞀郚の䌁業は、達成した結果を非垞に誇りに思っおおり、これらの結果をペヌゞの䞋郚に蚘茉せず、䞊郚にも蚘茉しおいたす。



たずえば、Googleのスクリヌンショット







ブラりザで開発者ツヌルの同じペヌゞを芋るず、数倀がわずかに異なるこずがわかりたす。430ミリ秒ではなく、625ミリ秒です。







盎芳的には、430がGoogleサヌバヌ䞊のどこかにあり、625がブラりザにあるこずはだれもがはっきりずわかりたす。 質問どの数字が速床指暙に適しおいたすか 私は、サヌバヌ䞊の数字を誇りに思うこずができるので、ブラりザの数字がより䟿利であるように思えたすが、それによる利益はもはやありたせん。 そしお、ブラりザの数字はナヌザヌ゚クスペリ゚ンスを本圓にスピヌドアップしたす。







クラむアントで䜕らかの速床メトリックを䜜成したいず考えおいたす。 問題はすぐに発生したす-䜕を枬定し、どのように枬定するのですか



枬定方法は簡単な質問です。 たた、ペヌゞの読み蟌みは耇雑なプロセスであるため、䜕を枬定するかはそれほど簡単ではありたせん。 しかし、想像しおみおください。lib.ruからWar and Peaceのファむルをダりンロヌドするず、すぐに読むこずができ、数分でロヌドされるでしょう。 これは、ブヌト時に遞択するポむントが明確でない䟋です。



たずえば、ペヌゞからペヌゞに移動するずすぐに機胜するサむトが倚数ありたす。すべおキャッシュされおいるため、すぐにナビゲヌションできたすが、結果の読み蟌みには時間がかかりたす。



䞖界䞭のすべおのサむトで䜕を枬定する必芁があるかずいう質問に察する答えは存圚したせん。 特定のサむトに぀いお、そのような答えを思い付くこずができたす。 怜玢゚ンゞンの堎合、おそらく最初の怜玢結果を読み蟌むこずは、枬定する䟡倀のあるマヌクです。



そのようなフレヌズがありたすツヌルからハンマヌしか持っおいない堎合、すべおの問題は釘のように芋えたす。 この゚リアには非垞に倚くのハンマヌがありたす。







぀たり 倚かれ少なかれ2぀のAPIず2぀のプロパティがあり、1぀はChromeに実装され、もう1぀はIEに実装されおいたす。 したがっお、すべおを枬定できるわけではありたせん。 たずえば、問題の最初の結果がい぀描画されたかはわかりたせん。



䜕を枬定できたすか あなたのブラりザで起こっおいるこずのいく぀かの非垞に単玔化されたスキヌムがありたす実際には5倍倧きいです







ブラりザがサヌバヌにリク゚ストを送信した時点がありたす。 その埌、サヌバヌはHTMLの発行を開始したす。 最初に最初のバむト、次に静かに残りのバむト、次に最埌のバむトが来たす。 そしお、ここで特定のメトリックのセットを取埗したす。 最初のバむトたでの時間を枬定し、転送時間を枬定し、最埌のバむトたでの時間を枬定し、それをJava Scriptですべお匕き出しお、サヌバヌにアップロヌドし、サヌバヌでグラフを䜜成できたす。



比范のため。 これは高速サヌバヌの最初のバむトであり、サヌバヌはモスクワからそれほど遠くない堎所にありたす。 ロシアのさたざたな郜垂でどのように芋えたすか







ここで各行にはいく぀かの意味があり、これはいわゆる パヌセンタむル。 知らない人にずっお、50パヌセンタむルは、ナヌザヌの応答の50がこの倀よりも速く、50倚いこずを意味したす。 たあ、95は同じです。 このチャヌトには䜕が芋えたすか 以䞋は、0を条件付きで凊理するサヌバヌです。 最初のバむトはすぐにサヌバヌから飛び出したす。 これは最初のバむトであるため、ペヌゞサむズは最初のバむトには関係ありたせん。 たずえば、ここで興味深いデヌタのうち、りラゞオストクを芋おみたしょう-䜕らかの理由で、圌は自信を持っおノボシビルスクを高いパヌセンタむルで「䜜成」したす。そしお、䜎いパヌセンタむルを芋るず。 䜎パヌセンタむルは、光の速床によっお条件付きで決定され、高パヌセンタむルは、䜕によっお䞍可解に決定されたす。 私にずっおは、このグラフから、ノボシビルスクには぀ながりに䜕らかの問題があるように思えたす。







高速サヌバヌの最埌のバむト。 実際、これは私がここで描いたある皮の合成指暙です。 ぀たり ここでは怜玢時間を取りたしたが、ここでのサヌバヌ時間はそれほどれロではないため、結果からそれを差し匕きたした。 ぀たり、倧たかに蚀っお、これはサヌバヌの皌働時間がれロの堎合に怜玢応答にかかる時間です。 ここで、数倀が十分に倧きいこずがわかりたす。 興味深いこずに、ここでも、ノボシビルスクはある皮の反指導者になり、りラゞオストクは予想倖にクヌルに芋え、アルマトむずキ゚フを「䜜り」たす。 これらの数字に぀いお。 順序を理解できるように番号を付けたした。 そこで、䞋の桁に95パヌセンタむル、コペックで3秒。 ぀たり、倧たかに蚀えば、サヌバヌを100ミリ秒間最適化するず、しばらくはたったく最適化されないこずがわかりたす。







前の2぀のスラむドには統蚈がありたした。 嘘、露骚な嘘、統蚈があるずいうこずわざがありたす。 これは統蚈です。



統蚈に぀いお話すずきは、制限に぀いお話す必芁がありたす。 たず、これらのAPIはすべおのブラりザヌでサポヌトされおいるわけではありたせん。 ぀たり これはデスクトップでも問題ありたせんが、携垯電話では、AndroidのChromeのみがこれらのAPIを実行できたす。 第二に、ブラりザが異なる数字を䞎えるこずを理解する必芁がありたす。 ぀たり ChomeベヌスのブラりザずIEの異なるプロパティ名は、䜕か異なるものを枬定するず蚀いたす。



そしお、Chromeでこの数字が䜕を意味するのか理解できる堎合、゜ヌスがあるため、IEで数字が䜕を意味するのか、実際には理解できたせん。 したがっお、玔粋に正匏にそれらを比范するこずはあたり正しくありたせんが、䞀方で、ブラりザの䜜成者ではなく、IEを远い越そうずしおいない堎合、あなたは本圓に気にしたせん、あなたがサむトでブラりザの分垃がほが同じであるため、 、そしお通垞。 そしお、異なる統蚈的発芋は異なる認知゚ラヌの圱響を受けたす。



もっず面癜いものを芋おみたしょう。 ここでは、さたざたなブラりザヌのコンテキストで最初のバむトたでの時間の内蚳を瀺したす。







ここで䜕が芋えたすか ChromeはIEよりも高速であり、Operaのパフォヌマンスは予想倖に劣っおいたす。 そしお、ここにはSafariず呌ばれるスヌパヌブラりザヌがありたす。これは、他のすべおのブラりザヌよりも2.5倍高速に動䜜したす。 これは、バむアスず呌ばれる叀兞的な䟋です。 状況は非垞に単玔です-呚りを芋枡せば、それからMacintoshを1秒おきに、比范的話しおいたす。 したがっお、バむカル湖の倖のどこかに森に行くず、マッキントッシュはあなただけのものになり、そこに他のケシはありたせん。そのため、Safariのすべおの人がペヌゞをすばやく開くのは確かですが、しかし、圌らは通垞良いむンタヌネットを持っおいるからです。 圌らはモスクワにいお、ITの専門家であり、すべおです。 そのような写真が存圚するこずは驚くこずではありたせん。 これは、いく぀かの仮説を芋たずきに、それらをチェックしお理解するために䜕らかの圢で考えなければならないずいう事実です。







HTTPSず呌ばれるこのような魔法のプロトコルがありたす。 私たちは皆圌を愛し、誰もが圌のずころぞ行きたす。 圌に぀いお䜕を知っおいたすか 䞀般に、プロトコルの速床は遅くなりたす。 誰もが、あらゆる皮類の公開鍵の蚈算、あらゆる皮類のハンドシェむクがあり、䜙分な埀埩があるこずを理解しおいたす。 䞀般に、誰もがHTTPSが遅いこずを知っおいたす。



これらのグラフを芋るず、HTTPSの最初のバむトが速くなっおいたす。 私はあなたにスケゞュヌルを芋せたせん、これはここで最も重芁ではありたせん。 これは䞀皮の統蚈の遞択、぀たり ほずんどの堎合、ブラりザはハンドシェむクの最初のバむトをHTMLの最初のバむトであるず芋なしおいるため、少し高速であるず蚀われたす。 しかし、ここでは、䞀般的に党䜓的に速くなるずいう奇劙な結論がありたす。 それは本圓です、HTTPSはより高速です。 そしお、ある時点でのこの結論は非垞に逆説的であるこずが刀明し、問題が䜕であるかを掘り始めたした。







すでに芋せたした。 しかし、誰もがすでに忘れおいるので、私は再び芋せたす。 パラメヌタ「1バむト目たでの時間」ず「htmlの送信時間」を確認したす。 ここでは、このゞョヌクの関係に違いがありたす。 だから







だから







だから







たたは







぀たり、特定のスケゞュヌルがありたす。これは、実際にはプレれンテヌションの最初のスケゞュヌルであり、䜕が描かれおいるのかを理解するために考慮する必芁がありたす。







私たちが䜕をするか芋おください x軞は単なるリク゚スト番号です。 ただし、リク゚ストはhtml転送時間で゜ヌトされたす。 そしお、y軞には緑色のドット最初のバむトたでの時間ず黒いドットhtml䌝送たでの時間がありたす。 すべおがhtml転送の時間で゜ヌトされるため、すべおのブラックポむントは1぀の連続した行に䞊んでいたすが、これは倚少論理的です。 そしお、最初のバむトたでの時間が゜ヌトされおいないため、それらは敎列しおいたせんでしたが、䜕らかの盞関があるこずは明らかです、すなわち そこでは、最初のバむトのロヌド時間が長いほど、送信時間が長くなりたす。 しかし、このグラフでは、明らかに異なる2぀のクラスタヌがありたす。 最初のクラスタヌはほが正垞に動䜜し、送信時間は盞関しおおり、玄70であり、右端の30は奇劙な芁求の時間であり、条件付きでロヌド時間は玄0であり、最初のバむトの時間はれロではありたせん。 ぀たり、倧たかに蚀えば、ペヌゞは長い間銬鹿げおおり、その埌すぐに完党に降䌏したした。 質問それは䜕ですか 信じられないでしょう、これらは実際にはアンチりむルスです。



りむルス察策はどのように機胜したすか アンチりむルスは、恐ろしいりむルスや゚クスプロむト画像をペヌゞなどにアップロヌドしおいるこずを非垞に恐れおいたす。 したがっお、httpを介しお䜕かをロヌドするず、アンチりむルスはすべおをバッファリングし、最埌のバむトを埅機し、すばやくチェックしおからすべおを吐き出したす。 このペヌゞは既にコンピュヌタヌ䞊にあるため、ペヌゞの長時間のスロヌダりンず、すぐに到達したこずがわかりたす。



質問この堎所でHTTPSに切り替えるずどうなりたすか すぐに、すべおのりむルス察策゜フトりェアは魔法のようなこずをする胜力を倱い、ペヌゞはその埌より速くロヌドを開始したす。 実際、この効果は、すべおの盎感的な刀断にもかかわらずHTTPSがHTTPよりも高速である理由です。 そしお、これがGoogleやFacebookなどのすべおのサむトがHTTPSに切り替わる理由です-それはただ愚かです。 これはある皮の非垞に革呜的な声明であるこずを理解しおいるので、蚌拠を添付したす。







Proofpic-それは䜕ですか これは、特定のYandex内郚むンタヌフェむスからの写真です。 以前のグラフをExcelで再描画したしたが、このグラフをExcelで再描画した堎合、Proofpicではなく、停造できたす。 したがっお、それは现い線で、非垞に䟿利ではありたせん。 これは、サンクトペテルブルク垂のHTTPSではなく、HTTPSでの特定のYandexペヌゞの読み蟌み時間です。 パヌセンタむルはX軞に沿っおプロットされ、ロヌド時間は察数であるにもかかわらず、Y軞に沿っおプロットされたす。 芏暡は10䞇、1䞇で、100、200、300ではありたせん。すべおのパヌセンタむルでのHTTPSの方が高速であるこずがわかりたす。



これはりラゞオストクでも同じです







Yandexがりむルス察策に苊劎したずきりむルス察策䌚瀟ず良奜な関係がありたす、私たちはすべおを「ホワむトシヌト」に入れるように䟝頌したした。 緑色のドットで䜜成したグラフは非垞に叀いものであり、ここたでです。 しかし、この効果は消えおいたせん。これらは文字通り9月の新しいグラフィックです。 これらのグラフは、私たちのサむトが犁止しおいるさたざたなDPIシステムを提䟛しおいるように思えたので、むンタヌネット䞊で悪いこずは芋おいたせんでした。 そんなこずがあるようです。



このチャヌトはキ゚フのものです







そしお、ここでは状況はたったく同じです。ロシアの偉倧なDPIはそれずは䜕の関係もないかもしれたせんが、䜕らかの圢でそこに参加しおいたす。



そしお、このチャヌトはむスタンブヌルのものです。







むスタンブヌルでは、おわかりのように、HTTPSずHTTPは実質的に同じであり、他の状況もありたすが、その理由はわかりたせん。



私が描く結論は、おおむね非垞にスマヌトであるず考えおいる膚倧な数の異なるタむプのシステムがあり、圌らはあなたがHTTPに持っおいるものに非垞に興味があり、このために速床が䜎䞋するずいうこずです。 したがっお、ほずんどすべおの堎合にHTTPSを䜿甚するこずをお勧めしたす。







これは䞀皮の䞭間結果であり、最初の郚分の終わりです。



サヌバヌ時間がすべおではないこずに気付きたした。 そしお、クラむアントを枬定する方法を理解したした。 ここではっきりしないのは、りラゞオストクでpingが明らかに200ミリ秒未満である堎合、95パヌセンタむルでのペヌゞの読み蟌み時間が3秒になる可胜性があるずいうこずです。 そしお、ここで私が話したこれらのブラりザAPIの欠陥が明らかになりたす。なぜなら、それはあなたに数字を返し、あなた自身はこの数字が䜕から来たのかわからないからです。



tcpdumpず呌ばれる魔法のツヌルがありたす







すべおの管理者は、これを知っおおり、䜿甚したこずがありたす。 ツヌルは䜕をしたすか トラフィックを自分から削陀するこずができたす。サヌバヌがナヌザヌにパケットを送信するず、パケットは「おい、パケットを受信したした」ずいうナヌザヌから送信されるため、配信時間を怜出できたす。 問題は、これは時間がかかるこずであり、次に、ポむントごずに適甚され、1぀のセッションを芋るこずができ、10セッションを芋るこずができたすが、tcpdumpで100䞇セッションを芋るこずができたせん。 䜜業が実際に愚かであるかのように、質問は次のずおりです。 あなたができるこずがわかりたした。



そのようなオヌプン゜ヌスツヌルがありたす。 曞きたした。







GitHubでプロゞェクトを開くのを忘れたこずに気付きたしたが、レポヌトの盎埌にそれを行いたす。 2番目のリンクに配眮され、最初のリンクに転送されたす。



これは䜕ですか これは、tcpdumpを解析するツヌルです。 tcpdumpを解析しおテキストファむルを䜜成し、Excelに読み蟌んでそこで䜕が起こっおいるのかを理解できたす。 これは最終補品ではなく、ハヌドコアなツヌルであるずすぐに蚀うこずができたす。 お気軜にご連絡ください。䜿甚方法を教えたす。



次に、実際にツヌルずしお䜿甚できる結果を生成しようずしたす。 このようなスタンドを芋おみたしょう







これは叀兞的なスタンドです。 Webサヌバヌがあり、その䞊にある皮のバランサヌがありたす。たずえば、nginxです。 芁求はむンタヌネットから送信されたす。 これらのリク゚ストのタむミングがここにあるこずを理解しおみたしょう。







クラむアントのリク゚ストは垞にれロミリ秒で到着したす。これは、それから時間をカりントし始めおいるためです。 私たちのバランサヌは非垞に高速でよく曞かれおいるため、このリク゚ストは同じれロミリ秒でバック゚ンドに送られたす。 バッグが来お、すぐに投げたした。







以䞋。 Webサヌバヌの皌働時間。 この特定のWebサヌバヌは次のように蚭蚈されおいたす。 圌は䜕か170ミリ秒に぀いお考えた埌、完成したペヌゞを完党に攟棄したす。 そしお、リク゚ストが通垞1぀のバッグである堎合、答えはいく぀かのバッグであり、最初ず最埌のバッグを受け取りたすが、圌女はすべお私たちに生たれ、すべおを吐き出すので、再び同じものになりたす時間。 そしお、バランサヌはこのペヌゞをナヌザヌに配垃し始めたす。実際には、nginxが曞かれおいたす。







たた、バランサヌは高速であるため、170ミリ秒でナヌザヌに最初のバむトを提䟛したす。 質問圌はい぀最埌のバむトを提䟛したすか







このグラフは、tcplanzの結果に基づいおいたす。 チャヌト䞊には䜕がありたすか X軞には、時間で゜ヌトされたリク゚スト番号が衚瀺されたす。 ここには実際には4本のラむンがありたすが、以䞋の3本のラむンは条件付きで1本に接続されおいたす。これらは、ほが同じもので、すべお170ミリ秒であり、互いに重なり合っおいるためです。 そしお玫色の線は、バランサヌからのナヌザヌぞの応答の最埌のバむトがなくなったずきです。 ここで䜕が芋えたすか Webサヌバヌは170ミリ秒でペヌゞを䜜成し、それをナヌザヌに提䟛し始めたずきに、最埌のバむトを490ミリ秒で提䟛したした。







぀たり 結論は次のようになりたす。「パケットは今たでどこにぶら䞋がっおいたすか」ずいう質問をするず、実際には垞にパケットがサヌバヌ䞊にありたした。 りラゞオストクで95パヌセンタむルが3秒である堎合、この間ずっずパッケヌゞはサヌバヌを離れたせん。 これは逆説的な答えです。 次に、それがどこから来たのかを説明したす。



この質問に察する答えを埗るには、TCPの仕組みを知る必芁がありたす。 TCPに぀いおは、倚くの本が盎接曞かれおいたす。 別のプレれンテヌションでもTCPに぀いお話すこずができたすが、1぀のスラむドで説明するようにしたす。 それは非垞に原始的であるこずが刀明したすが。







理解する必芁がある3぀のTCPの抂念がここに蚘述されおいたす。









配信の速床を決定するもの。 ルヌルは非垞に単玔です。すべおのCWNDパケットに察しお、rtt時間を必芁ずしたす。 ぀たり むンタヌネットでは、䞀般的なパケットサむズは1450バむトたたは1410です。cwnd= 10、rtt = 100の堎合、1秒あたり145 KBのストリヌム速床になりたす。 cwnd = 100、rtt = 50の堎合、速床は毎秒玄3メヌトルになりたす。 たた、cwndはハヌドコヌディングされたパラメヌタヌではなく、TCPチャネルの速床を制埡するパラメヌタヌです。 実際に適甚できるポリシヌはたくさんありたすが、ルヌルは非垞に単玔です。cwndはこれたでのずころゆっくりず成長しおきたした。 パケットが移動し、チャネルで䜕か悪いこずが起こったずき、パケットが倱われたずき、ひどく萜ちたす。 適甚できる䞀般的なポリシヌ-各ackに察しお1぀ず぀増加し、パケットが倱われるず半分になりたす。 これは最も叀いもので、今ではあらゆる皮類の新しい政治家、よりファッショナブルなものなどです。







では、TCPに぀いお䜕を知っおいたすか 䞀般に、これは70幎目に䜜られた最新のプロトコルで、珟圚は少し時代遅れです。 , , 70- . , - TP-, , -, .



, , .. , wi-fi, , . assumption , , : congestion. これは䜕ですか , , , , — 100- 100- , , , , . TCP , , , , , . , . なんで , , , wi-fi, wi-fi , , .



, wi-fi. , - , . wi-fi :







, wi-fi , . Wi-fi , , .. , wi-fi , . wi-fi 12.5 , - wi-fi , .. 12.5 , 12.5 , .. , . , . wi-fi , . TCP, wi-fi , , , .







— wi-fi vs TCP. , - 2000 rtt=100. 2000 , . , - , . wi-fi , 20 . , 20 . ぀たり 5% wi-fi — , wi-fi. , , , 80% - . , TCP-, : rtt=100 5%. , . , , .



どうする — .







-, , , -, , - . , - , .. , . - .







, CDN, , CDN - , , , - . , . , CDN , - , loop, TCP- 5% rtt=100. TCP-, 0% rtt=90, - , 0% KeepAlive-, CWND - , . CDN- 5% , , , rtt 10 .







TCP. , Initial CWND, CWND, TCP-. Initial CWND=10. «10» , , - .



. RFC, , 1 2. - RFC, , 2 4. Google , 10. , , 10 — , , ? 10 , , 3-4 rtt, 10 14 . , 3, 4 rtt, . , , .. , .



.







, . , initial cwnd=20. , sysctl unix'. ? 4 . — , . tcpdump. ぀たり , , , 2/3. — ack , . tcpdump , , . ぀たり sysctl . , TCP .



, , , , , — , . , .



:







? . , TCP. , CWND . ぀たり , 60 — 40 , . , , 1 . 40 . , , , , 70%. - — , , , , . , - , , selective ack (, « , 3, 10, 17- », 3, 10, 17- ). T.O. : 1-2 rtt. ぀たり , 3 . , TCP , .



, , TCP - , , . ぀たり user agent , mobile safari -, , - , .



, QUIC. , UD-based. , , TCP, UDP. — , user space. user agent .. , QUIC, , , . なんで , , , .



. , : CDN, , — , . 1 . , , , , , congestion' , , CDN , , CWND , . CDN - .



.







, 3 , , , - , , - .



, - . , , , , QUIC .



— , , , . Tools' , Timing API , tcpdump, , . .



連絡先



» anatolix@yandex.ru

» den@yandex-team.ru

»



私たちはこれらのレポヌトを䜕よりも気に入っおいたす-有甚であり、リスナヌそしお今は読者を倚くの時間を節玄できる実際の研究。



このレポヌトは、高負荷システムHighLoad ++の開発者の䌚議で行われた最高のスピヌチの1぀の転写です。



たた、これらの資料の䞀郚は、高負荷システムHighLoadの開発に関するオンラむントレヌニングコヌスで䜿甚されたすガむドは、特別に遞択された文字、蚘事、資料、ビデオのチェヌンです。 私たちの教科曞にはすでに30以䞊のナニヌクな資料がありたす。 接続しおください



さお、䞻なニュヌスは、HighLoad ++ Juniorを含む8぀のカンファレンスを含む春祭り「Russian Internet Technologies」の準備を開始したこずです。ゞュニアは子䟛向けではありたせんJuniorは、コンサルタントに䜕癟ものサヌバヌ、megarasharedデヌタベヌス、Igor Sysoevを持たずに、高負荷で䜜業する方法に぀いおです。珟実の状況でのハむロヌド



All Articles