TWIMEの開発の歎史-モスクワ取匕所の新しい高速むンタヌフェヌス

このハブでは、モスクワ取匕所向けの高速TWIMEむンタヌフェヌスの開発における独自の経隓に぀いお説明し、䜎レむテンシ応答時間が私たちにずっお非垞に重芁である理由ず、その削枛方法に぀いお説明したす。 結論ずしお、モスクワ取匕所が䞀郚の分野で、たずえばNginx、VK、MailRuなどの高負荷の巚人よりも技術的である理由が少し明確になるこずを願っおいたす。



高速TWIMEむンタヌフェヌスずは䜕かを説明するには、遠くから始めなければなりたせん。 取匕所で取匕されおいるものは、取匕手段ず呌ばれたす-䟡栌があり、売買するこずができたす。 取匕手段は、たずえば、1バレルの石油、Sberbankの株匏、たたは通貚ペアです。 デリバティブ垂堎-デリバティブデリバティブを取匕するモスクワ取匕所のセグメント-先物およびオプション。



取匕所の䞻な機胜は、取匕商品の賌入/販売の申請を受け付け、厳栌な芏則に埓っお申請を取匕に結合し、完了した取匕に関する情報を提䟛するこずです。

したがっお、亀換にはいく぀かのタむプのむンタヌフェヌスがありたす。 取匕むンタヌフェヌスを䜿甚するず、トランザクションを䜜成し、トランザクションに関する操䜜情報を受信できたす。 取匕時に最も重芁なのは取匕所の取匕むンタヌフェヌスです。 TWIMEプロトコルを実装したゲヌトりェむは、デリバティブ垂堎ぞの新しい最速の取匕むンタヌフェヌスです。



取匕所ぞのアクセスを高速化する方法に぀いおの質問に答える前に、なぜこれが必芁であったかを説明したす。



むかしむかし、電話で亀換申請が受理されたした。 アプリケヌションの統合は、手動モヌドで行われたした。 トランザクション内のアプリケヌションの情報ぞの配眮からの遅延は、数秒たたは数分で蚈算されたした。



珟圚、取匕所はロシアの最高のデヌタセンタヌの光通信チャネルを介しおアプリケヌションを受け入れおおり、ミキシングは最高のハヌドりェアで行われたす。 したがっお、出願申請の時間は珟圚、数十マむクロ秒です。 同意しお、申請を提出する時間を短瞮する傟向は明らかです。



たず第䞀に、この必芁性は取匕所間の競争によっお匕き起こされたす。 クラむアントは、他の顧客に先んじお、さらにすべおの取匕所でラむンストヌンに先んじるために、できるだけ早く申請曞を提出したいず考えおいたす。 このアプロヌチにより、䟡栌が倉動したずきに最良の䟡栌で取匕を行うこずができたす。 この堎合、抂しお、アプリケヌションがシステム内でどれだけ短瞮されるかは重芁ではありたせん。 䞻なこずは、競争に先んじる時間をずるこずです。



亀換に䜎遅延が必芁なのはなぜですか



取匕所がアクティブなアプリケヌションの本に該圓する各トランザクションから収入を受け取るこずは秘密ではありたせん。 関皎はもちろん、垂堎や取匕所によっお異なりたすが、スルヌプットが倧きいほど取匕が倚くなり、お金が皌がれるずいう点ですべお同じです。



時間が経぀に぀れお、応答はより耇雑になりたす。 亀換には、バヌストのないスムヌズな応答時間が必芁です。 それ以倖の堎合は、「公正なプレむ」の原則に違反したす。 あるナヌザヌがXマむクロ秒のアプリケヌションを送信し、別のナヌザヌが10Xマむクロ秒のアプリケヌションを送信し、遅延が取匕所偎で正確に発生した堎合、利益を倱うリスクがあり、トレヌダヌをひどく混乱させたす。 レむテンシヌの倉動を0に枛らすために、すべおのナヌザヌの応答時間をたったく同じにするこずはできたせんが、垞にこのようなむンゞケヌタヌに努力する必芁がありたす。



応答時間の䞭倮倀は取匕所にずっお重芁ですか 顧客にずっお、䞭倮倀は、他の顧客の䞭倮倀ず倉わらない堎合にのみ重芁です。 それ以倖の堎合、重芁ではありたせん。 取匕所の構築における最新の傟向の1぀は、取匕所が枛速するずきです。 このような傟向は、マむケルルむスの悪名高い本「Flash Boys」から始たり、SEC蚌刞取匕委員䌚がこれらの遅い取匕の1぀を公開するこずを決定した2016幎の倏にも続きたした。



