BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Netflixのコードのデプロイ方法。

Netflixのコードのデプロイ方法。

ブックマーク

原文(投稿日:2013/06/13)へのリンク

人気映画のストリーミングサイトであるNetflixでは、一日あたり百回の配給を行なっているが、 ChefPuppetを使用していないし、品質保証部門もなく、リリースエンジニアもいない。これを行うのに、Netflixは、高度な社内のPaaS (Platform as a Service)を作成し、各チームがインフラの独自の部分を望む時に、必要な回数デプロイすることができるようになっている。QCon New York 2013中 、Jeremy Edberg氏は、 Amazonの AWS上でこの急速なペースの反復をサポートするためにNetflix構築したインフラについて講演した。

Netflixは彼らのAPIを実装するのにサービス指向アーキテクチャを使用して、サイトの要求のほとんどを処理している(一日あたり20億のリクエスト)。舞台裏では、APIは多くのサービスに分けられており、各サービスはチームによって管理されている。チームは比較的自律的に働き、いつ、どのような頻度で、新しいソフトウェアをデプロイしたいかを彼ら自身で決定できるようになっている。

NetflixはかなりDEVOPSに投資している。開発者は、ビルドし、デプロイし、独自のサーバークラスタを運用する。そして、物事がうまくいかない時には責任がある。障害が発生した場合は、問題の根本的な原因を調査するセッションが組織され、将来に同様な問題を発生させない方法を議論する。5つのなぜに似ている。

Netflix でのデプロイは完全に自動化されている。サービスをデプロイする必要がある場合、開発者は、最初ソースコードリポジトリにコードをプッシュする。プッシュされたコードは、Jenkinsが取り上げて、続けてビルドをして、アプリケーションパッケージを生成する。次に、新鮮なVMイメージ(AMI)がベースイメージ(Linuxディストリビューションを含む)とすべてのNetflixのサーバーが実行するソフトウェアに基づいて生成される。この中にはおそらくチームによって更にカスタマイズされたJVMとTomcatが含まれている。このベースインストールの上に、アプリケーションパッケージがインストールされる。これから、AMIが生成され、システムに登録される。

VMイメージをそのインフラストラクチャへデプロイするためにNetflixはAsgardを作った。AsgardのWebインターフェイスを介して、新しいEC2クラスタを作成するためにVMイメージをインスタンス化することができる。各クラスタは、冗長性を確保するために、少なくとも3つのEC2インスタンスで構成され、複数の可用性ゾーンにまたがっている。新しいバージョンをデプロイする場合、以前のバージョンを実行しているクラスタは、新しいバージョンがインスタンス化されている間動き続けている。新バージョンがブートされ、Eureka と呼ばれるNetflixのサービスレジストリに自身を登録している時、ロードバランサはスイッチを切り替えて、すべてのトラフィックを新しいクラスタに向ける。新しいクラスタは注意深く監視され、一晩中走り続ける。すべてが上手く行っている場合は、古いクラスタは破棄される。何かがうまくいかない場合は、ロードバランサは、古いクラスタに切り替える。

障害がNetflixのインフラで連続的に発生する。ソフトウェアは、失敗したハードウェア、失敗したネットワーク接続、多くの他のタイプの失敗に対処できる必要がある。障害が自然に発生していない場合でも、The Simian Armyを使って、強制的に障害を誘発する。The Simian Armyは、ランダムに障害を起こす、幾つかの(ソフトウェア) "猿"で構成されている。例えば、Chaos Monkeyはランダムにサーバーをダウンさせ、Latency Monkeyはランダムにネットワークで遅延を起こす。そのような障害が常に起きることが確実になると、チームは問題を無視することは不可能になり、障害回復力が最優先となる文化を生まれる。

Netflixのインフラの多くの部分は、既にオープンソースであり、 Githubから入手できる。最終的に、他の企業が自分たちのインフラの全てから恩恵を受けることができるようなインフラをリリースすることがNetflixの目標だ。

この記事に星をつける

おすすめ度
スタイル

BT