Netflixの少し変わったキャッシュ戦略
「エンジニアの成長は楽しい学びからをもっとにエンジニアリングに関する学びをワイワイお届けするラジオですはいはい私2024年の年末なんですが年末ちょっと体調崩してあれまたですかいや違います収録お休みした時はいはいで具合悪かったんですよ結構その中でネットフリックス契約しまして」
「具合悪いなに悪い子だビバンと地面師たちと何見たかなとか見てたわけなんですけどやっぱ便利なサービスだなと思って見てたわけなんですがそんな中年始にですねちょっと気になるネットフリックスに関する技術ブログを見つけたんでなおかつ面白かったんでちょっとそちらを紹介させていただきたいなというのが今回ですネットフリックスはね話題に事書かないですからね」
「いやそうなんですよdaily.debで見つけた記事なんですけどソースがちょっと公式じゃないんで本当かどうか怪しいですがそれを念頭にちょっとふわっと聞いてもらえればって感じですがHowNetflixusescachingtoholdattentionっていうのでネットフリックスのキャッシュに関するブログ記事ですネットフリックスだとキャッシュこうやって使ってるよっていう話をちょっと」
「やっていきますまあアーキテクチャーとかに近いのかなうんうんうんうんはいまあネットフリックスって使ったことありますかはいいやーないんですよね僕じゅんぺいあるのりさんないというのでまあでも別に使ったことなくてもまあアマゾンプライムとかうん想像してもらえればまあほぼそんな感じなんですけどうんうんうんでなんでしょうねまあ当たり前で動いて当たり前で動いてるんですけどまあ考えてみるとすごいんですよねあれ」
「ユーザーごとに多分画面違うでしょうし表示する画面コンテンツパーソナライズされてるんですねですですですだしとんでもない量の画像読み込んで表示するし確かに映画のリストとか言って文字出てきたらテンション下がるもんな見たくないよ見たくないしねそれを支えてるのがキャッシュなんですよやっぱりほう描画の時間大事なんだよねうんうんうん」
「でNetflixってそのキャッシュストレージっていうのかな何使ってるかっていうとEVキャッシュっていうのを使ってるんですよなにそれ電気自動車みたいですよねエレクトリックビハイクルじゃないです違うんだこれあのNetflixオリジナルのキャッシュストアらしいんですけどえオリジナルはいとんでもないですよねほう」
「キーバリュー型のものでMEMCASHのっていうOSSですねAWSサービスでも聞きますけどレディスかMEMCASHのみたいなインメモリキャッシュですねちなみにあれMEMCASHDらしいですよMEMCASHDなの?っていう噂を聞いたけどちょっと定かではないMEMCASHDですありがとうございます危なくないわ1回地雷踏んでたわMEMCASHDですMEMCASHDBASEで」
「Memcachedは単一インスタンスで動く作りらしいんですけどこのEVcachedっていうのはそれをクラスターで動かせるようにしたものでそれゆえすごい拡張性があったりとか世界中で分散して管理できたりとかするものらしいですなんで複数でいけるんだろう不思議配信する仕組みがあるんでしょうね電波させるっていうかそれって要は例えばある」

