ドワンゴ 坂井様 ws-summit-tokyo-2016...ドワンゴはオンプレだけでなく、aws...

54
Born in the net, Connected by the net ドワンゴがAWSで メディアストレージ基盤を開発してみた ニコニコ統括事業本部 フロンティア開発部 第二セクション 坂井 薫平

Upload: others

Post on 29-May-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ドワンゴがAWSで メディアストレージ基盤を開発してみた

ニコニコ統括事業本部 フロンティア開発部 第二セクション 坂井 薫平

Page 2: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

このセッションは

の提供でお送りします

Page 3: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ドワンゴアドベントカレンダー2015の初日の記事についてのお話

http://qiita.com/namusyaka/items/e805d1098827a4bd6835

Page 4: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

自己紹介名前: 坂井 薫平

所属: 株式会社ドワンゴ フロンティア開発部

職種: インフラエンジニア兼アプリケーションエンジニア

趣味: OSS。Padrino・Grapeメンテナ

Page 5: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

自己紹介名前: 坂井 薫平

所属: 株式会社ドワンゴ フロンティア開発部

職種: インフラエンジニア兼アプリケーションエンジニア

趣味: OSS。Padrino・Grapeメンテナ

Page 6: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

フロンティア開発部

Page 7: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

簡潔にいうと、新規プロダクトを ガンガン作ってリリースしていく部署

Page 8: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

部署の軌跡

2015年 2月 部署発足

2015年10月 プレゼン共有サービス「ニコナレ」 リリース

2016年 4月 N高等学校 関連システムリリース

Page 9: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

新規プロダクトを 効率良く開発していくためには

何が大事か

Page 10: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

車輪の再発明を防ぐこと

Page 11: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

サービスを開発するにあたって 必要となってくる一連の処理を、チームを問わず使えるように共通化・基盤化する

Page 12: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

AWSをつかって実現してみた

Page 13: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

本題

Page 14: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアストレージ基盤?

Page 15: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアファイルに関連する 一連の処理を共通化するための

ストレージ

Page 16: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアファイル画像ファイル

PDFファイル

音声ファイル

動画ファイル

Page 17: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

これらのファイルのアップロード・変換処理・配信を一手に引き受けたい!

Page 18: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

イメージ図

Page 19: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

イメージ図

基本的にユーザーからのアップロードを受け付け、validation・変換を終え配信状態にあるファイルのURLを

基盤の利用サービスに通知するという流れ

Page 20: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアストレージ基盤内の独自概念・処理内容について見ていきましょう

Page 21: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ジョブアップロード権限の発行時に内部的に作成するファイル変換・配信処理の取り扱いのための情報群の名称。 DynamoDBを使って管理が行われる。 すべての処理はこのジョブという概念をベースに行われる。

Lambda

各種EC2DynamoDB

Page 22: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ジョブを扱うためにDynamoDB用ORMを

開発してみた

Page 23: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

Ruby製 DynamoDB ORM 「dinamo」 https://github.com/namusyaka/dinamo

Page 24: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアストレージ基盤が 採用しているOSS

Grape (API) dinamo (ORM) rabl (View) shoryuken (SQS) aws-sdk-ruby (All)

Page 25: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

メディアストレージ基盤が 採用しているOSS

Grape (API) dinamo (ORM) rabl (View) shoryuken (SQS) aws-sdk-ruby (All)

Lambda以外は全てRuby!

Page 26: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

アップロード権限の払い出し

Page 27: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

アップロード権限の払い出し

AWS独自のSTSと呼ばれる仕組みを用い、一時的に特定のS3バケットの特定のキーにのみアップロードできるテンポラリクレデンシャルを払い出す(フェデレーティッドユーザー)。

本基盤では、アップロード用のS3を配信用のものとは別に用意しており、アップロードユーザーはそのS3へアッ

プロードする権限を一時的に手に入れる。

Page 28: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

画像ファイルの処理の流れ

Page 29: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

画像ファイルの処理の流れ

アップロード用S3にファイルがアップロードされると、S3 Notificationにより同期的にLambdaを起動する

Lambda上ではアップロードされたファイルの数バイトを読み込み、ファイルのヘッダに含まれる情報からvalidationを行う。問題がなければ配信用S3にファイルをコピーする。

Page 30: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

PDFファイルの処理の流れ

Page 31: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

PDFファイルの処理の流れ

Lambda上でvalidationを行うまでは画像ファイルと同様の処理。 validation後にはジョブを一意に特定する情報をメッセージとしてSQSにenqueueする。

