Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
なぜサーバーレスとDockerなのか ~ インフラ運用を最小化するサービス開発 ~
小笠原みつき / @yamitzky2018.12.15 Developers Boost C-4
•JX通信社 VP of Engineering •NewsDigest への GraphQL やサーバーレスの導入、ログ基盤の開発など
•WEB+DB PRESS へサーバーレス特集を寄稿
自己紹介
•JX通信社のチーム開発では… •「Dockerクラスター」と「サーバーレス」を使い分けてデプロイ
•機能を作るエンジニアが開発~デプロイ~運用までやる
本日のテーマ
→ Why と How を伝えたい※「Dockerとは」「サーバーレスとは」については話しません
•「サーバーレス」とは •今回は、FaaS に限定して話します •Lambda、Firebase Cloud Functionなど •「デプロイ」とは •アプリケーションコード(APIサーバー、バッチなど)をクラウド環境で動くようにすること、に限定します
用語の前提
JXの「インフラ」のトレンド
※ 概要のため、異なる構成のプロジェクトもあります
VPS/IaaS期
サーバーレス活用期
Docker化期
昔 今
•EC2 やさくらの VPS など •Ansible や Elastic Beanstalk、手動デプロイなどまちまち
初期:VPS・IaaS期
•スケーラビリティが求める基準より低かった •インフラの運用コストが高かった •プロジェクトによって運用方法もバラバラ •1システムに最低1台割り当てると、コスト高
つらかったこと 😢
突然ですが、、、
ニュージーランドでは、人間よりヒツジの方が多い🐑
突然ですが、、、
JX通信社でも、エンジニアよりシステムの方が多い
API
監視バッチ
アクセス解析
記事解析
•スケーラビリティが求める基準より低かった •インフラの運用コストが高かった •プロジェクトによって運用方法もバラバラ •1システムに最低1台割り当てると、コスト高
つらかったこと 😢
→ インフラ管理は楽にやりたい
JXの「インフラ」のトレンド
VPS/IaaS期
サーバーレス活用期
Docker化期
昔 今
•次のデプロイ環境を準備し、各開発エンジニアがデプロイ •ECS の Docker クラスター •サーバーレス(Lambda) •IaaSを素で使うことはほぼない
現在
※ たまに PaaS も使います
•インフラの管理や予約が不要 •高いスケーラビリティとコスト効率 •常駐プロセスがないライフサイクル
サーバーレス(FaaS)
•各プロジェクトで Dockerfile を準備してデプロイ •スポットインスタンス中心でクラスターを構築
Docker クラスター
•インフラの準備は必要だが、、、 •Docker など少しのミドルウェアが必要なだけなので、セットアップが簡単(数行のシェル)
•スポットインスタンスであれば、永続化されたインスタンスはなく、古いものは順次入れ替えられる
[補足] Docker クラスターのインフラ
→ IaaS/VPS 時代より、かなり楽
出てきたものをざっくり再整理
抽象度 高低
VPS/IaaS Docker クラスター
サーバーレス(FaaS)
右に行くほど、インフラ管理が簡単 左に行くほど、自由度が高い
•アプリケーションから見ると似たようなメリット •柔軟なキャパシティ指定 •数ミリ秒~数秒で起動/削除できる仮想化環境 •クラウドからの強いサポート
Docker環境とサーバーレスのメリット
→ 機能・ロジックに集中できる
•特性が違うので、使い分けたいDocker環境とサーバーレスの比較
Docker サーバーレス
インフラ管理 必要 不要
自由度 高い 低い
ベンダー依存 弱い 強いプロセス稼働最大時間 長い 短い
c.f. CNCF Serverless Whitepaper v1.0
•プロセスを常駐させたい •メモリ上に長期間キャッシュを保持したい •クラウドの設けた制約をオーバーする場合 •→ IaaS 時代とは別のトラブルも起きる 😢
サーバーレスが合わないケースも
•デメリットを潰し、同質化する技術トレンドもDocker環境とサーバーレスの比較
Docker サーバーレス
インフラ管理 必要 不要
自由度 高い 低い
ベンダー依存 弱い 強いプロセス稼働最大時間 長い 短い
Docker化/サーバーレス化で得られたこと
設計 開発 デプロイ 運用監視
c.f. Netflix’s “Full Cycle Developers”
テスト
CI/CDを自動化・共通化
Docker化/サーバーレス化で得られたこと
設計 開発 デプロイ 運用監視テスト
自動化し、CI/CDを共通化・簡易化
Amazon CloudWatchなどで共通化
Docker化/サーバーレス化で得られたこと
設計 開発 デプロイ 運用監視テスト
自動化・共通化しやすくなったので、 開発から先のタスクを全員がやりやすくなった
標準化されてるので、他チームのトラブルもサポートしやすい
サーバーレスと Docker 環境はメリットが似ていて「一長一短なデプロイ環境の一つ」と捉え、使い分けているから
なぜサーバーレス「と」Dockerなのか
Docker/サーバーレス環境での違い
設計 開発 デプロイ 運用監視テスト
大きな違いはここ!
•プロジェクトのDocker化 •CI 定義の共通化 •アラートの共通化
Dockerクラスター「と」サーバーレスの活用のために
•デプロイ先がサーバーレスであっても、docker-compose up で開発環境が立ち上がるように作る=「サーバーレスでも動く、ただのアプリケーション」として作る
•設計がサーバーレス依存にならない •サーバーレスが合わなくても移行しやすい •デプロイ以外が共通化しやすい
プロジェクトのDocker化
Container vs Serverless?
https://twitter.com/acloudguru/status/1004743691158933505
Container vs Serverless?
https://twitter.com/acloudguru/status/1004743691158933505
Container AND Serverless!!!
• IaaSからDocker化/サーバーレス化によって •インフラの運用コストが下がった •開発したエンジニアがデプロイ・運用まで見やすくなった •開発・デプロイ・運用の仕組みが共通化された •【宣伝】JXではサービスを Full Cycle で開発したいエンジニアを募集中です 😃
まとめ