「メムキャッシュDにメムキャッシュDじゃねあるEV何でしたっけEVキャッシュにデータを保存したら分散してるサーバー全部に同じデータがその後同期されるってことですよねいや正確には分かんないです全部かも分かんないですそこは絞ってる可能性もあるのかそうですねこれはちょっとメインコンテンツじゃないんで置いといて」
「このEVキャッシュを使ってどういうことをやってるかっていうのを順番に4つ見ていきます1つ目LookAsideCacheっていうのでこれもどうやら一般的な言い方らしいですがこれは普通のキャッシュの使い方ですねいわゆる頻繁にアクセスされるようなデータをキャッシュに置いてキャッシュでヒットしたらDBにアクセスしないで返そうねっていうのがこういう風になりますねよくあるやつよくあるやつ」
「具体的には視聴履歴とかおすすめのサムネとかタイトルとかそういうユーザー固有のデータをこのEVキャッシュクラスターに取っておいて表示するみたいですちょっとNetflix変わってるのがクライアント側のアプリケーションにEVキャッシュクライアントっていうのが入っててフロントから直接行くパターンもあるらしいですマジで?バックエンド挟まないでちょっとよくわかんないな」
「クライアントアプリ側で1回EVキャッシュ見に行ってないやんけでバックエンド行くみたいなそういう動きをしてよりスピード上げてるみたいですそうなんだそれだけ聞くとフロントエンド側がちょっと複雑になりそうだなって気がしたんですけどそれよりも速さやろうってなったのかなそれより速さやろうですねとんでもない量のデータ取ってきますからねっていうのが1つ目ルックアサイドキャッシュはい」
「はいじゃあ2つ目2つ目がトランジエントデータストアトランジエントデータストアかっこいいこれ一時的なデータストアですねちょっと脇道に揃えてトランジエントっていう英単語ちょっと僕なじみなかったんですけどない一時的なっていう意味の単語でテンポラリーじゃないんだはいでテンポラリーって何が違うんだってなるじゃないですかちょっと調べると」
「テンポラリーって終了期間が予測可能なニュアンスらしいんですよ例えばIhaveatemporaryjobforthesummerっていう夏季限定の一時的な仕事がありますみたいな終了時期が決まってるものはテンポラリーっていう言い方をしてトランジェントは短命なニュアンス終了時点が明確ではないニュアンスが強くなるとトランジェントって使うらしいですすごいカイチのイングリッシュレッスンだ笑」
「英語はやっぱ大事なんだよね大事っていうので一時的なデータストアですはいこれ最初のキャッシュと違って一時的なデータっていうニュアンスはちょっと似てるかもしれないですけどさらに短命なやつ例えば再生時間」
「おー短命だねこの動画何分何秒まで再生したかなーとかあそっかビデオごとにあるのかどこまで再生したかみたいなメタ情報がそうですそうですすげーなでそれは何のデバイスで見たんだろうなーとかうんうんうんNetflixって台数決まってますよね確か見れるあーそうですねそうプランによってほうその辺管理してるかもしれないですねうんうんうん」

「なのでこれがあることによってユーザーがiPhoneで映画見てその後iPadで見てとかテレビで見てってやった時にEVキャッシュに残ってるから続きから再生できたりするんですねなるほどねすげーええええええ」
「当たり前にやってるんですけどユーザーとしてはいざ裏側どうなってるだろうって考えた時にちょっとめんどくさすぎて確かに再生時間保存されてるけどあんまりそれを考えたことなかった他にもそういうのがいろいろあるんですねユーザーが表示する情報が多いものを一瞬で出すにはどうやってるんだろうみたいなねここまではキャッシュっぽい僕の中ではまあわかるはいはい」
「ここからそうなんだ領域に入ってきますまさか3つ目はプライマリーストアですプライマリーストアすごいデータベースみたい本当に」
「なんだキャッシュじゃないすもうこれはだからキャッシュなんですけどデータの質としてはキャッシュじゃない超大容量高速データベースみたいなそういうことなのかそうです使い方としてはそういう風な使い方をしてますねでなんかNetflixの中では具体的にどういうもので使ってるかというとNetflixってワノプライムも一緒なんですけどプライムビデオも一緒なんですけどでもプライムビデオよりもよりリッチだななんか」
「トップページが出るんですよはいそれでなんかこの人見たそうな映画をドーンって出しつつしたりもおすすめとかジャンル向けのジャンルごとのやつとか多分それの表示するジャンルとかも人によって違うんだと思いますホラー映画出そうかななのかコメディ出そうかななのか」
「なるほど視聴履歴とか好み登録したりとかするんですかねそうですそうですそういうNetflixのパーソナリズライズされたホームページこれ毎晩計算してるらしいんですよ毎晩計算しているで作ってそれをキャッシュに入れとくはーなるほどじゃああれなの都度リクエスト飛ばすときにビルドしてるわけじゃなくて」
「あらかじめもうそういうのを表示しますよっていうのを作っておいてるんだへーすごだからこそとんでもなくたくさんいるユーザーを抱えた状態で人によって違うページを一瞬で出せる個別で静的サイトジェネレーターみたいなことをしてるというかそんな感じなのかすごいデータ量もとんでもないですよね何千万人とかネトリックスってユーザー」
「僕行っててもびっくりしない僕いそうなイメージありますけどねどうなんでしょうねそのユーザーを裁くホームページを世界中で分散して抱えておいて一瞬で返すっていうプライマリストア的な使い方をしているこれ3つ目ですねこれもパフォーマンスがシビアに求められるシステムにおいては映像的とは言わないですけどメインコンテンツですよね」