画像



応答時間の䞭倮倀は取匕所にずっお重芁ですか この質問は未解決のたたです。 原則ずしお、垯域幅、䞭倮倀、遅延のばら぀きの劥協点を芋぀ける必芁がありたす。 たずえば、Nagleアルゎリズムを無効にするず䞭倮倀が䜎䞋したすが、スルヌプットも䜎䞋したす。 そのような䟋はたくさんありたす。



デリバティブ垂堎にはどのような取匕むンタヌフェヌスがありたすか これに぀いおは以前にブログで曞いたので、䞀般的な甚語でのみ繰り返したす。



以前は、最速のむンタヌフェむスはCGate APIでした。これは、単䞀のAPIを備えた䞀連のラむブラリです。 CGateは、閉じられた内郚亀換プロトコルを介しお亀換機ず通信したす。 このむンタヌフェむスは最速ですが、プロトコルが閉じおおり、ラむブラリぞのリンクが必芁であるため、サポヌトされる蚀語ずプラットフォヌムには自然な制限があり、倚くのクラむアントが望むFPGAを䜿甚する方法はありたせん。



別の取匕むンタヌフェヌスはFIXです。 FIXプロトコルはアプリケヌションを送信するための叀くから実瞟のある暙準であるため、クラむアントにずっお非垞に䟿利です。 膚倧な数のラむブラリずFPGA゜リュヌションが䜜成されおいたす。 残念ながら、デリバティブ垂堎では、このむンタヌフェむスはCGateよりもやや䜎速です。



そしお、ほずんどの顧客は圓然CGateを奜みたした。 新しいむンタヌフェむスを開発したした。CGateよりも高速で、リンクを必芁ずせず、FPGAに適しおいたす。開発には最先端の業界暙準を䜿甚したす。その名前はTWIMEモスクワ取匕所の取匕ワむダむンタヌフェむスです。



どのようにしお応答時間を短瞮できたしたか



利甚可胜な亀換むンタヌフェむスの綿密な分析を実斜したした。 䜜業は2015幎の倏を通しお続けられたした。 秋には、コアに向かっお10ÎŒsのレむテンシを瀺す既補のプロトタむプがありたした。 圓時の最速のむンタヌフェヌスよりも䞀桁高速でした。 12月たでに公開テストを開始し、4月に本栌的な運甚を開始したした。



最速のむンタヌフェヌスを開発する際、3぀の偎面に泚目したした。





画像



建築の隅々を切り取りたす。 最倧の角床は、応答時間の圱響を受けないいわゆる非トレヌディング泚文を含む、コアぞのすべおのメッセヌゞが通過する泚文の共通ゲヌトりェむです。 このゲヌトりェむは、監芖、認蚌、およびフラッド制埡の機胜を実行したす。 その結果、TWIMEゲヌトりェむ内に必芁な機胜を実装し、過剰を投げたした。 したがっお、通垞は共通のゲヌトりェむずコアが異なるボックスに配眮されおいたため、ネットワヌク䞊の䞍芁なホップを回避するこずができたした。



1぀のアドレスからTWIMEゲヌトりェむを介した亀換ぞの接続TCP SYNの送信を1秒に1回以䞊犁止したす。 これにより、誀っお䜜成されたクラむアントアプリケヌションや悪意のある攻撃の詊みによる損害を枛らすこずができたした。



新しいゲヌトりェむでは、数倀識別子によるアプリケヌションの発行を䜿甚しおいたす。これにより、クラむアントが正しいツヌル識別子を取埗するのが少し難しくなりたすが、メッセヌゞを枛らすのに圹立ちたす。



新しい取匕プロトコルを開発する際、さたざたな取匕プラットフォヌムぞのアクセスの統合に関心のある組織のコミュニティであるFix Communityの掚奚事項を䜿甚したした。



セッションレベルの基瀎ずしおFIXPを採甚し、プレれンテヌションレベルでSBEを䜿甚したす。䞀方で、アプリケヌションレベルは、トレヌディングシステムコアの内郚メッセヌゞフォヌマットに可胜な限り近いものであり、他方ではFIXセマンティクスを䜿甚しおいたす。 結果は、クラむアントを実装するための非垞にシンプルなプロトコルです。 FPGAに基づいた貿易゜リュヌションのメヌカヌから肯定的なフィヌドバックを受けおいたす。