独立して稼働しているバッチサーバはSQSをポーリングしており、enqueueされたメッセージを取り出し、アップロードされたファイルを取得。再度validationを行い、pdfを画像に切り分けて配信用S3にコピーする。

Page 32: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

音声ファイルの処理の流れ

Page 33: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

音声ファイルの処理の流れ

ジョブを一意に特定する情報をメッセージとしてSQSにenqueueするところまでは、PDFと同様。

バッチサーバ上でenqueueされたメッセージをSQSから取り出し、ファイルのvalidationを行う。

validation通過後はElastic Transcoderにジョブを作成し、本基盤の利用サービスが期待する音声ファイルにエンコードを行い、配信用S3上にファイルを出力させる。

Page 34: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

動画ファイルは音声ファイルと ほぼ同様の扱いのため割愛

Page 35: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

利用サービスへの通知の流れ

Page 36: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

利用サービスへの通知の流れファイルの種類によって、通知イベントを発火させる場所が異なってくる。 本基盤では、どの通知イベントについてもジョブを一意に特定する情報をメッセージとしてSNSにpushする。 SNSは予めsubscriptionとして登録されている本基盤の通知用サーバのエンドポイントにメッセージを送信する。

通知用サーバはそれを受けて、利用サービスへ通知を行う。

Page 37: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ファイル配信の流れ

Page 38: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ファイル配信の流れ

すべてのファイルはCloudFrontを 経由して配信される。

原則的にはoriginに設定されたS3のファイルを返す。

特定のプレフィックスが付与されているケースでは、 サムネイル作成サーバのLoadbaracerに対しリクエストが移譲され、適宜画像変換処理を施した上で返す。

Page 39: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

ほかにも様々な機能をaws-sdkで実装してみた

リトライAPI サスペンドAPI プライベートコンテンツ配信API

Page 40: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

リトライAPI

処理がなんらかの理由で成功しなかったジョブ向けのAPI

AWS::Lambda::Client#invoke

Lambda起動のタイミングから処理をやり直す。

Page 41: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

サスペンドAPI

ファイルの配信を停止するためのAPI

特定ファイルをS3からバックアップ用S3に退避させる。

同じタイミングでCloudFront Invalidationを実行する。

Page 42: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

プライベートコンテンツ配信API

読んで字の如く、プライベートなコンテンツの配信機能。 CloudFront 署名付きCookie & URLの活用。

Page 43: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

絶賛稼働中

Page 44: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

この基盤を使って開発された プロダクトを紹介

Page 45: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

プレゼン共有サービス

http://niconare.nicovideo.jp/

Page 46: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

N高等学校 https://nnn.ed.jp/

Page 47: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

どちらもAWS上で運用。 もちろんメディアストレージ基盤をガンガン活用中!

Page 48: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

AWSをつかってみて

Page 49: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

よかった点AWSのリソース・サービスを活用すれば、この規模のものでも一人で設計・開発・運用ができる。 オンプレよりも融通が利くため、インフラの変更が容易。 EC2を使わず、AWS フルマネージドなサービスを用いることでコストの大幅削減が可能。 アプリケーション担当者がインフラに触れるハードルが大きく下がった。

Page 50: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

よかった点Multi-AZなどを用いることで可用性・耐障害性が容易に担保できる。

サポート体制が充実している。

各種リソース・サービスに対応したSDKが提供されている。

Page 51: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

苦労した点サーバレスなアーキテクチャを実現するにはAWS固有のリソース・サービスへの理解・前提知識が必要となるため、事前の学習は必須。

アプリケーションエンジニアがインフラに触れる際のハードルは大きく下がるがVPC・ネットワーク周りなど、その分野に対する知識は必要(その学習コストを削減するようなものではない)。

Page 52: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

苦労した点フルマネージドサービスを前提としたアプリケーションのテスト実装は今後も課題。サードパーティ製のモックだと厳しいものがある。

CloudFormationについては整備が足りてない部分も。

今回aws-sdkをフルに活用したが、ドキュメントからは読み取れない部分もいくつかあった。実際の検証が大事。

Page 53: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

Born in the net, Connected by the net

さいごにドワンゴはオンプレだけでなく、AWSもどんどん活用しています。

この基盤は作者である私が新卒1年目にひとりで勝手に設計して作った物。新卒・新人にもチャンスはたくさんある!

Page 54: ドワンゴ 坂井様 WS-Summit-Tokyo-2016...ドワンゴはオンプレだけでなく、AWS もどんどん活用しています。 この基盤は作者である私が新卒1年目に

dwango.co.jp/recruit

We’re Hiring!