「をキャッシュにとっとくみたいな選択肢もあるんだなっていうのはすごい学びになりました確かにあれかストレージさえ耐えれればそっちの方がコンピューターの処理も負荷軽くて済むのか一日計算しないからそうですねなんならバックエンド挟んでない可能性すらありますよねそうね確かにEVキャッシュクライアントがアプリケーション側にあるんでうんうんうん」
「アプリケーション側もただそのキャッシュにあるやつを取ってこようとしてなければバックエンドいくみたいな作りになっててないことなんて多分ありえないのかなかったら初期プレーンなページ表示するだけで絶対にあるんでしょうから多分キャッシュにはっていう使い方をしているというのが3つ目でしたじゃあ最後4つ目ハイボリュームデータっていうので大容量データですねこれもう」
「ちょっと変わった使い方なんですけどホームページとかに表示される文字列とか翻訳文字列って言ってるのは多分ごめんなさいあとかいとか文字文字文章じゃなくて描画される文字文字の表みたいなのが送られてくる入ってるってこと?UIに使うパーツレベルだと思うんですけどこういうもの高い可用性が求められる」
「ものとかあとタイトルとかナビゲーションみたいな全ユーザー共通のコンポーネントこういうのもキャッシュにとっておきますねこれキャッシュってなんか啓発するものなイメージなんですけどNetflixだとこういう」
「世界中にローカライズしなきゃいけないから文字とか翻訳とかタイトルとかナビゲーションみたいな共通UIってすごいたくさん持っておかなきゃいけないわけでなおかつ高い可用性を確保しなければいけないんですけどそれをキャッシュで分散で持っておいてますっていうどういうことだ?CDNとはまた違うのかイメージ違うなんか理論似てますけどねうん」
「でもその辺の全部EVキャッシュにやらせてるんでしょうねこれによってグローバルに本当にCDに近いですけどグローバルにコンテンツ提供できたりとかあとはユーザーが多いトラフィックがたくさんある状態でも迅速にレスポンスができたりとかするアーキテクチャになってるんやでっていうなるほどねはい」
「というのでそのRedGrixが動画じゃなくてトップページっていうんですかねあそこを人によって違うコンテンツなおかつ重いコンテンツをめちゃくちゃ早く表示するためのキャッシュ戦略っていうのかなこういうことをやってるんですよっていう記事をちょっと紹介させていただきましたなるほど面白いキャッシュすごい」
「こんなにシビアなパフォーマンスを求められるようなソフトを作ることはあんまりないのかもしれないですけどとはいえキャッシュの使い方にとらわれずにただのMemcacheとか使った時にこういうことやっちゃいけないと思うんですけどMemcacheとはMemcacheDは啓発する系ですよねレディースは割と持っておけますけどそこはちょっと良くないですがひょっとしたらこの」