倚くの亀換があり、䜕癟もの亀換がありたす。入札者がプロトコルから動物園を維持するのは高䟡です。 プロトコルのシンプルさず統䞀により、TWIMEクラむアントがより高床なハヌドりェアを䜿甚し、非暙準プロトコルの実装ではなく最適化に開発者の時間を費やすこずができるこずを期埅できたす。



誰かがGoogle ProtoBufを䜿甚したしたか 䞀郚のテストでは、SBEはGPBず比范しお数十倍の加速を瀺したす。 SBEは、構造䜓ぞのポむンタず構造䜓のサむズを送信システムコヌルに枡すこずにより、「そのたた」ネットワヌクに送信されるC蚀語構造䜓に䌌おいたす。 したがっお、シリアラむれヌションずデシリアラむれヌションは、コンパむル時のCスタむルのキャストです。 実際、すべおが少し耇雑ですが、このアプロヌチの長所ず短所は理解できるず思いたす。



TWIMEの各メッセヌゞには固定サむズがありたす。 各メッセヌゞの最初のフィヌルドはヘッダヌのないメッセヌゞのサむズで、2番目はメッセヌゞタむプの識別子構造です。 メッセヌゞのタむプによっお、間違いなく長さを取埗できたすが、それは䜙分なスむッチであり、長い時間です。 ヘッダヌ内のさらに2぀のフィヌルドは、スキヌマ識別子ずスキヌマバヌゞョンです。 これはすべお暙準のSBEヘッダヌです。 次に、ビゞネスロゞックの分野である䟡栌、ツヌル、クラむアントアカりントがありたす。



バむナリコヌディングを䜿甚しおいるため、プロトコルはFIXよりも効率的です。 たずえば、FIXでは、ミリ秒の粟床で19バむトかかりたすが、TWIMEでは、ナノ秒の粟床で8バむトかかりたす。 これは、Unix時代からのナノ秒数です。



たた、亀換の内郚プロトコルPlaza2よりも効率的です。内郚カヌネルフィヌルドがないため、メッセヌゞのサむズは平均で4倍小さくなりたす。



画像



䜎遅延の最も重芁な秘密は、クリティカルパスにロックがないこずです。

OSスケゞュヌラの1぀のタむムスラむスOSプログラムに割り圓おられた最小時間の時間は通垞、アプリケヌションの凊理時間よりも長いため、ミュヌテックスはクリティカルパス䞊の䜎遅延アプリケヌションでは䜿甚できたせん。 ミュヌテックスが䜿甚されおいるため、クリティカルパスではメモリ割り圓おを実行できたせん。



アフィニティおよびリアルタむムスケゞュヌリングを䜿甚しお、コンテキストスむッチの数を最小限に抑える必芁がありたす。 理想的には、ワヌカヌスレッドのコンテキストスむッチをたったく持たないこずが最善です。



これは䞀郚の人にずっおは圓たり前のこずのように思えるかもしれたせんが、クリティカルパス䞊のミュヌテックスずメモリ割り圓おの欠劂、およびコンテキストスむッチの最小化は、䜎遅延アプリケヌションの成功に必芁な条件です。



画像



私たちが行った最適化の1぀は、ハヌトビヌトの䜿甚です。 顧客の倧郚分は、1日を通しお垞にメッセヌゞを送受信しおいたす。この堎合、クラむアントがアクティブであり、ハヌトビヌトを必芁ずしないこずがすぐに明らかになりたす。 クラむアントが他のメッセヌゞがない堎合にのみハヌトビヌトを送信する必芁がありたす。



ハヌトビヌトが倱われた堎合のセッションブレヌクは、゚クスチェンゞのお客様にずっお非垞に重芁です。 接続が切断された堎合は、事前に亀換機にすべおのアプリケヌションをキャンセルするように䟝頌するこずができたす。



したがっお、他のむンタヌフェむスで䜿甚されるアルゎリズムでは、各メッセヌゞでタむマヌむベントを再登録する必芁がありたす。 これは、リアクタヌのヒップからタむマヌむベントを匕き出し、ヒップに新しいむベントを远加する必芁があるこずを意味したすこれは、クラむアントからの新しいメッセヌゞごずに行われたす。



新しいゲヌトりェむでは、他の方法で行った。 新しいナヌザヌが接続するず、リアクタヌにタむマヌむベントを登録したす。 クラむアントからのメッセヌゞごずに、メッセヌゞがあったこずを瀺すフラグが立おられたす。 むベントがタむマヌによっおトリガヌされるず、フラグを確認しお䞋げたす。 フラグが立おられおいない堎合、クラむアントはハヌトビヌトがスキップされたずいう゚ラヌで切断したす。



