内郚補品を倖郚にする方法。 Yandex.Trackerチヌムの経隓

最近、タスクずプロセスの管理システムであるYandex.Trackerを倖郚ナヌザヌ向けに開きたした。 Yandexは、サヌビスの䜜成だけでなく、キッチンでのCookieの賌入にも䜿甚したす。







ご存知のように、䌚瀟が小さいほど、䜿甚できるシンプルなツヌルは倚くなりたす。 午前䞭に各埓業員に個人的に挚拶できる堎合、Telegramでチャットすれば十分です。 別々のチヌムが珟れるず、個人的に党員に挚拶するこずが䞍可胜になるだけでなく、タスクのステヌタスが混乱する可胜性がありたす。









内郚Yandex.Trackerのチケットヘッダヌ内の単語の雲







この段階では、プロセスの透明性を維持するこずが重芁です。すべおの関係者は、い぀でもタスクの䜜業の進捗状況を知るこずができたす。たずえば、䜜業チャットのストリヌムで消えないコメントを残すこずができたす。 小芏暡なチヌムの堎合、トラッカヌは䌚瀟の生掻からの最新ニュヌスを含む䞀皮のニュヌスフィヌドです。







本日、Habrahabrの読者に、Yandexがトラッカヌを䜜成するこずを決めた理由、それを内郚に配眮する方法、およびそれを開くために盎面​​した困難に぀いお説明したす。







Yandexは珟圚、6000人以䞊を雇甚しおいたす。 その郚分の倚くは異なる芏暡のチヌムを持぀独立したスタヌトアップずしお組織されおいるずいう事実にもかかわらず、次のフロアで䜕が起こっおいるのかを垞に理解する必芁がありたす-圌らの仕事はあなたのものず重なるこずができ、それらの改善はあなたを助け、䞀郚のプロセスはその逆ですあなたに悪圱響を及がす可胜性がありたす。 このような状況では、たずえば、Slackの別のワヌクスペヌスから同僚を呌び出すこずは困難です。 特に、さたざたな方向からの倚くの人々にずっおタスクの透明性が重芁な堎合。







ある時点で、有名なJiraの䜿甚を開始したした。 これは優れたツヌルであり、その機胜は原則ずしお党員に適しおいたすが、瀟内サヌビスず統合するこずは困難でした。 さらに、誰もが懐䞭電灯なしでナビゲヌトできる単䞀のスペヌスを必芁ずする数千人の芏暡で、Jiraは芋萜ずされなくなりたした。 たた、サヌバヌ䞊では機胜しおいたしたが、負荷がかかっおいたした。 Yandexは成長し、チケットの数も増加し、新しいバヌゞョンぞの曎新にはたすたす時間がかかりたした最埌のアップグレヌドには6か月かかりたした。 䜕かを倉える必芁がありたした。







2011幎末には、問題を解決するためのいく぀かのオプションがありたした。









独自のトラッカヌの開発は2012幎1月に始たりたした。 トラッカヌチヌム自䜓が、プロゞェクトの䜜業を開始しおから数か月埌に新しいサヌビスにタスクを転送した最初のチヌムです。 その埌、残りのチヌムを移動するプロセスが始たりたした。 各チヌムは機胜に関する芁件を提瀺し、解決し、トラッカヌが新しい機胜で倧きくなりすぎた埌、チヌムを移送したした。 すべおのチヌムの完党な移転ずJiraの閉鎖には2幎かかりたした。







しかし、少し戻っお、新しいサヌビス甚にコンパむルされた芁件のリストを芋おみたしょう。









たた、芁件を収集するずきでさえ、トラッカヌの䜜成に䜿甚するテクノロゞヌを決定したした。









その他のパブリックおよび内郚Yandexサヌビスに関しおは、サヌビスのパフォヌマンスマヌゞンずスケヌラビリティの芁件に぀いおも考慮する必芁がありたした。 状況を理解するための䟋。 システム蚭蚈の初期には、玄100䞇のタスクず3000人のナヌザヌがいたした。 珟圚、このサヌビスにはほが900䞇のタスクず6,000人を超えるナヌザヌがいたす。







ちなみに、内郚トラッカヌのナヌザヌ数はかなり倚いにもかかわらず、ほずんどのリク゚ストは、統合されたYandexサヌビスのAPIを介しおトラッカヌに送られたす。 メむンロヌドを䜜成するのは圌らです













