Kubernetes のない世界
セクションナイン吉田さんからお声がけいただき、2人で Japan Container Days v18.04 にて『Kubernetesのない世界 -すべてがサーバーレスになる-』というタイトルで発表してきました. 我ながら賛否両論な良タイトルを生み出したと満足しています.
当日の発表が漫談になってしまったのは楽しかったので良いとして、吉田さんと僕ではこのテーマにおける考え方が異なります. そこであらためて僕の考えを脳内整理も兼ねて書いたのがこの記事です. 基本的には僕の妄想ポエムなので、そういうのが苦手な方はそっとタブを閉じると良さそうです.
スライド
結論
- すべてが「サーバーレス」になる日はいつか来る
- そのためには FaaS と Docker に代表されるコンテナ技術の間にもう一つ何かが必要
なぜそう思うのか、以下ポエムです.
コンピューティングリソースの抽象化と調達方法の歴史
まずはここ10年くらいのコンピューティングリソースの抽象化と調達方法の歴史をざっくりと振り返ります. 細かいところを除くとおおむね以下のような感じでしょう.
1. 物理マシン
-> 2. オンプレミス VM
-> 3. パブリッククラウド VM
-> 4. VM + コンテナ
-> 5. VM レスコンテナ
-> 6. FaaS
もちろん、これらのどの形においても裏側には物理マシンは存在します. あくまでもリソース利用者の視点でマシンの存在が見えなくなってきているだけです.
「VM + コンテナ」は例えば Kubernetes とそれによって管理された VM のクラスターでコンテナを動かすことを、「VM レスコンテナ」は AWS Fargate や Azure Container Instances、Google App Engine FE(の、コンテナイメージをそのまま動かすやつ) などを指しています.
AWS Lambda や Azure Functions などに代表される「FaaS」は内部的にはコンテナ的仕組みを利用したプロダクトではあるものの、リソース利用者やアプリケーションコードの視点においては VM だけでなくコンテナの存在まで隠蔽されます.
すべてがサーバーレスになるのか
これは Yes でもあり、No でもあります.「サーバーレス」という言葉の意味するところ次第です.
- コンピューティングリソースの利用者にとって
- キャパシティ管理が不要
- (理論上)無限のスケーラビリティ
- アイドル時間への課金が発生しない
これらが「サーバーレス」という言葉の意味するところだとすると、答えは Yes のはずです. 正確には「皆がこうなる」というよりは「皆がこの状態を欲する/目指す」と表現する方が正しいかもしれません. ユーザーとしてこんなに嬉しいことはないので、(ペイするのであれば)パブリックなクラウドベンダーたちがこれらを指向していくのは自然な流れです.
では、上記を満たすコンポーネントであり現代のサーバーレスの中心でもある FaaS は、あらゆるコンピューティング手段(e.g. VM, コンテナ)を置き換えるのでしょうか. 僕は No だと考えています.
FaaS はフルマネージドなイベントソーシング/ルーティングに依存することで、イベントドリブンなシステムを実現するためのコンピューティングプラットフォームです. 既存システムのみならず、新規で構築するシステムであっても、すべてをイベントドリブンなアーキテクチャーで表現しきるのはなかなかに骨が折れます(少なくとも僕にはそんなことができる自信はありません).
アーキテクチャーだけの話ではありません. いきなり雑な例になりますが、あなたのサービスがゴールデンタイムにテレビ CM を打つことになったとしましょう. とんでもない量のリクエストが飛んでくることが予想されます. どのようにしてこれに打ち勝つか. おそらくあなたはアイドル時間への課金とキャパシティ管理の実施を受け入れ、リクエストを捌き切れるだけの VM とコンテナを事前に用意することになるでしょう.
少なくとも現時点の FaaS は万能ではないし、たぶん今後もそうはならないと思ってます.
お前最初の結論で全部サーバーレスになるって言ってたぞ
です.
繰り返しになりますが、もう一度貼ります.
- コンピューティングリソースの利用者にとって
- キャパシティ管理が不要
- (理論上)無限のスケーラビリティ
- アイドル時間への課金が発生しない
これらをユーザーが指向するのであれば、クラウドベンダーはそこで商売がしたいはずです. しかし前述のとおり、現代のサーバーレス技術の中心である FaaS がすべてをカバーできるとは思っていません.
ではすべてはサーバーレスにならないのかというとそんなことはなくて、僕は FaaS と VM レスコンテナの間を埋める技術やプロダクトが登場することがその実現のカギになると思っています. 先に書いたアーキテクチャーや雑な例の問題を乗り越えられるような、なにか別のプロダクトです.
例えば FastContainer 構想が完全に実現された姿はそのイメージに近いのかもしれないし、既存の FaaS や VM レスコンテナの延長線上なのかもしれません. (FastContainer に詳しい訳ではないので、全然的外れだったら関係者の方々ごめんなさい)
言いたいことは、現在の FaaS や VM レスコンテナが備えているのとは違ったアプローチや機能性で上記の「サーバーレスたらしめるメリット」を実現するプロダクトが登場しない限り、すべてがサーバーレスになることはないのではないか、ということです.
なにが Kubernetes のない世界なの?
もともとタイムテーブルで目立ちたかったために付けた名前なので後付けじゃねぇかと吉田さんに言われそうですが、前述の「FaaS でもなく VM レスコンテナでもない何か」を当たり前に使う時代がくると、Kubernetes に代表されるリソーススケジューリングやオーケストレーションを行うツールはコンピューティングリソース利用者の意識下には存在しなくなる/存在する必要性がなくなる、というニュアンスです.
管理するものが減るに越したことはありません.
まとめ
- すべてがサーバーレスになる日はいつか来る
- 「サーバーレス」とは、リソース利用者にとって
- キャパシティ管理が不要
- (理論上)無限のスケーラビリティ
- アイドル時間への課金が発生しない
- 現在の FaaS が Docker に代表されるコンテナ技術の利用シーンそのものを置き換えることはない
- その上で、すべてをサーバーレスにする(楽をしたい)ために FaaS と VM レスコンテナの間にもう一つ何かが必要
こういうなんの役にも立たなさそうな妄想するのが好きな方、一緒に飲み屋に行きましょう.