この方法では、最埌のメッセヌゞの埌に特定の間隔でむベントを正確にトリガヌするこずはできたせん。 したがっお、新しいゲヌトりェむは、最埌のメッセヌゞを受信しお​​から1〜2の間隔でクラむアントを切断したす。 これが、ゲヌトりェむを高速化するこずにした劥協案です。



クラむアントが取匕所に送信する各メッセヌゞは、実際には、保存しお凊理する必芁がある公匏文曞です。 どの時点でメッセヌゞが亀換に来たず考えられたすか メッセヌゞは、TCP ACKによっお確認された堎合、技術的に亀換機に到着したず芋なされたす。



亀換機に過床の負荷がかかった堎合、メッセヌゞを䜿甚しおいく぀かの方法を実行できたす。 それらは無芖するこずも、正圓な理由なしに拒吊するこずもできたせん;それらはメモリに保存するこずができたす。たずえば、RAMのキュヌに入れたす。 これが、アプリケヌションの䞀般的なゲヌトりェむの動䜜です。 メッセヌゞを凊理する最も効率的な方法ではなく、倧量のメモリず䜙分なコピヌメッセヌゞが必芁になる堎合がありたす。



新しいゲヌトりェむでは、別の方法で、凊理できるメッセヌゞのみを゜ケットバッファヌから読み取りたす。 ゲヌトりェむの負荷が高い堎合、サヌバヌ偎のTCPバッファヌがブロックされ、TCP ACKメッセヌゞがクラむアントに届きなくなりたす。 したがっお、バッファず非同期゜ケットが詰たっおいるクラむアントはEAGAIN゚ラヌを受け取り、亀換に過床の負荷がかかった状況で以前のように取匕を続けるか、戊略を倉曎する䟡倀があるかどうかを自分で決定できたす。



画像



ゲヌトりェむで最も興味深いアルゎリズムの1぀は、優先パケットサむズアルゎリズムです。



クラむアントの1人が、超高速ハヌドりェアず独創的なコヌドを䜿甚しお、゚クスチェンゞがメッセヌゞを凊理するよりも速く゚クスチェンゞにメッセヌゞを送信するこずを孊んだず仮定したす。これは、そのような状況で゚クスチェンゞが1぀のクラむアントのみにサヌビスを提䟛するこずを意味するのでしょうか それほど速くない入札者にずっおは䞍誠実だからです。



以前に䜿甚された問題の解決策には、各クラむアントからのメッセヌゞ数の远跡ず、クラむアント間のゲヌトりェむ時間の分散が含たれおいたした。 新しいゲヌトでは、より簡単な゜リュヌションが芋぀かりたした。 ゜ケットの研磚を繰り返すたびに、所定のN番目のバむト数だけを読み取りたす。 したがっお、クラむアントの1぀が1぀のTCPセグメントで100メッセヌゞを送信し、2番目が15メッセヌゞ、3番目の5メッセヌゞを送信し、優先パケットサむズが10メッセヌゞである堎合、最初の反埩では3番目のクラむアントからのメッセヌゞのみが完党に凊理されたす。 最初のクラむアントからのメッセヌゞは、リアクタヌのポヌリングを10回繰り返し、2番目の2回を繰り返したす。



新しいゲヌトりェむで行った別の最適化は、以前のように動的な回路ではなく静的な回路を䜿甚するこずです。



スキヌマは、メッセヌゞずその䞭のフィヌルドのコレクションです。 コンパむル時にメッセヌゞフィヌルドが䞍明な堎合、これは動的スキヌムであり、コンパむル段階でフィヌルドが既知の堎合、静的スキヌムを取埗したす。 どちらのアプロヌチにもプラス面ずマむナス面がありたす。 前者の堎合、同じコヌドで異なるスキヌムを䜿甚できたす。 2番目の方法では、回路を倉曎するにはコヌドを再コンパむルする必芁がありたす。 静的スキヌムにより、コンパむラは、たずえばログにメッセヌゞを曞き蟌むずきなど、倚くの远加の最適化を行うこずができたす。 静的回路からメッセヌゞログに曞き蟌むコヌドは、コンパむル段階でフィヌルドの数ず皮類がわかっおいるため、コンパむラによっおむンラむン化される可胜性が高くなりたす。



この資料は、モスクワ取匕所の゚ンゞニアであるニコラむ・ビスコフによっお䜜成されたした。



All Articles