「EVキャッシュ使えばできるのかもしれないですしね軽くググったらドキュメント出てきたからOSSなのかなってちょっと思ったけどちなみにGitHubに上がってましたそうですよねなんかNetflixが消滅した瞬間に共に死ぬ怖いなそれ確かに」
「どのくらい使っているんだろうなそこは注意する必要がありますがブログの記事とかでも記事じゃないやブログ記事のコメントもいろいろついててそれで一時的なデータ以外をこういう風にキャッシュに取っておくみたいな使い方をしているのを紹介してくれてありがとうみたいなネットフリックスとかやってるんだ」
「僕こういうとこ悩んでたけど考えが広がりましたみたいなコメント盛り上がっててキャッシュ確かに使いこなせてないかもなあんまり使い方のバリエーションが思いついてないかも本当にパフォーマンスでシビアなアプリのぐらいじゃないですかなんか今聞いてて少し思い出した話があって前職の時」
「現場に出てた同僚から聞いた話なんですけどパフォーマンスを上げるために普通だったらデータベースから取得したデータをリクエストごとにデータに埋め込んでそれでHTML表示するじゃないですかそうじゃなくてもう事前にそのページをビルドしてHTMLごとキャッシュしてそれを返してたみたいなのを聞いたことありますねうんうんうん」
「なんかさっきの何でしたっけ人ごとにトップページ作っておくみたいなのって結構それに近しいものを感じましたねそうですね更新頻度少ないものだったら全然ありだよねそうですねもしくは夜間バッチ回すかですねネットフリックスみたいになんかネットフリックスのやつってさサービスの特性上ネットフリックス側が更新タイミング決めれるというか」
「別にユーザーが何かの設定変えたら変わるのかあれでもそれは都度その時に再ビルドしてキャッシュすればいいのかユーザーが例えばプロフィールからこういうのを表示したいみたいな設定値があったとしたらそれ変わった時に再ビルドすればいいのかそれ以外はまとめて全部キャッシュビルドしておいて」
「キャッシュに置いておくとうんうんうんこんなにUX上げるために血の滲む努力できるとエンジニアの病理に尽きるというか素晴らしいなって本当に思いますね確かにこの前本屋さん歩いててはいレディスの本を見つけたんですよはいはいはいそれがめちゃくちゃ分厚くていやーそんな使いこなしたことないないやそうそれを見た瞬間いやレディスってそんなやることあんのみたいな思うしっかり書いてるのかな」
「結構オライリーのJavaScriptの本ぐらいの分厚さあったんでどんな使い道があるんだろうね超気になったんですよねベストプラクティスとかあんのかななんかその辺も書いてあった目次見た感じちょっと面白そうそういうのいっぱいありますよねなんとなく使えて別に困ってもないみたいなねあるわRDBもなんかそうなんだろうなって気するけどねわかるわかるわかる」

「性能周りがシビアになってくると気にしなきゃいけないでしょうねうんうんはいっていうので普段触れられない性能周り厳しい人がどうやってるかみたいなところが届けられたと思うので学びを刺激されたら色々勉強してみてくださいありがとうございますじゃあお便り読みますねラジオネーム七瀬さんからのお便りですはいありがとうございますありがとうございます感想313」
「面白かったです勉強したくなったから調べようというのでありがとうございます何の回ですかなんだっけうわーこれこれですかSSHとTLSとSSHの違い自信ない自信ないままエピソードにしたやつめっちゃ申し訳ないですけど僕まだ聞いてないわこれ聞こうこれ結構編集大変でしたよねたぶんのりさんいやもう結構丸ごとね持ってったよなるほど丸ごと持ってったよ」
「丸ごと持ってった部分あるよなるほどって言っちゃいましたけどポッドキャスターに話してほしいこと仕事プライベートでチャットGPTどう活用してますか無料は有料どっち使ってますかということでどうでしょうあんま使ってなさそうな僕からいいですかまず無料版を使っております仕事でもプライベートでもどっちでも使っておりますプライベートは」
「しょうもない壁打ちとかに使いますかね例えばこれだったら本当にさっきなんですけどあのポッドキャストの新しいテーマ決めてこうぜってなってその時とかに壁打ちに使いますかねある程度何個か原型を出してもらってそっから変えるのが考えやすいなって思ってしまうのでっていう風に使ったりとかてかこれ履歴見たらわかりやすそうだなそうですね確かに」
「あとプライベートでも結局勉強したことの質問する系が多いですねこれって何?って聞くっていうよりはこれってこういう解釈であってますか?みたいな感じで投げることが多いですかねわかるあと直近であったのが僕去年の末ぐらいから聞いたを頑張って書こうってなったんですけど最初の出だしの文章やっぱ大事だなと思ってはい」
「そのネタが欲しくて以下の自己紹介文を村上春樹風にしてくださいとか投げてますねおもろ使い方おもろいじゃないですかめっちゃ使ってるじゃないですか使ってるこれめっちゃ使ってますよ」
「村上春樹風ね結構いい感じでしたよ僕はエンジニアですみたいな主に技術書で勉強していきましたみたいな文章を村上春樹風にしてくださいって言ったら僕はウェブエンジニアをしている特別な肩書きがあるわけでもなく派手な成功を収めたわけでもないただプログラムを書くことで自分の居場所を見つけてきた人間だみたいな結構しっかり村上春樹風なんですよ村上春樹の本読んだことないから分かんないけどでもいいですね小説感あってなんか言い回しがそれっぽくなって面白かったですね」
「英語のニュアンスチェックによく使いますかねプログラミングしてて命名するじゃないですかわかるその命名がこれって単語的に微妙にニュアンス違いそうだなっていう時にこれってこういう意味で命名したんですけどニュアンス合ってますかみたいな投げ方結構しますねなるほどこんなところかなありがとうございますじゅんぺいは」

