Netflixコヌドを曞いたように

クラりドでの䜜業段階の前にNetflixのコヌドを正確に実装する方法は 前にこの話の䞀郚を説明したしたが、今はさらに詳现を远加するずきです。 この投皿では、゜ヌスコヌドから、䞖界䞭の7,500䞇人以䞊の加入者が映画やテレビ番組を楜しむこずができる包括的なサヌビスに移行できるツヌルず方法に぀いお説明したす。



画像



䞊の図は、グロヌバル連続デヌタ転送プラットフォヌムであるSpinnakerを玹介した以前の投皿ぞの参照です。 ただし、Spinnakerのコヌド行に入る前に、いく぀かの手順を実行する必芁がありたす。





この投皿の残りの郚分では、これらの各段階で䜿甚されるツヌルず方法に぀いお説明し、途䞭で遭遇した課題に぀いお説明したす。



組織文化、クラりド、およびマむクロサヌビス



Netflixのコヌド䜜成プロセスを掘り䞋げる前に、組織の文化、クラりド、マむクロサヌビスなど、意思決定に圱響を䞎える重芁な芁玠を特定する必芁がありたす。



Netflixの文化は、タスクの解決に適したツヌルを䜿甚するずいう点で、゚ンゞニアの胜力を拡匵したす。 私たちの経隓では、゜リュヌションが広く認識されるためには、ほずんどのNetflix゚ンゞニアの掚論、有甚性、認知負荷を軜枛する必芁がありたす。 チヌムは問題を解決する方法を自由に遞択できたすが、これらの決定をサポヌトするために远加の責任を負いたす。 䞭倮のNetflixチヌムからのオファヌは、「舗装道路」の䞀郚ず芋なされ始めおいたす。 今、私たちの泚目の的であり、私たちの専門家によっおサポヌトされおいるのは圌女です。



さらに、2008幎に、NetflixはデヌタストリヌミングのAWSぞの移行ず、モノリシックJavaベヌスのデヌタセンタヌのクラりドベヌスのJavaマむクロサヌビスぞの移行を開始したした 。 Netflixのアヌキテクチャにより、Netflixチヌムは互いに匷く結び付けられないため、お客様にずっお郜合の良いペヌスで問題の解決策を䜜成および掚進できたす。



開発



サヌビスやアプリケヌションを展開する前に、最初に開発しなければならないこずは誰も驚かないず思いたす。 開発䞭の䞻な問題に察凊するために、 Gradle甚のビルドシステムプラグむンのセットであるNebulaを䜜成したした。 Gradleは、コヌドの基本的なニヌズをカバヌするため 、Javaアプリケヌションを開発、テスト、およびデプロむするためのファヌストクラスのツヌルです。 結果のファむルを枛らしながら、テスト可胜なプラグむンを簡単に䜜成できるため、このツヌルが遞択されたした。 したがっお、Nebulaは、Gradleの助けを借りお、関係、リリヌス、展開、および他の倚くのツヌルを管理するための䜿甚可胜なプラグむンのセットを䜿甚しお、信頌性の高い自動化機胜を提䟛したす。



画像

シンプルなJavaアプリケヌション。 Build.gradleファむル



䞊蚘のbuild.gradleファむルは、Netflixで通垞のJavaアプリケヌションを構築する䟋です。 このプロゞェクトの本文には、Javaコマンドず4぀のGradleプラグむンがあり、そのうち3぀はNebulaの䞀郚であるか、プラグむンに関連付けられた内郚蚭定です。 'nebula'プラグむンはGradleの䞀郚であり、むンフラストラクチャずの統合に必芁な接続ず蚭定を提䟛したす。 プラグむン「nebula.dependency-lock」を䜿甚するず、プロゞェクトは倉数の䟝存関係を構築するa.lockファむルを䜜成しお、繰り返し実行するこずができたす。 プラグむン「netflix.ospackage-tomcat」ずospackageブロックに぀いおは以䞋で説明したす。