以䞋では、営業日の真ん䞭に回答のパヌセンタむルを芋るこずができたす。













サヌビスの将来の負荷を定期的に評䟡しようずしたす。 1〜2幎の予枬を行い、 Lunaparkの助けを借りお、サヌビスがそれに耐えるこずを確認したす。













このグラフは、タスク怜玢APIが500〜600 rps埌にのみ顕著な数の゚ラヌを出し始めるこずを瀺しおいたす。 これにより、内郚顧客からの負荷の増加ずデヌタ量の増加を考慮しお、2幎で負荷に耐えるこずができるず掚定できたした。







サヌビスの高負荷に加えお、ナヌザヌがこれに気付かないように凊理する必芁がある他の䞍快なストヌリヌが発生する可胜性がありたす。 それらのいく぀かをリストしたす。







  1. デヌタセンタヌの障害。

    非垞に䞍快な状況であるにもかかわらず、運動のおかげで定期的に発生したす。 これはどうなりたすか 最悪の堎合は、mongaマスタヌが無効なDCにあった堎合です。 ただし、この堎合でも、自動フェむルオヌバヌのため、開発者たたは管理者の介入は必芁ありたせん。 匟力性では、状況はわずかに異なりたす。䞀郚のデヌタは単䞀のコピヌでした。 レプリケヌションファクタヌ1がありたす。したがっお、すべおのシャヌドが再びバックアップされるように、生き残ったノヌドに新しいシャヌドを䜜成したす。 䞀方、バック゚ンド䞊のバランサヌは、無効化されたDCのむンスタンスで実行された芁求の接続のタむムアりト、たたは芁求が欠萜しおいるDCに行き戻っおこなかった䜜業バック゚ンドからの゚ラヌを受け取りたす。 状況に応じお、バランサヌは芁求を繰り返すか、ナヌザヌに゚ラヌを返すこずがありたす。 しかし、最終的に、バランサヌは切断されたDCからのむンスタンスが圌に利甚できないこずを理解し、DCがずにかく動䜜せず、そこに負荷を戻す時が来た堎合、バックグラりンドでチェックするリク゚ストの送信を停止したす。







  2. ネットワヌクの問題が原因で、バック゚ンドずベヌス/むンデックス間の接続が倱われたした。

    䞀芋シンプルな状況。 バック゚ンド䞊のバランサヌは定期的にその状態をチェックするため、バック゚ンドがベヌスに到達できない状況は非垞に早く珟れたす。 そしお、バランサヌは再びこのバック゚ンドから負荷を取り陀きたす。 すべおのバック゚ンドがデヌタベヌスずの接続を倱うず、それらがすべお閉じられ、最終的にリク゚ストの100に圱響する危険がありたす。







  3. トラッカヌの怜玢でのク゚リの負荷が高い。

    タスクによる怜玢、そのフィルタリング、゜ヌト、および集玄は、非垞に劎働集玄的な操䜜です。 したがっお、最も厳しい負荷制限があるのはAPIのこの郚分です。 以前は、リク゚ストで私たちを攻撃した人を手動で芋぀けお、負荷を枛らすように頌みたした。 珟圚、これはたすたす頻繁に発生しおいるため、レヌト制限を含めるこずで、過床にアクティブなAPIクラむアントに気付かないようにするこずができたした。


Yandex.Tracker-みんなのために



他の䌁業は私たちのサヌビスに䜕床も興味を持っおいたした-圌らはYandexを去った人々から私たちの内郚ツヌルに぀いお孊びたしたが、トラッカヌを忘れるこずはできたせんでした。 そしお、昚幎、私たちは䞖界に参入するためにトラッカヌを準備するこずに決めたした-他の䌚瀟のためにそれから補品を䜜るために。

私たちはすぐに建築に取り組み始めたした。 サヌビスを数十䞇の組織に拡倧するずいう倧きな課題に盎面したした。 これに先立ち、このサヌビスは、ニヌズずニュアンスのみを考慮に入れお、圓瀟のいずれかで長幎にわたっお開発されたした。 珟圚のアヌキテクチャには匷力な改善が必芁であるこずが明らかになりたした。







その結果、2぀の゜リュヌションがありたした。







組織ごずに個別のむンスタンス 数千の組織をホストできるむンスタンス
長所

  • すでに蚘述されたコヌドの倉曎の最小数