「僕はまあそこそこ使ってる方かなと思ってて業務でもプライベートでもプライベートだとなんか本当にあのググる代わりにまず自ピってますね自ピるっていうの?自ピってわかんないですねいやでもなるんじゃないですかなんか一時期」
「GGRKSという言葉があったじゃないですかGoogleでカスというあれがもうGPRKSになるんだと思ってます僕はGPでカスってこと?GPでカスになるんじゃないかなと思ってて調べるとき結構だいたい先もうGoogleよりいっちゃいますねGPっちゃってるんでだいたい例えばさっきの英語のニュアンスなんか同じ言葉でもうんうん」
「同じ文章でもこの単語を使うことでどうニュアンスが違くなるのかとかを聞いてたりその後にさらにググることはありますけど結構逆に取っ掛かりでも先にじびっちゃってますね調べ物まずはっていうのがプライベートでは多かったかな多いかな」
「無料版か有料版かで言うとそれで言うと僕無料版ですねちょっと有料版にしないとなと思ってるんですけど無料版でしないとなしたいやっぱいいですよね有料版の方がでも今のところ間に合っちゃってるなっていうGoogleアカウント3つぐらい使って回数制限とかあるじゃないですかすごいな回避の仕方引っかかった時違うアカウントだ確かに」
「キャンペーンで脱毛しまくるやつはそれやるわ確かにそれは確かにっていうのがプライベート業務だと同じように僕無料な理由無料な理由って言ったらあれだな業務でも生成AIの完全にもうチャットGPTのオープンAIかAzureOpenAIのシステム使ってるんで業務上で無料で触りまくってるんですよねO1とかも」
「なんでそこの自分のサービスのチャットUIとかでめちゃくちゃ質問しまくってますでコードを単純に解説させたりバグ見つけてとか言ったりあとなんかフィックスもさせますしっていうのでなんだろうな業務だとコーディングと同じように質問にも使っていてっていう感じですかねうんうんうんうんじゃあ最後カイチはいはい」
「有料版使ってます使い方はノリさんとじゅんぺーとあんまり変わらずちょっと違うとするとAWSの資格勉強するときにわからんサービスでできたときに聞いたりしてますね最近ついたブラウジングしてくれるやつ」
「無料版にないですか?わかんない多分ネットのウェブページを参照しながら教えてくれる機能がついてそれがついて以来すごくもうググらなくても良くなってる感がありますねとはいえまだおじさんすぎるのかもしれないですけど英単語のニュアンスとかはちょっと辞書見ちゃうウェブのあってると」

「多分GBTで合ってるんでしょうけどね合ってることの方が多いし合ってるし大体うんうんうんかなまああとは本当にのりさんが言う通り本に書いてた内容の問答をする感じですねうん」
「合ってますかとこういうことじゃないってことですよねみたいな二方向から攻めます念入りにね空気読んでなんとなくうんそうそうって言ってくることありそうだなと思ってでもなんか結構ちゃんと否定してくれない否定してくれますまあなんでそうですねもともとO1とかも使ってましたけどO1なんか時間かかるんで結局ブラウジングしてくれる方を」
「とかで十分そうな感じするなるほどちなみにチャットGPTは無料版と有料版でどういう差分あるんですかそこがちょっとあんまりよく分かってないですけどトークン数とあとはブラウジング機能ついてないのとあとは画像生成か画像生成ないとかあとは使えるモデルが違いますね僕がさっき言ったO1とかは有料でしか使えないはずO1はGPTと違ってなんか考えてくれるんですよね」
「KPDじゃねえや4Oとかと違って確かよく分かってないというか僕の使い方だとそこの差分どうでもいい今のところただ遅いんでねO1もっと上手く使えるのかもしれないですけどねなるほどちなみにプラスの方ですよねプロえぐいな2万するんだ次プロ払う勇気ないちょっとこれはやばいね」
「なんかxが見てると絶対プロにしなきゃいけないプロにすべきだみたいなビジネスインフルエンサーいますけどマジでまだそこまでいけないですねいやーいらないんじゃないですかねプロははいっていう感じでしたなんかうまく使えてる気もしない気もするんでなんかいい使い方だったら教えてくださいななしさん空動画生成みたいなやつで使いました」
「使ったことないあれって言うあれ無料でも行けるんでしたっけいやあれプラスで使えるっぽいですよですよね有料ですよね結構面白いから使ってみてほしいかもしれない使ってみようかな今今時間かかります結構わかんないちょっと完成物の動画しか見たことないですけど結構面白そうなすごいですよね精度高いですよやっぱ何に使うんですか精度ってかあれか我々」
「この前会社で感心したのはあのLTの導入部分でその動画使っててめっちゃ笑いましたねえーじゃあひまじんプログラマーがワイワイポッドキャストを撮っている動画とか作らせますかオープニングムービー全員いきますねやりますねなんで片方4人いるどっちも4人いるな4人いるななんで」
「まあなんか陽気な外国人が4人いやこれリアルの映像とあんま違わないっすよね確かになんか照明の形変だけどパッとXとかで流れてきてもなんかおーってなる一人めっちゃ笑ってるけどマイクないなこいつ何してるのこいつ誰なんだろうなこいつ誰なんだろうな確かに」

