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

Post on 29-May-2020

0 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

このセッションは

の提供でお送りします

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

自己紹介名前: 坂井 薫平

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

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

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

Born in the net, Connected by the net

自己紹介名前: 坂井 薫平

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

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

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

Born in the net, Connected by the net

フロンティア開発部

Born in the net, Connected by the net

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

Born in the net, Connected by the net

部署の軌跡

2015年 2月 部署発足

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

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

Born in the net, Connected by the net

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

何が大事か

Born in the net, Connected by the net

車輪の再発明を防ぐこと

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

本題

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

ストレージ

Born in the net, Connected by the net

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

PDFファイル

音声ファイル

動画ファイル

Born in the net, Connected by the net

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

Born in the net, Connected by the net

イメージ図

Born in the net, Connected by the net

イメージ図

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

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

Lambda

各種EC2DynamoDB

Born in the net, Connected by the net

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

開発してみた

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

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

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

Lambda以外は全てRuby!

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

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

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

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

Born in the net, Connected by the net

PDFファイルの処理の流れ

Born in the net, Connected by the net

PDFファイルの処理の流れ

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

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

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

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

ファイル配信の流れ

Born in the net, Connected by the net

ファイル配信の流れ

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

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

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

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

リトライAPI

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

AWS::Lambda::Client#invoke

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

Born in the net, Connected by the net

サスペンドAPI

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

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

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

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

絶賛稼働中

Born in the net, Connected by the net

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

Born in the net, Connected by the net

プレゼン共有サービス

http://niconare.nicovideo.jp/

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

Born in the net, Connected by the net

AWSをつかってみて

Born in the net, Connected by the net

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

Born in the net, Connected by the net

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

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

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

Born in the net, Connected by the net

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

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

Born in the net, Connected by the net

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

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

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

Born in the net, Connected by the net

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

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

dwango.co.jp/recruit

We’re Hiring!

top related