How Netflix works

# How Netflix works
## Netflixの仕組み
和訳と意訳したメモ

## 原文
How Netflix works: the (hugely simplified) complex stuff that happens every time you hit Play
[How Netflix works](https://medium.com/refraction-tech-everything/how-netflix-works-the-hugely-simplified-complex-stuff-that-happens-every-time-you-hit-play-3a40c9be254b)

## 参考
[Welcome to Open Connect](https://openconnect.netflix.com/ja_jp/)

## 日付
2017/10/17


## はじめに
Netflixは、

* 190か国の約9,800万人の有料チャンネル登録者
* 1日あたり約2億5,000万時間のビデオをストリーミングする
* この規模で、数秒ですべてのユーザーに質の高いエンターテイメントを提供することは容易ではない
* どのように実現しているのか？

## 数百のマイクロサービス、1つの巨大なサービス

### Netflixが技術面でどのように構成されているかを簡単な例で理解してみる

#### 仮定
* スマートフォンのMapsアプリが常に現在地を追跡
* どこにいても複雑な情報を"locations.txt"に保存している

#### あなたはLocoListアプリの開発をする
* スマートフォンにマップアプリがあれば"locations.txt"を探す
* そのファイルに記録されているすべての場所を単純なリストに表示する
* この動作は完璧に動作する設計であるのは明らかですね

#### 次に...
Mapsアプリの開発者が設計変更を行う。
* "locations.txt"以外の場所にすべての位置情報を保存する
* 保存した情報の抽出方法は非公開

#### そして...
* LocoListは、"locations.txt"を見つけることが出来なくなる
* LocoListは、機能しなくなる
* あなたは、気が狂いそうになる

### モノシリックアーキテクチャ
Netflixのような巨大なサービスでは、

* 一部の変更が起因してアプリケーション全体がダウンする可能性がある
* ユーザーのエクスペリエンスを台無しにする
* 一部の小さな変更に対応するためにアプリケーションを書き直す場合もある

### マイクロサービスアーキテクチャ
Netflixは、

* 10年ほど前に革命をもたらした
* サービス全体を実行するアプリケーションをマイクロサービスアーキテクチャに合わせて書き直した
* コードとリソースは独立する（各アプリケーション、または各マイクロサービス） 
* 本質的に他のアプリと共有することはない 
* 2つのアプリケーションが相互に通信する必要がある場合、APIを使う
* APIは、両方のプログラムが処理できる厳密に制御されたルールのセットのこと
* 開発者は、APIで適切に動作することを保証する限り、各アプリケーションに変更を加えることができる

Netflixのアーキテクチャは、

* 約700のマイクロサービスで構築されている
* 視聴したすべての番組を保存するサービス
* 再生可能なビデオファイルを確認して提供するサービス
* 視聴履歴を確認するサービス
* アルゴリズムを使用して好きな映画のリストを推測するサービス
* これらサービスを組み合わせている
* メインメニューのリストに表示されるべき映画の名前と画像を提供するサービス
* 様々な小さなサービスの組み合わせで成り立っている

Netflixのエンジニアは、

* アプリケーションの任意の部分に変更を加えることができる
* 新しい変更を迅速に導入することができる
* サービス全体の他の部分が破壊されないようにすることができる


## これらのマイクロサービスはどこで実行されますか？
* かつては単独で所有していた大規模なサーバーとネットワークが必要
* Netflixは成長し続けるためにすべて内製するのが難しいことに気が付いた
* ニーズに合わせて修正および変更を続けることの難しさがある
* 彼らが選んだインフラストラクチャはアマゾンウェブサービス（AWS）だった

## まってアマゾン？
* プライムビデオがライバルなのに？
* Netflixは、アマゾンを信頼することができるのか？
* 多くの企業は同じカテゴリーで競争しているにも関わらず、紳士のような合意に従っている
* サムスンがスマホでAppleと競合すると同時に、iPhoneの主要部品はサムスン
* NetflixとAmazonのパートナーシップは、両社にとって非常に有利な状況であることが判明した
* NetflixはAWSの最も先進的な顧客
* AWSのすべての機能を最大限に活用（マイクロサービスの実行、映画の保存、インターネットトラフィックの処理）
* AWSはシステムを改善して、Netflixがサーバーに大量の負荷をかけられるようにした
* さまざまなAWS製品をより柔軟に使用できるようにした
* 得られた専門知識を使用して、他の何千もの企業顧客のニーズに応えた
* AWSは、Netflixを最高の顧客として誇らしげに宣伝している
* Netflixは、AWSのおかげでサービスを迅速に改善でき、しかも安定した状態を維持できている
* Netflixが、Prime Videoの人気を奪ったとしても良い関係となっている


## コンテンツを提供
* 映画の元のデジタルコピーをAWSサーバーに保存
* 通常、元のコピーは高品質の映画標準であり、Netflixは見る前にこれらを処理する必要がある
* Netflixは数千のデバイスで動作し、それぞれが異なる形式のビデオおよびサウンドファイルを再生する
* 別のAWSサーバーのセットは、この元のフィルムファイルを取得し、それを何百ものファイルに変換する
* 各ファイルは、特定のタイプのデバイスで特定の画面サイズまたはビデオ品質でフィルム全体を再生する
* iPad専用、フルHD Androidスマホ、4Kビデオを再生できるソニーテレビ、Windowsコンピューターなど
* これらのファイルの多くは、さまざまなビデオ品質で作成できるため、劣悪なネットワーク接続でも簡単にロードできる
* これは、トランスコーディングとして知られるプロセス
* これらのファイルには、デジタル著作権管理またはDRMと呼ばれるものでロックするための特別なコードも追加される
* ⇒ 映画の著作権侵害を防ぐ技術的手段
* NetflixアプリまたはWebサイトは、視聴に使用している特定のデバイスを判別する
* 特定のデバイスで特別に再生することを目的としたその番組の正確なファイルを取得する上。

## バッファ時間との競争
エンドユーザーのインターネット接続が不十分でビデオ品質を処理できない場合、
Netflixを構築するすべての操作（ソフトウェア、コンテンツ、およびテクノロジー）は、
役に立たなくなります。
インターネット上のすべてが基本的にどのように機能するかを以下に示します。

ネットアクセスが必要な操作を行うと、

* インターネットサービスプロバイダー（ISP）に要求が送信される
* ISPはWebサイトを処理する専用サーバーにそれを転送する
* サーバーは応答を提供する
* コンピューターはその応答結果を形成する

大規模なサーバーネットワークが必要

* サーバーとすべてのユーザーとの間では、数百万時間のビデオコンテンツが流れる
* そのため、パフォーマンスを維持するために、必要となる
* 解決方法は、コンテンツ配信ネットワーク（CDN）と呼ばれるものを構築すること

CDNは基本的に、

* 元のWebサイトとそこに含まれるメディアコンテンツを取得
* 世界中に広がる数百のサーバーにコピーする
* たとえば、ブダペストからログインすると、米国のメインNetflixサーバーに接続する代わりに
* ブダペストに最も近いCDNサーバーからそのコピーの同じコピーをロードする

これにより、

* レイテンシー（要求と応答の間にかかる時間）が大幅に削減
* すべてが非常に高速にロードされる
* CDNは、Google、Facebook、YouTubeなどの膨大な数のユーザーがいるWebサイトが用いる手法
* 現在地やインターネットの速度に関係なく、非常に高速に読み込まれる理由がCDNである

## NetflixのOpen Connectボックス。（NDTV Gadgets360 / gadgets.ndtv.com）
* Open Connectボックスは、インターネットプロバイダーに提供される
* Netflixは以前、アカマイ、レベル3、ライムライトネットワークなどの大手企業が運営する
* さまざまなCDNネットワークを使用してコンテンツを配信していた

しかし、

* ユーザーベースの拡大は、より多くの場所でより多くのコンテンツを配信し、コストを削減する必要がある
* このため、Open Connectと呼ばれる独自のCDNを構築することにした
* AWSサーバーに依存する代わりに、世界中に独自のサーバーをインストールする
* Netflixはインターネットサービスプロバイダーと取引を行い無料で赤いボックス（Open Connectボックス）を提供
* ISPはこれらをサーバーとともに設置する
* これらのOpen Connectボックスは、米国のメインサーバーからその地域のNetflixライブラリをダウンロードする
* 地域のNetflixユーザーに人気のあるコンテンツを保存し、速度を優先する
* そのため、めったに見られない映画は、ロードするのに時間がかかるかもしれない
* Netflixに接続すると最も近いOpen Connectボックスが必要なコンテンツを配信する
* Netflixアプリが米国のメインサーバーからロードしようとした場合よりも高速にビデオがロードできる
* Netflixはロードされている10の最も近いOpen Connectボックスを見つける
* Netflixアプリ/サイトは、インターネット接続でどれが最も近いか、最も速く動作するかを検出する
* そこからビデオを読み込む
* これが、ビデオがぼやけた状態で始まり、その後突然シャープになる理由