Serverless Architecture · 2016-10-27 · •...

64
Serverless Architecture Naoya Ito 株式会社 一休 CTO 10/24 2016

Transcript of Serverless Architecture · 2016-10-27 · •...

Page 1: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Serverless Architecture

Naoya Ito 株式会社 一休 CTO

10/24 2016

Page 2: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

先に結論

•  サーバーレスアーキテクチャとは –  単純には FaaS を使ったシステム

–  ステートレスな FaaS がリアクティブ、Microservices、コレオグラフィへと導く

•  現場感覚では「運用が楽でスケールして、安い」

•  銀の弾丸ではないが、応用領域は拡がると思われる

•  ちょっとしたタスクをこなすためや、Microservices の実現手段として、引き出しの一つに入れておいて損はない

Page 3: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算

イベント駆動

Microservices Reactive オーケストレーションからコレオグラフィへ

サーバーレス

Shared Nothing

運用負担が少ない

安い

スケーラブル

得られるメリット アーキテクチャの性質

Page 4: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

サーバーレスアーキテクチャとは

Page 5: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

2つの「サーバーレス」

•  ハードウェア的意味での「サーバー」がない

•  常駐プロセス的な意味での「サーバー」がない –  Function as a Service (Faas) を前提に

–  今日は主にこちらの話

Page 6: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Function as a Service

•  AWS Lambda

•  Google Cloud Functions

•  Azure Functions

Page 7: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

AWS Lambda

•  AWS 上で、任意の小さな関数を実行するためのサービス –  Python、Node.js、Java などで書いた関数をアップロード

–  任意のイベントを契機に、その関数を実行できる

–  イベント例 •  HTTP リクエストを受信した

•  S3 にファイルがアップロードされた

•  Kinesis のストリームのイベントが発生した

•  Amazon Simple Email にメールが届いた

•  DynamoDB に新しいアイテムが INSERT された

•  Scheduled Events (by CloudWatch)

•  ・・・

Page 8: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

module.exports.hello=(event,context)=>{context.succeed({message:'Hello,'+event.query.username})}

#ServerlessFrameworkを利用$serverlessdeploy

Page 9: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Lambda ファンクションはサーバーレスで実行される

•  Lambda ファンクションはコンテナで実行される

•  コンテナは実行時に作成されて、終了時に破棄される

•  常駐プロセスではない。CGI に近いモデル –  「モダンCGI」

Page 10: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Lambda ファンクションはステートレスである

•  コンテナは実行時にのみ存在。状態 (ステート)を保持できない

•  ステートレス (Shared Nothing) –  何か問題が起こっても、別の実行には悪影響を与えない

–  スケールしたかったらもっと起動すればよい

Page 11: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

AWS Lmbda はスケールするし、安い

•  イベント量に合わせて Lambda が自動でスケール –  ステートレスなので (提供者である AWS 的にも) スケールしやすい

–  気づいたら Node プロセス落ちてた ・・・ などがない。安全

•  計算した分しか費用はかからない –  Amazon EC2 ・・・ インスタンスが起動した時間分の費用

–  AWS Lambda ・・・ 実行した分のみの費用

かなりお得

Page 12: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

「サーバーレスアーキテクチャー」

•  ごく単純化すると FaaS を利用したシステム設計アーキテクチャ

•  より本質的にはイベント駆動で系を設計した、リアクティブでコレオグラフィなマイクロサービスのこと –  なんのこっちゃ ・・・ !!

–  後述

Page 13: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

事例

Page 14: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

一休での事例 (1)

このサムネイルを Lambda で作成

Page 15: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

一休の 管理画面

AWSLambda

S3bucket写真を

アップロード

イベント

サムネイル作成

S3bucket

サムネイル用

Page 16: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Lambda 関数はイベント駆動

AWSLambda

S3bucket

イベント

