inductor's blog

nothing but self note :)

自分の知識をアップデートすることと、クラウド事業のありかたに関する自分なりの言語化

AWSありきのエンジニアリングが普及しすぎてしまっているみたいな話について、国産クラウドであるさくらを中心にいろんな方面から意見が飛び交っている。その中の1つに「コンテナ技術はすべてを理解してから使いなさい」みたいな話があった。果たしてそうなのか、自分なりに考えをまとめてみたいと思う。最初のほうはクラウドについて自分が重要と思ってることを書くので、結論だけ見たい人は最後のほうを読んだらいい。特定クラウドがそれを満たしているとか満たしてないとかそういう批判を書くつもりは特にないので、そういうのを求めている人はブラウザバック推奨。

「クラウドインフラ」の定義をちゃんとしよう

クラウド基盤・あるいはクラウド技術という言葉について、そもそも表現の幅に個人差が大きすぎやしないか?と思っていて、単なる(仮想あるいはベアメタルの)計算資源の調達、あるいは単なるVPC(SDN)の調達だけでよいのであれば、小さな規模で自分の手回りの範囲で遊んだりそれなりのソフトウェアを作って動かすことができるのは事実だけど、それって「クラウド」というよりは「ちょっと便利なVPS」の域を出ないんじゃないかと自分は思っている。

クラウドを利用するメリットをだれを中心に考えるか次第でそこの見解は変わるんだけど、「AWSありき」が「やりすぎ」かどうかの是非はさておき、IaaS、VPC、DBaaS、オブジェクトストレージ、ブロックストレージくらいは最低限あってほしい。この点については多くの人間が同意していて、この面においてさくらのクラウドは「クラウドサービス」と呼べると思う。

スケール前提のアーキテクチャを見据えたい

自分はポジショントークというかこれまでのスキルセットの都合上、コンテナサービスがまともにあることが望ましいと考える立場にあるものの、ここでは特に重要なポイントではないのでいったん置いておく。ただ、いわゆるメガクラウドにあってさくらに今提供がないものの一つに、メッセージングやキューを処理したり、イベント駆動でジョブを発火させる仕組みがある。

この手のマネージドサービスは、クラウド事業者側で内部的に使ってようが使ってまいが(絶対ないと困るんで、内部的にはあるだろうとさすがに思っている)、開発者が便利なピタゴラスイッチを作ろうと思ったら無いと困るものの1つだと考えている。イベントが発火したあとに動くジョブというのは、AWSだったら例えばLambdaだったり、ECSだったりするわけで、そこで軽量なFaaS/CaaSといったサーバーレス系のオファリングが自然と利便性を纏って登場する。Apache Airflowを自分で管理するなんてやりたくないし、キューイングもKafkaやZookeeperがなくても普通にガンガン裁ける仕組みがあってほしい(だって、スケールの存在をユーザーに意識させるんだったらそれはクラウドっぽくないし・・・)。

プロダクトマネージャーや開発者支援プログラム(CREとかDevRel)の重要性

クラウド事業者であっても内製のプラットフォームであっても、インフラを必要としているソフトウェアエンジニアが顧客であり、そこにいま話題のプラットフォームエンジニアリングの重要性がもたらされる。認知負荷とか難しいこと言わなくてもいいんだけど、単純に活用方法やユーザーに寄り添ったアーキテクトの存在が、サービスの利便性をウリにすればするほど大事だなと思う。それ以上にちゃんとプロダクトオーナーがいて、ユーザーからのフィードバックを様々なチャンネルで吸い上げられる状態が望ましい。 そうしてベストプラクティスだとかデザインパターンだとか顧客事例だとかそういうものが、公式からだったりコミュニティだったりから少しずつ溜まっていくのがよさそう。

プラットフォームにおける関心の分離と、サービスの抽象度

クラウド事業においては、ユーザーが使いたいと思うサービスがそこにあることが重要なのは言うまでもないが、IaaSは計算資源・あるいはデータプレーンという意味では大きな中心を担っているし、軽視すべきではない存在だ。サーバーレスも結局サーバーの上に抽象化をいっぱい施してなりたっているわけなので・・・。
ここで、「AWSありき」のインフラについて考えてみたいのだけど、サーバーレスを活用することは果たして「AWSありき」なのか、自分はかなり疑問に思っている。そのへんの開発者からしたら別にインフラとかどうでもいいし、書いたコードがプロダクションで動く場所があればよくて、インフラの管理は誰かがやってくれればいいわけだし。

人というよりは組織や事業の問題でデータの分離レベルが重要になることは当然あるし、ソフトウェアの特性的にもベアメタルに近い環境が望ましいこともあって、いろんなオーバーヘッドをつぶそうと頑張った結果メガクラウドは専用ハードウェアを使ったデータプレーンの分離までやっている。でもその詳細について、ユーザーが意識することはほとんどないと思う。

その意味で、「コンテナはすべてを理解してから使え」はかなり筋の悪い意見だと思うし、別に便利でそこにプラットフォームがあるなら、活用すればいいと思う。重要なのは自分が作ったサービスが納得のいく品質で動くことで、それが満たされている間であれば別に専門家に細かい部分は任せればいい。関心の分離。