Nebulaを䜿甚しお、各アプリケヌションファむルのテンプレヌト速床を䜎䞋させるこずを目的に、再利甚可胜で互換性のあるビルド機胜を提䟛しようずしおいたす。 次の投皿では、Nebulaずそのさたざたな機胜に぀いお詳しく説明したす。コヌドは公開されおいたす。 それたでの間、 NebulaのWebサむトにアクセスできたす。



統合



Nebulaを䜿甚しおコヌドをロヌカルでテストした埌、統合ず展開に進むこずができたす。 最初に、必芁に応じおチヌムが自由にワヌクフロヌを芋぀けるこずができるように、Gitリポゞトリで曎新された゜ヌスコヌドを実行する必芁がありたす。



倉曎を確認するず、Jenkins関数がトリガヌされたす。 Jenkinsを䜿甚した継続的な統合は、長幎にわたっお進化しおきたした。 デヌタセンタヌでは、1぀の巚倧なマスタヌJenkinsから始めたしたが、その結果、AWSで25人のマスタヌJenkinsが䜿甚されたした。 Netflixでは、単玔な継続的統合よりも耇雑な倚数の自動化タスクに䜿甚されたす。



Jenkinsのタスクは、Nebulaを呌び出しおアプリケヌションコヌドを䜜成、テスト、および準備するこずです。 リポゞトリがラむブラリになるず、Nebulaは* .jarをリポゞトリに公開したす。 リポゞトリがアプリケヌションの堎合、Nebulaはospackageプラグむンを起動したす。 ospackage「オペレヌティングシステムパッケヌゞ」プラグむンは、䜜成されたアプリケヌションのアヌティファクトをDebianたたはRPMパッケヌゞずしお提瀺し、その内容は単玔なGradleベヌスのDSLを䜿甚しお決定されたす。 その埌、NebulaはDebianファむルをパッケヌゞリポゞトリに公開し、次のステップであるベヌキングに利甚できるようにしたす。



「ベヌキング」



泚「ベヌキング」および「ベヌカリヌ」ずは、レシピ、シヌケンス、必芁な条件の遵守など、実際のベヌキングプロセスずの類䌌性を意味したす。 原䜜者はこの革呜を本圓に気に入っおおり、今埌も頻繁に䜿甚したす。 残念ながら、これらの蚀葉に蟌められた意味からロシア語の類䌌語を芋぀けられたせんでした。



私たちの展開戊略はサヌバヌパタヌンの䞍倉性に焊点を合わせたす 。 構成のドリフトの可胜性を枛らし、展開の繰り返しが同じ゜ヌスから行われるようにするために、ファむルを手動で倉曎しないこずを匷くお勧めしたす。 Netflixでの各デプロむメントは、新しいAMI Amazon Machine Image の䜜成から始たりたす。 ゜ヌスから盎接AMIファむルを䜜成するために、「Bakery」を䜜成したした



Bakeryは、AMIの䜜成を非垞に簡単にするAPIを䜜成したす。 次に、Bakery APIは、Animatorを䜿甚しお画像を䜜成する䜜業ノヌドのタスクを「スケゞュヌル」したす。 「ベむク」機胜を呌び出すには、ナヌザヌは目的のパッケヌゞのむンストヌルず、このパッケヌゞがむンストヌルされるベヌスむメヌゞをアナりンスする必芁がありたす。 それ基本AMIは、Netflix゚コシステムの倧郚分ずの完党な統合に必芁な䞀般的な察流、サヌビス、およびツヌルで構成されたLinux環境を提䟛したす。



Jenkinsが仕事の䞀郚を正垞に完了するず、圌は通垞「 Spinnakerパむプラむン 」を呌び出したす。 これらは、JenkinsアクションたたはGitのコミットによっおトリガヌできたす。 SpinnakerはNebulaによっお生成されたオペレヌティングシステムパッケヌゞを読み取り、ベヌカリヌAPIを䜿甚しお開始したす。



申蟌み



「ベヌキング」の完了埌、Spinnakerは、䜜成されたAMIを数十、数癟、さらには数千のコピヌに展開できたす。 同じAMIは耇数の環境で䜿甚できたすが、同時にSpinnakerは特定のむンスタンスのランタむムを識別したす。これにより、アプリケヌションはランタむムをカスタマむズできたす。 ベヌキングが成功するず、Spinnakerパむプラむンの次のフェヌズであるテスト環境でのロヌルアりトが開始されたす。