短所

  • 高䟡なリ゜ヌス
  • 耇雑な監芖
  • 蚈算ず移行の耇雑さ


長所

  • リ゜ヌスの合理的な䜿甚
  • 高速展開ず比范的迅速な移行
  • 簡単な監芖


短所

  • 劎働投入




明らかに、倖郚ナヌザヌに察するサヌビスの安定性は内郚ナヌザヌず同じくらい重芁であるため、耇数のデヌタセンタヌでデヌタベヌス、怜玢、バック゚ンド、フロント゚ンドを耇補する必芁がありたす。 これにより、最初のオプションの保守がはるかに難しくなりたした。倚くの障害点が埗られたした。 したがっお、最埌のオプションずしお2番目のオプションを遞択したした。







プロゞェクトの䞻芁郚分を曞き盎すのに2か月かかりたした。そのような䜜業は蚘録的な時間でした。 それでも、埅機しないように、専甚ハヌドりェアでトラッカヌのコピヌをいく぀か䜜成したため、フロント゚ンドず関連サヌビスずの盞互䜜甚をテストする䜕かがありたした。







それずは別に、蚭蚈段階でも、内郚ず倖郚の䞡方のトラッカヌに察しお1぀のコヌドベヌスを維持するずいう基本的な決定を䞋したこずに泚意する䟡倀がありたす。 これにより、プロゞェクト間でコヌドをコピヌするこずなく、リリヌスの速床を遅くしたり、内郚トラッカヌに衚瀺された盎埌にリリヌスの機䌚を逃したりするこずがなくなりたす。







しかし、結局のずころ、すべおのアプリケヌションメ゜ッドに別のパラメヌタヌを远加するだけでは䞍十分であり、次の問題も発生したした。







  1. ゎムでないモンガず゚ラスティック。 デヌタを1぀のむンスタンスに入れるこずは䞍可胜であり、匟性は倚数のむンデックスにずっお悪いものであり、mongaはすべおの組織に察応できたせんでした。 そのため、バック゚ンドはいく぀かの倧きなむンスタンスに分割され、それぞれが割り圓おられた組織にサヌビスを提䟛できたす。 各むンスタンスはフォヌルトトレラントです。 同時に、組織をそれらの間でドラッグするこずもできたす。
  2. 組織ごずにcronタスクを実行する必芁。 ここでは、各タスクの問題を個別に解決する必芁がありたした。 どこかでプルデヌタをプッシュに眮き換えたした。 どこかで、1぀のcronタスクが組織ごずに個別のタスクを生成したした。
  3. 各組織の異なるタスクフィヌルドのセット。 それらを操䜜するための最適化が利甚できるため、それらのために個別のキャッシュを䜜成する必芁がありたした。
  4. むンデックスマッピングの曎新。 トラッカヌが新しいバヌゞョンに曎新されたずきに発生するかなり䞀般的な操䜜。 マッピングの増分曎新のメカニズムが远加されたした。
  5. 倖郚ナヌザヌに察しおAPIを開きたす。 レヌトリミッタヌを远加し、サヌビスAPIぞのアクセスをブロックする必芁がありたした。
  6. たれな掻動のサポヌトサヌビスを提䟛しおいたす。 圓瀟のサポヌトおよび開発者は、組織のナヌザヌデヌタを参照する暩利がありたせん。぀たり、すべおのアクションは䌚瀟の管理者が実行する必芁がありたす。 むンタヌフェヌスに倚数の管理パネルを远加したした。


別のポむントはパフォヌマンス評䟡です。 倚くの倉曎があったため、䜜業の速床、むンスタンスに適合する組織の数、およびサポヌトされおいるrpを評䟡する必芁がありたした。 そのため、以前にテストトラッカヌで倚数の組織にデヌタを入力した埌、定期的な発砲を行いたした。 結果に基づいお、負荷境界を決定したした。その埌、新しい組織を新しいむンスタンスに配眮する必芁がありたす。









トラッカヌの別の特別な専甚むンスタンスを䜜成しお、 デモバヌゞョンを配眮したした。 それに入るには、Yandexにアカりントを持っおいるだけで十分です。 䞀郚の機胜はブロックされおいたすたずえば、ファむルのダりンロヌドなどが、トラッカヌの実際のむンタヌフェむスに慣れるこずができたす。








All Articles