なぜサーバーレスとdockerなのか ~ インフラ運用を最小化す...

32
なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発 ~ 小笠原みつき / @yamitzky 2018.12.15 Developers Boost C-4

Upload: others

Post on 10-Aug-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発 ~

小笠原みつき / @yamitzky2018.12.15 Developers Boost C-4

Page 2: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•JX通信社 VP of Engineering •NewsDigest への GraphQL やサーバーレスの導入、ログ基盤の開発など

•WEB+DB PRESS へサーバーレス特集を寄稿

自己紹介

Page 3: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発
Page 4: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発
Page 5: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•JX通信社のチーム開発では… •「Dockerクラスター」と「サーバーレス」を使い分けてデプロイ

•機能を作るエンジニアが開発~デプロイ~運用までやる

本日のテーマ

→ Why と How を伝えたい※「Dockerとは」「サーバーレスとは」については話しません

Page 6: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•「サーバーレス」とは •今回は、FaaS に限定して話します •Lambda、Firebase Cloud Functionなど •「デプロイ」とは •アプリケーションコード(APIサーバー、バッチなど)をクラウド環境で動くようにすること、に限定します

用語の前提

Page 7: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

JXの「インフラ」のトレンド

※ 概要のため、異なる構成のプロジェクトもあります

VPS/IaaS期

サーバーレス活用期

Docker化期

昔 今

Page 8: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•EC2 やさくらの VPS など •Ansible や Elastic Beanstalk、手動デプロイなどまちまち

初期:VPS・IaaS期

Page 9: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•スケーラビリティが求める基準より低かった •インフラの運用コストが高かった •プロジェクトによって運用方法もバラバラ •1システムに最低1台割り当てると、コスト高

つらかったこと 😢

Page 10: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

突然ですが、、、

ニュージーランドでは、人間よりヒツジの方が多い🐑

Page 11: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

突然ですが、、、

JX通信社でも、エンジニアよりシステムの方が多い

API

監視バッチ

アクセス解析

記事解析

Page 12: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•スケーラビリティが求める基準より低かった •インフラの運用コストが高かった •プロジェクトによって運用方法もバラバラ •1システムに最低1台割り当てると、コスト高

つらかったこと 😢

→ インフラ管理は楽にやりたい

Page 13: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

JXの「インフラ」のトレンド

VPS/IaaS期

サーバーレス活用期

Docker化期

昔 今

Page 14: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•次のデプロイ環境を準備し、各開発エンジニアがデプロイ •ECS の Docker クラスター •サーバーレス(Lambda) •IaaSを素で使うことはほぼない

現在

※ たまに PaaS も使います

Page 15: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•インフラの管理や予約が不要 •高いスケーラビリティとコスト効率 •常駐プロセスがないライフサイクル

サーバーレス(FaaS)

Page 16: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•各プロジェクトで Dockerfile を準備してデプロイ •スポットインスタンス中心でクラスターを構築

Docker クラスター

Page 17: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•インフラの準備は必要だが、、、 •Docker など少しのミドルウェアが必要なだけなので、セットアップが簡単(数行のシェル)

•スポットインスタンスであれば、永続化されたインスタンスはなく、古いものは順次入れ替えられる

[補足] Docker クラスターのインフラ

→ IaaS/VPS 時代より、かなり楽

Page 18: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

出てきたものをざっくり再整理

抽象度 高低

VPS/IaaS Docker クラスター

サーバーレス(FaaS)

右に行くほど、インフラ管理が簡単 左に行くほど、自由度が高い

Page 19: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•アプリケーションから見ると似たようなメリット •柔軟なキャパシティ指定 •数ミリ秒~数秒で起動/削除できる仮想化環境 •クラウドからの強いサポート

Docker環境とサーバーレスのメリット

→ 機能・ロジックに集中できる

Page 20: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•特性が違うので、使い分けたいDocker環境とサーバーレスの比較

Docker サーバーレス

インフラ管理 必要 不要

自由度 高い 低い

ベンダー依存 弱い 強いプロセス稼働最大時間 長い 短い

c.f. CNCF Serverless Whitepaper v1.0

Page 21: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•プロセスを常駐させたい •メモリ上に長期間キャッシュを保持したい •クラウドの設けた制約をオーバーする場合 •→ IaaS 時代とは別のトラブルも起きる 😢

サーバーレスが合わないケースも

Page 22: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•デメリットを潰し、同質化する技術トレンドもDocker環境とサーバーレスの比較

Docker サーバーレス

インフラ管理 必要 不要

自由度 高い 低い

ベンダー依存 弱い 強いプロセス稼働最大時間 長い 短い

Page 23: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

Docker化/サーバーレス化で得られたこと

設計 開発 デプロイ 運用監視

c.f. Netflix’s “Full Cycle Developers”

テスト

Page 24: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

CI/CDを自動化・共通化

Docker化/サーバーレス化で得られたこと

設計 開発 デプロイ 運用監視テスト

自動化し、CI/CDを共通化・簡易化

Amazon CloudWatchなどで共通化

Page 25: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

Docker化/サーバーレス化で得られたこと

設計 開発 デプロイ 運用監視テスト

自動化・共通化しやすくなったので、 開発から先のタスクを全員がやりやすくなった

標準化されてるので、他チームのトラブルもサポートしやすい

Page 26: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

サーバーレスと Docker 環境はメリットが似ていて「一長一短なデプロイ環境の一つ」と捉え、使い分けているから

なぜサーバーレス「と」Dockerなのか

Page 27: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

Docker/サーバーレス環境での違い

設計 開発 デプロイ 運用監視テスト

大きな違いはここ!

Page 28: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•プロジェクトのDocker化 •CI 定義の共通化 •アラートの共通化

Dockerクラスター「と」サーバーレスの活用のために

Page 29: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

•デプロイ先がサーバーレスであっても、docker-compose up で開発環境が立ち上がるように作る=「サーバーレスでも動く、ただのアプリケーション」として作る

•設計がサーバーレス依存にならない •サーバーレスが合わなくても移行しやすい •デプロイ以外が共通化しやすい

プロジェクトのDocker化

Page 30: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

Container vs Serverless?

https://twitter.com/acloudguru/status/1004743691158933505

Page 31: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

Container vs Serverless?

https://twitter.com/acloudguru/status/1004743691158933505

Container AND Serverless!!!

Page 32: なぜサーバーレスとDockerなのか ~ インフラ運用を最小化す …...なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発

• IaaSからDocker化/サーバーレス化によって •インフラの運用コストが下がった •開発したエンジニアがデプロイ・運用まで見やすくなった •開発・デプロイ・運用の仕組みが共通化された •【宣伝】JXではサービスを Full Cycle で開発したいエンジニアを募集中です 😃

まとめ