CaaS、Paas、サーバーレス(FaaS,BaaS)の違い あなたはどのサービスを利用しますか

f:id:konosumi:20180803013519j:plain

「ソフトウェアデザイン 2018年8月号」を読みました。

第1特集の「スマホゲームはなぜ動く?」も良かったのですが、さらに第2特集の「クラウドネイティブ時代のシステム構築」がなかなか面白かったので、知見のメモも兼ねて、まとめていこうかと思います。

目次

クラウドファーストとクラウドネイティブの違い

クラウドファーストとクラウドネイティブは、似ている言葉ですが、大きな違いがあります。

  • クラウドファースト: オンプレミスのサーバをクラウドに置き換える。既存のサーバをクラウド上に置くという意味合いが強い。
  • クラウドネイティブ: クラウドを前提としてインフラを構築する。クラウドサービスを組み合わせ、機能を最大限利用してシステムを構築する。

私なりに言い換えるなら、以下のイメージです。

  • クラウドファースト: 物理サーバの物理的な故障を考えなくて良いという、守りの意味合いが強い
  • クラウドネイティブ: クラウドを最大限利用してスケーラブルな環境を構築する。攻めの要素が強い

CaaS(Container as a Service)

CaaSはContainer as a Serviceの略称です。コンテナは、Dockerをきっかけに人気を獲得し、現在もっとも熱い分野の一つです。コンテナは、ローカル環境でも動きますし、サーバ内でも動きます。開発環境から本番環境まで、同一の環境を持ち運べることが魅力です。

ただ、単体でDockerを動かすならお手軽なのですが、コンテナを組み合わせて大規模な環境を構築しようとすると、かなりの苦労が必要です。CaaSは、そういったコンテナを複数立ち上げることを前提とし、多数の便利な機能を提供します。

  • フェイルオーバ
  • ロードバランサ
  • オートスケーリング
  • アクセスコントロール
  • ...etc

Kubernetesが最も有名であり、現在ではデファクトスタンダードになりつつあります。既に。いくつものマネージドサービスも存在します。

  • Google Kubernetes Engine
  • Azure Kubernetes Service
  • Amazon Elastic Container Service for Kubernetes
  • IBM Cloud Kubernetes Service
  • ...etc

ただし、いきなり導入するのはさすがにチャレンジングです。まずは、Dockerコンテナに慣れるところから始めてみましょう。

PaaS(Platform as a Service)

PaaSは、プラットフォームそのものを提供します。ソースコードをデプロイするだけで、アプリケーションが動くのです。

PaaSの魅力は、何と言っても開発者がプログラミングに専念できることです。サーバ構築をする必要がないため、インフラにかける時間を大幅に節約することができます。

  • Heroku
  • Google App Engine
  • Azure App Service
  • AWS Elastic Beanstalk
  • ...etc

実例を挙げると、初期の「esa.io」はHerokuでサーバを立ち上げていました。インフラの手間を極限まで削減し、サービス開発に注力するという選択肢を取っていたのです。

以下の記事で触れていますので、宜しければご覧ください。

www.konosumi.net

サーバレス

サーバレスは、大きく分けて2種類に大別されます。

FaaS(Function as a Service)

FaaSは、イベントドリブンでコードを実行する基盤です。AWS Lambdaが最も有名かと思います。

関数単位でデプロイすると言うのが、とても斬新です。特定のHTTPリクエストや、設定された条件によって発火し、関数が起動します。

起動しない限りはコストが発生せず、関数が使われた時間や起動数などによって課金される形態が多いです。

BaaS(Backend as a service)

BaaSは、アプリケーションの構築に必要な様々な機能を提供します。

  • 認証
  • プッシュ通知
  • データベース
  • 解析
  • ...etc

BaaSが提供するサービスを組み合わせることによって、開発者はサーバサイドの開発をすることなしに、モバイルをはじめとしたアプリの開発に集中することができます。

Firebaseが最近は人気を博しており、私も技術書典4では「React x Firebase」を組み合わせた本を頒布しました。

www.konosumi.net

どのサービスを採用するのか

まず前提として、サーバレスが最もサーバサイドの開発量を抑えられます。ただし、完全にベンダーにロックインされてしまうため、自由度は下がります。

PaaSは、ソースコードをデプロイするだけという手軽さが魅力的です。ただし、どの言語でも動作するわけではないので、対象のPaaSが提供している言語、及び設定で動作するコードにする必要があるという、制約は発生します。

CaaSはとても魅力的で、かなり高い柔軟性を持っています。ただし、DockerコンテナやKubernetesに習熟する必要があるので、その点は注意してください。

結局のところ、どの形態を選んだとしても、メリットもデメリットも存在します。完璧なサービスは存在しないので、取捨選択が必要です。

開発スピードを求めるのか、それともインフラの自由度を求めるのか。また、社内のエンジニアリングの体制や、インフラエンジニアの有無といった部分でも左右されることでしょう。

さいごに

ちなみにですが、CaaSもPaasもサーバーレスも使わないという選択肢も、もちろんあります。何せ正解がないので、現在のインフラは、多様性のある中から取捨選択をする実力が求められています。

もしかしたら、今の時代に最も求められているのは、技術選定の力なのかもしれませんね。

ソフトウェアデザイン 2018年8月号

ソフトウェアデザイン 2018年8月号

  • 作者: 武井優樹,山上健一,田中佑紀,桐山裕平,橋本達也,本間稔彦,三浦彩,草間一人,藤田稜,長谷川智希,安藤幸央,結城浩,武内覚,宮原徹,平林純,くつなりょうすけ,樽石将人,上田隆一,山田泰宏,中村壮一,田代勝也,青木裕哉,三宅理,mattn,小飼弾,すずきひろのぶ,小川雄太郎,やまねひでき,小島啓史,あわしろいくや,中島雅弘,法林浩之,小泉勝志郎,後藤大地,杉山貴章,Software Design編集部
  • 出版社/メーカー: 技術評論社
  • 発売日: 2018/07/18
  • メディア: 雑誌
  • この商品を含むブログを見る