DEV Community

Aki
Aki

Posted on • Originally published at d.nekoruri.jp on

もう「サーバーレスだけどサーバあるじゃん」という話をしたくない

3年ぐらい同じ事を言い続けてるんだけど、そもそもサーバーレスという言葉の由来はソフトウェアアーキテクチャの話*1

一つのタスクの実行期間を超えて、ファイルシステムやメモリ上の変数などサーバ固有のリソースに依存しないという、12 Factor Appから死ぬほど言われ続けている制約を満たすプログラミングモデルがサーバーレスの本質です。この制約に視点を置くとサーバーレスとしか言いようがない。

これを真面目にやろうとすると、キューやPub/Subによる非同期タスク(イベント駆動)が必要になってきます。これを整理したのがリアクティブシステム、わかりやすく関数という枠にはめたのがAWS LambdaをはじめとするFaaSです。

その一方で、これを満たしたソフトウェアは、AWSなりAzureなりGCPなりクラウド基盤側が勝手にサーバを増やしたり減らしたりできて、完全従量制にできたりメリットがたくさんでてきます。そういうゼロからスケールできるフルマネージドサービスの性質もサーバーレスと呼んでいます。

メリットが分かりやすいためクラウドベンダーが主張したいのはこちらの性質なんですが、でもこれって「所有せず利用する」というクラウドコンピューティング全体の流れの延長線上でしかないんですよね*2

この設計と運用の二つの性質が混ざったのが現在の「サーバーレス」です。

というわけで、サーバーレスという単語に関しては、

 × サーバが無い

 ○ プログラマがサーバを気にしない

 ◎ プログラマがサーバを(設計上)気にしてはいけない+(運用上)気にしない

と捉えるのが良いと思います。単純に「サーバが無い」というだけの解釈をしやすいのは事実なので、 こういう理解をした方が楽しいよ 、という話です。

日本語圏だとサーバと言えばサーバマシン(ハードウェア)を指すことがほとんどですが、英語Wikipedia見ると、サーバマシンよりも先にクライアント・サーバにおける提供側の"a computer program or a device"が先に来ますし、サーバの仮想化はVirtual ServerではなくVirtual Machineなんですよね。この英語と日本語でのニュアンスの違いが大きいのかなという気はします。

という話をまとめて書いてあるのでみんな買ってください😇

追記

(2019-05-11 10:00)

あまり記事の意図が伝わってない感じなので、脚注に書いていたことを本文に組み入れました。

こんな読まれると思っていなかったのでポイントをあまり気にせず書いていたのですが、伝えたいのは以下の2点です。

  • サーバーレス(Serverless)という単語にも理由があるし、サーバマシン、サーバプロセスへの依存排除というこの抽象化の世界は面白いので、そう単語自体を否定しないで欲しい。
  • 「こういう背景もあるのか」ということで一定の納得をしてもらい、この名前の話はとっととやめて、サーバーレス技術を使っていかに楽に楽しくシステムを作るかの話をしたい。

*1:「Developers working in a distributed world are hard pressed to translate the things they’re doing into sets of servers.」とあるとおり、そもそも分散システムでものを作ってる人達はサーバとかいう考え方じゃないよね、という背景

*2:まあ実は一つめの話も、関数型プログラミングで言われるような、副作用排除、宣言型などのプログラミングの抽象化の流れの延長線上ではあります。

Top comments (0)