開閉ボタン
ユーザーメニュー
ユーザーメニューコンテンツ
ログイン

  • 会員限定
  • 2016/12/08

サーバーレスアーキテクチャの性質とは? 伊藤直也氏が解説

【中編】

10月24日に都内で開催されたイベント「QCon Tokyo 2016」の伊藤直也氏のセッション「Serverless Architecture」は、サーバーレスアーキテクチャの本質について大きな示唆をもたらす内容でした。この記事では、その内容をダイジェストで紹介します。

Publickey 新野淳一

Publickey 新野淳一

ITジャーナリスト/Publickeyブロガー。大学でUNIXを学び、株式会社アスキーに入社。データベースのテクニカルサポート、月刊アスキーNT編集部 副編集長などを経て1998年退社、フリーランスライターに。2000年、株式会社アットマーク・アイティ設立に参画、オンラインメディア部門の役員として2007年にIPOを実現、2008年に退社。再びフリーランスとして独立し、2009年にブログメディアPublickeyを開始。現在に至る。

(本記事は前編中編、後編に分かれています。いまお読みの記事は中編です。)

サーバーレスアーキテクチャの性質

photo

 いよいよサーバーレスアーキテクチャの性質を解剖していきたいと思います。これは冒頭で説明した図です。

photo

 さっきモダンCGIの話をしましたが、CGIは実行が終了するとプロセスが破棄されるというシンプルなモデルでした。しかもShared Nothingなのであるプロセスに障害が起きてもほかのプロセスに影響しない。

 しかし問題だったのは、起動するたびにアプリ全体がフォークされていたので、実行の効率がとても悪くて、以前はホスティングサービスでみんながCGIを動かしているとすごくサーバが遅くなったと。

photo

 さすがにこれじゃあかんということで、常駐プロセスのサーバを作ってプリフォークで、あるいはスレッドで実行するモデルが発明されて、だいたいのプログラムはこれで動くようになりました。

photo

 Preforkはオーバーヘッドが少なくて、プロセス同士もメモリを共有しないので安全なのですが、並行性能に難があります。具体的にはメモリフットプリントが大きくて、プロセス数が同時接続数を決めてしまいます。これがかの有名なC10K問題です。

 で、これを解決するためにNode.jsのようなイベント駆動モデルによる並列処理系は、高速にコンテキストスイッチすることで並行処理性能をあげるようにしました。select()とかepoll()を使えばブロックせずに高速に処理できるじゃん、というのがNode.jsの実装です。

photo

 このイベント駆動モデルは並行性能は高いのですが可用性に難があります。Node.jsが顕著ですが、障害で落ちてしまうとリクエストが来ても全部エラーになります。

 これは非常に脆弱なモデルで、ひとつの処理のメモリリークが全体に影響すると。

 こうしてモデルごとに利点と欠点があったわけですが、そもそもCGIの起動に伴うオーバーヘッドが小さくなれば使いやすいのではないかと思うわけです。

 これがAWS Lambdaの実行モデルで、起動に伴うオーバーヘッドがコンテナによって解決し、Shared Nothingで安全、簡単というメリットだけが得られたと。

photo

 というわけで、常駐プロセスをなくして毎回起動するというサーバーレスの実行モデルがShared Nothingをもたらし、必要になったときだけ計算すればいいという処理になります。これらを実現する上で、コンテナという起動に伴うオーバーヘッドの小さい実行環境が必要だったと。

photo

 ということが、サーバーレスアーキテクチャの最初の性質です。

【次ページ】 実行時にコンテナが生成され、終了時に破棄される

データセンター・ホスティングサービス... ジャンルのトピックス

データセンター・ホスティングサービス... ジャンルのIT導入支援情報

PR

ビジネス+IT 会員登録で、会員限定コンテンツやメルマガを購読可能、スペシャルセミナーにもご招待!