「まあ面白いけど使い道むずいな狙った動画生成させるのもめっちゃむずそうですしね英語のプロンプトがやっぱいいですよねそうなんだすごいねなんかこの机のさ窓の光反射してる感じというかうんうんうん確かにこの空も面白い使い方だったら教えてくださいまだ遊び方よくわかんない動画作ろうって思ったことあんまないですからね確かに何に使うんだろうなこういう動画」
「まあやっぱバズりたい人たちですよね何?何でバズる?あらゆることあとなんか海外のリールとかだとリール?インスタの話になっちゃいますけど冒頭5秒3秒とかで」
「なんか気を引くような動画を入れて本編に入るみたいな使い方してるんですよ例えばなんか車が衝突する瞬間の動画3秒ぐらいで作ったらやばいってなるじゃないですかつい見てその後本編の自分のビジネスの話とか始まったりするんですよねそんなんでいいんだな人間単純だねらしいですねそういうのはよく見ますそういうので結構作られてたりそういうサイトもあったりしますしそういう動画を置いてる」
「この動画を使ってさなんか後でアフレコしてなんか1分ぐらいの動画作りたいななんかそのボケてみたいなボケてというかなんだ大喜利じゃないですか大喜利みたいな感じだけどね大喜利のお題は作りやすそうですねこういうのがあー確かに音声ではなかなか伝わりきりませんが空で遊んでみて精度はすげーなって感じですねお便りありがとうございました使い倒していきたいですが使い方教えてください」
「教えてくださいお願いしますはいじゃあ終わりますハッシュタグひまじんプログラマーでSNSNEXTでフィードバック募集してますのではい番組の感想とかお気軽にお願いしますお願いしますあとはポッドキャストの説明欄からGoogleホームで番組の感想要望何でもお待ちしてますのでお願いしますテーマをください各種ポッドキャストプラットフォームでのフォロー高評価もお待ちしてますのでお気軽にお願いいたしますいいね高評価お願いしますじゃんじゃんお願いします」
「ではまた次回バイバイ昔々3匹の小豚がいました彼らはお母さん豚にハムのECサイトを立てるように言われそれぞれ思い思いのウェブサービスを作りましたそんなところにお腹を空かせた狼が不正アクセスでハムを大量に手に入れようと1匹目の小豚のウェブサービスを攻撃しに来ましたこのウェブサービスにはセキュリティ機能がないな機密情報も公開されてるぞ」
「ブヒーリポジトリがなくなったブー狼が2匹目のウェブサービスを攻撃しましたこっちのウェブサービスは認証があるが総当たり攻撃で認証を突破できたぞブヤー商品の値段が全部ゼロ円になったブー狼が3匹目のサービスを攻撃しましたこのサービスはセキュリティがちゃんとしてるな他のサイトはだろ強行が減ったおかげで儲かりすぎて笑いが止まらないブー」
「3匹目の小豚はハムのECサイトで大成功しレンガのお家を建てることができましためでたしめでたし堅牢なウェブサービスを構築したいあなたへひまじんプログラマーの週末エンジニアリングレッスン」