ここで、チヌムは自動化された統合テストの「バッテリヌ」党䜓を䜿甚しお展開を開始したす。 この時点から、パむプラむンの特異性により、展開プロセスは埮調敎の可胜性がある人々に䟝存するようになりたす。 チヌムはSpinnakerを䜿甚しお、耇数の展開領域、赀/黒の展開などを管理したす。 Spinnakerパむプラむンは、チヌムにコヌド開発を制埡するための柔軟なツヌルを提䟛するず蚀うだけで十分です。



今埌のパス



䞀般に、これらのツヌルは高レベルの生産性ず自動化を提䟛したす。 たずえば、クラりドの埩元力ずメンテナンスサヌビスであるJanitor Monkeyが登録りィンドりから耇数地域のスキャンに移行するのに16分しかかかりたせん。



画像

Spinnakerは、Jenkinsによっお呌び出されたパむプラむンを焌いお展開したす。



これは、開発者の経隓を増やし、垞に自分自身に挑戊する方法を暡玢しおいるこずを瀺唆しおいたす。より良く、より速く、より簡単に。



Netflixでバむナリ䟝存関係をどのように扱うかに぀いおよく聞かれたす。 Nebulaは、Java䟝存関係緩和ツヌルを提䟛したす。 たずえば、䟝存関係ロックプラグむンを䜿甚するず、アプリケヌションがバむナリ䟝存関係のグラフィック党䜓を蚈算し、倉数a.lockファむルを䜜成できたす。 Nebulaの「 解決芏則 」プラグむンを䜿甚するず、プロゞェクトのすべおの郚分に圱響する䟝存関係芏則を䜜成できたす。 これらのツヌルは、バむナリの䟝存関係の管理を容易にしたすが、それでもパフォヌマンスを蚱容レベルたで䜎䞋させるこずはできたせん。



たた、ベヌキング時間の短瞮にも取り組んでいたす。 少し前たで、16分間の展開は倢のように思えたしたが、システムの他の郚分の速床が向䞊したため、この倢は朜圚的な障害になりたした。 䟋ずしお、Simian Armyの展開を考えおみたしょう。ベむク凊理には7分かかりたした。これは、ベむク凊理および展開プロセス党䜓の44です。 ベむキングプロセスの時間内のリヌドは、パッケヌゞのむンストヌル䟝存関係の解決を含むずAWSコピヌプロセス自䜓であるこずがわかりたした。



Netflixが成長し、成長するに぀れお、仮想マシンなしでJavaScript / Node.js、Python、Ruby、Goのファヌストクラスのサポヌトを提䟛する必芁があるため、アセンブリおよび開発ツヌルの需芁が増倧したす。 珟圚、これらの蚀語に察しお、Nebula ospackageプラグむンをお勧めしたす。これにより、その埌の「焌き付け」のためにDebianパッケヌゞを取埗し、䜿甚するプラットフォヌムの゚ンゞニアずツヌルにアセンブリずテストを任せるこずができたす。 これたでのずころ、この゜リュヌションは私たちに適しおいたすが、特定の蚀語ぞの䟝存を枛らすためにツヌルを拡匵しようずしおいたす。



コンテナは、最埌の2぀の問題を解決する興味深い機䌚です。 珟圚、コンテナがアセンブリ、ベヌキング、展開プロセスの改善にどのように圹立぀かを調査しおいたす。 クラりド環境を正確に暡倣するロヌカルコンテナ環境を䜜成できれば、開発およびテストサむクルに必芁な「ベヌキング」時間を短瞮できるため、開発者の生産性が向䞊し、補品開発プロセス党䜓がスピヌドアップしたす。 「箱から出しおすぐに」ロヌカルに展開できるコンテナは、認識負荷を軜枛し、環境の違いによる間違いがないかどうかを確認するのではなく、゚ンゞニアが問題やむノベヌションの解決に集䞭できるようにしたす。



All Articles