"Records":[{"eventVersion":"2.0","eventTime":"1970-01-01T00:00:00.000Z","requestParameters":{"sourceIPAddress":"127.0.0.1"},"s3":{"configurationId":"testConfigRule","object":{"eTag":"0123456789abcdef0123456789abcdef","sequencer":"0A1B2C3D4E5F678901","key":"HappyFace.jpg","size":1024},"bucket":{"arn":bucketarn,"name":"sourcebucket","ownerIdentity":{"principalId":"EXAMPLE"}},},  ...

Page 17: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

一休での事例 (2)

採用の書類選考は Slack で Bot から依頼される

Page 18: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Redmine

AWSLambda

AmazonAPIGateway

以前は Heroku で Bot を動かしたりしていたがその必要がなくなった

Webhook イベント

Page 19: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

HTTPリクエストもイベントになる

AWSLambda

AmazonAPIGateway

Webhook (HTTP) イベント

{"body":{},"method":"GET","headers":{"Accept":"*/*","CloudFront-Forwarded-Proto":"https","CloudFront-Is-Desktop-Viewer":"true","CloudFront-Is-Tablet-Viewer":"false","CloudFront-Viewer-Country":"JP","User-Agent":"curl/7.43.0","Via":"1.12d30d2b55574343a43311dd210926843.cloudfront.net(CloudFront)","X-Amz-Cf-Id":"JDBHHrMHhbxwaMfNBBTo15EICVfU8t6JHTExkGpu2W6_O4h5wBtqsg==","X-Forwarded-Port":"443","X-Forwarded-Proto":"https"},"query":{"user":"naoya","foo":"bar"},"path":{},"identity":{"accessKey":"","cognitoAuthenticationType":"","cognitoAuthenticationProvider":"","userAgent":"curl/7.43.0",}}

Page 20: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

事例3 : 行動ログ収集基盤にも利用を進めている

AWSLambda

AmazonKinesis

GoogleBigQuery

App サーバー

S3bucket

App サーバー

AWSLambda

Page 21: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

大規模な事例: 日経新聞社の紙面ビューアー

h(ps://speakerdeck.com/ikait/serverless-architecture-supports-nikkeis-paper-viewer

Page 22: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

複数の Lambda がイベント連携し、システムを構成する

Page 23: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

FaaS でイベント駆動設計を突き詰めていくと、自ずと Microservices が見えてくる

h(ps://eventdrivenapps.com/

Page 24: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Design and build event-driven serverless applications: distribute the logic and react to changes in your resources.

Page 25: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

アーキテクチャ的性質を解剖する

Page 26: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算

イベント駆動

Microservices Reactive オーケストレーションからコレオグラフィへ

サーバーレス

Shared Nothing

運用負担が少ない

安い

スケーラブル

得られるメリット アーキテクチャの性質

Page 27: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

CGI はリクエスト毎に実行、終わったら破棄

•  Pros ・・・ Shared Nothing で安全、簡単

•  Cons ・・・ アプリケーション全体を毎回 fork がとても非効率

fork()HTTPRequest

HTTP

ServerWebApp

Page 28: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

常駐プロセス prefork ・・・ プロセスを作っておいて常駐

fork()

Page 29: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

prefork はオーバーヘッドは少なく安全だが、並行性能に難

•  例 –  アプリケーションサーバー (例: FastCGI、Puma、Jetty、IIS ...)

•  Pros –  リクエスト毎 fork() のオーバーヘッドを回避できる

–  多くは共有しないので、比較的安全

•  Cons –  スケーラビリティに難

•  メモリフットプリントが大きい。プロセス数が最大同時接続数 (C10K問題)

•  高負荷ではプロセス / スレッドのコンテキストスイッチコストが高い

Page 30: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

イベント駆動モデルによる並行処理

時間

A B A C D B ・・・

select()/epoll()コンテキスト スイッチ

Page 31: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

イベント駆動モデルは並行性能が高いが可用性に難

•  例 –  Node.js

•  Pros –  スケーラビリティ

•  メモリフットプリントが小さく、高い並行処理性能

•  Cons –  可用性 (耐障害性) に難

•  落ちるときは全部落ちる / メモリリーク時のリスクが大きい

Page 32: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

起動に伴うオーバーヘッドが少なければ、毎回実行で構わないのでは・・・?

•  Pros ・・・ Shared Nothing で安全、簡単

•  Cons ・・・ アプリケーション全体を毎回 fork がとても非効率

コンテナで実行する、という発想がこれを可能にした

Page 33: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Shared Nothing という "制約"

•  Shared Nothing 前提 ・・・ 必要になったときだけ計算で不都合ない –  コンテナを永続化させる義務が発生しない

必要になったときだけ計算

サーバーレス

Shared Nothing

Page 34: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算 → 入力をイベントとして抽象化してイベント駆動でモデル化するのは自然

必要になったときだけ計算

イベント駆動

サーバーレス

Shared Nothing

Page 35: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Lambda 関数 ・・・ イベントへの反応として記述する

結果、サービス間は疎結合に

反応としてのプログラミングモデル ・・・ リアクティブ

どっから来るかわからんけど、そのイベントきたらやっとくわ

Page 36: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

h(p://www.slideshare.net/yugolf/typesafe-reacAveplaBormreacAvesystem-scalasummitkansai

Page 37: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも
Page 38: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも
Page 39: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも
Page 40: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも
Page 41: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算

イベント駆動

Reactive

サーバーレス

Shared Nothing

Page 42: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

参考: Erlang / Elixir の軽量プロセスモデル

•  Erlang VM の軽量プロセス –  Erlang/Elixir における並行処理の基盤。小さい。300ワード

–  大量に軽量プロセスを作って並行処理、で OK

–  「起動が十分に高速なら、都度実行が良い」

サーバーレスな話と似てるな~と

Page 43: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

この手の話を突き詰めるとリアクティブに辿り着く

Page 44: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

閑話休題、それぞれの Lambda はマイクロな関数になる

•  Lambda ファンクションは一つが一つの仕事をする

•  小さな (マイクロな) 関数をイベントで (疎結合に) 組み合わせる

ワシはこっちのイベント担当な

ワイはこっちのイベント担当や

Page 45: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

FaaS は自然と Microservices を指向する

(それが嬉しいかどうかは別として・・・)

h(p://www.slideshare.net/danilop/building-eventdriven-serverless-apps

Page 46: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算

イベント駆動

Microservices Reactive

サーバーレス

Shared Nothing

Page 47: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

オーケストレーション vs コレオグラフィ

SOA や BPM、Microservices の文脈でビジネスプロセス構築のためにサービス間をどういうアーキテクチャで関連づけるかの議論

•  オーケストレーション (orchestration)

–  オーケストラによる演奏方法

–  中央の指揮者がサービスの呼び出しをコントロールし、ビジネスプロセスの実行を指揮する

•  コレオグラフィ (choreography) –  バレーや舞踏などのダンサーへの振り付け

–  サービスの呼び出しをコントロールしたり、ビジネスプロセスの実行を指揮する存在はいない

Page 48: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

オーケストレーション (リクエスト・リプライ)

リクエスト

リプライ

•  自身の処理の一部を他のシステムに依頼。依頼した結果は自身の側で利用

•  サブルーチン呼び出し、メソッドインボケーションのアナロジー

–  理解しやすい。同期的なビジネスプロセスの構築に向く

Page 49: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

コレオグラフィ (イベント駆動)

サブスクライブ

•  イベントの発生によって他の業務処理が駆動される。非同期のイベント連携

•  指揮者がいない。各サービスはイベントに駆動され、振り付けに従い、自律的に他者にイベントを送って働きかける

•  他システムが関知できないタイミングである処理が為される、予期できないタイミングである事象が発生するケースに対応するのに適する

イベント パブリッシュ

Page 50: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

スターバックスは2フェーズコミットを使わない

•  レジの店員は注文の印をつけてキューに送る。レジ係とバリスタは分割されている –  イベント駆動、非同期

–  オーケストレーションではなく、コレオグラフィ

•  間違った飲み物を作ったら、払い戻しではなく、飲み物を捨てて作り直す

h(ps://code.google.com/archive/p/gregors-ramblings-ja/wikis/18_starbucks.wiki

Page 51: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

コレオグラフィは疎結合でスケーラブル

•  "一般に、コレオグラフィ手法に向かう傾向が強いシステムの方が、疎結合で柔軟性があり、変更を受け入れることがわかっています。" (「マイクロサービスアーキテクチャ」, オライリー・ジャパン, P.52)

•  一方、コレオグラフィが常に正解ではない –  同期呼び出しの方が単純、適切に機能しているかがわかりやすい

•  Microservices を指向するならコレオグラフィ –  非同期のイベント連携 ・・・ 大幅に分離されたサービスを生み出せる

Page 52: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

FaaS は自然とコレオグラフィを指向する

•  そもそもマネージドサービス間を非同期イベント連携で接続するアーキテクチャなので・・・

•  向き不向き –  オーケストレーションを前提としたビジネスプロセスの構築や置き換

えには向いてない

–  コレオグラフィ前提でモデリングできるなら、向いているかも •  「スターバックスは2フェーズコミットを使わない」を思い出そう

Page 53: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

必要になったときだけ計算

イベント駆動

Microservices Reactive オーケストレーションからコレオグラフィへ

サーバーレス

Shared Nothing

運用負担が少ない

安い

スケーラブル

得られるメリット アーキテクチャの性質

Page 54: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

改めて「サーバーレスアーキテクチャ」とは

•  Lambda 使ってます、というだけなら敢えて「サーバーレス・アーキテクチャ」と大仰に呼ばなくても良い気が

•  以下を自覚的に活かすのが「サーバーレス・アーキテクチャ」なのではないか? –  Microservices 実装の手段としての FaaS

–  リアクティブやコレオグラフィに向かわせる性質

Page 55: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

サーバーレスアーキテクチャとはイベント駆動で系を設計した、リアクティブでコレオグラフィなマイクロサービスのこと •  わかりましたね!

•  こんなこと言うとバズワードおじさんと指さされること間違いなし!

Page 56: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

雑な話

Page 57: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

結局なくなるのはハードなのか、プロセスなのか?

•  アーキテクチャ的には常駐プロセスがなくなることが重要だけど

•  現場では、OS 的な意味でのサーバーがなくなることが重要だったりする –  メリットに直結しているため、導入の動機にしやすい

–  余剰リソースを抱えなくて済む上に安い。可用性も上がる ・・・ というインフラ側面での精神的安心感がハンパない

Page 58: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

ぶっちゃけどうなの?

•  はまれば強い –  スケーラブル。運用工数はすごい下がる。EC2 より超安い

–  知らんうちに良いアーキテクチャに向かってたりする •  関数が小さくまとまったり、テスタビリティ高かったり

•  開発工数はそこまで削減されないかも –  FaaS 特有の (バッドなものも含む) ノウハウが必要

•  イベントがループしてサムネイルのサムネイルのサム ・・・ → ∞ とかあるある

•  同期処理したいな! 状態持ちたいな! というとき悩む

•  プログラムサイズに制限があったりする

–  ピタゴラスイッチになるのでデバッグが大変。結合テスト難しい

Page 59: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

Microservices の具体的実現手段としての FaaS

•  Microservices の議論は実現手段を明らかにしなかった

•  FaaS を用いたサーバーレスアーキテクチャは、Microservices の具体的実現手段 (の一つ)

Page 60: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

どういうとき使うの?

•  小さなユースケースでは積極的に使えばいい –  サムネイル作るだけ、とか、Slack 通知とか

•  大きなユースケースではいつ使うのか・・・ まだ言語化できてない –  「銀の弾丸ではない」とはみんな言う。「ここで使え!」とは言わない

–  オーバーヘッドは比較的小さいがゼロではない

–  コレオグラフィで OK なら、というのはありそう

•  サーバーレスとそうじゃないのを組み合わせる事例が増えてる –  例: 機械学習のモデル構築は普通にやって、それを利用するアプリケーショ

ンはサーバーレス

Page 61: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

サーバーレスの今後

•  アーキテクチャ的に真っ当だし、適用範囲は拡がると思う –  特にリアルタイムなスケーラビリティが欲しいケース

•  ゲームサーバー、行動ログ収集、IoT ・・・

–  どういうときサーバーレスがいいかの議論はこれから成熟していくでしょう

–  設計方法の引き出しの一つに加えておいて損はない

•  開発環境 (フレームワーク) はもう一声欲しい。良いものは今後も出てきそう –  Serverless 1.0 が頭一つ出てるが、まだデプロイ自動化レベル

•  御三家の開発競争が盛んに。高機能化、性能向上は進む –  AWS vs GCP vs Azure

–  オーバーヘッドは技術革新でどんどん小さくなると思われる

Page 62: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

まとめ

•  サーバーレスアーキテクチャとは –  単純には FaaS を使ったシステム

–  ステートレスな FaaS がリアクティブ、Microservices、コレオグラフィへと導く

•  現場感覚では「運用が楽でスケールして、安い」

•  銀の弾丸ではないが、応用領域は拡がると思われる

•  ちょっとしたタスクをこなすためや、Microservices の実現手段として、引き出しの一つに入れておいて損はない

Page 63: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

参考文献 (Web)

•  サーバレスとマイクロサービスで変わるゲームサーバ開発

–  https://speakerdeck.com/kazutomo/saharesutomaikurosahisutebian-warukemusahakai-fa

•  紙面ビューワーを支えるサーバーレスアーキテクチャ

–  https://speakerdeck.com/ikait/serverless-architecture-supports-nikkeis-paper-viewer

•  Building Event-driven Serverless Apps

–  http://www.slideshare.net/danilop/building-eventdriven-serverless-apps

•  AWS Lambda in Action - Event-Driven Serverless Applications

–  https://eventdrivenapps.com/

•  Typesafe Reactive Platformで作るReactive System

–  http://www.slideshare.net/yugolf/typesafe-reactiveplatformreactivesystem-scalasummitkansai

•  コレオグラフィ vs オーケストレーション

–  http://www.fiorano.com/jp/blog/integration/integration-architecture/コレオグラフィ-vs-オーケストレーション/

•  スターバックスは2フェーズコミットを使わない

–  https://code.google.com/archive/p/gregors-ramblings-ja/wikis/18_starbucks.wiki

Page 64: Serverless Architecture · 2016-10-27 · • レジの店員は注文の印をつけてキューに送る。レジ係とバリスタ ... – コレオグラフィ前提でモデリングできるなら、向いているかも

参考文献 (書籍)

•  Sam Newman 著, 佐藤直生 監訳, 木下哲也 訳「マイクロサービスアーキテクチャ」, オライリー・ジャパン, 2016