2018年のサーバーレス

セクションナイン吉田真吾@yoshidashingo)です。

さて、前回の記事で今年のカンファレンスの開催報告をしました。今年もサーバーレス盛り上がりましたね。

yoshidashingo.hatenablog.com

トレンド的にみると東京でカンファレンスを初開催した咋秋から、グローバルで4倍近いアテンションに高まっています。

さて、ここでは昨今のサーバーレスの動きを振り返って頭の中をダンプしますんで、界隈の人と賛否両論なフィードバックをネタに年始の飲み会などができると嬉しいなと思っています。 あー、あと1/24(水)に次回のServerless Meetup Tokyoを予定してますんでそれはまた後ほど告知しますね。

エコシステムの発展

今年はエコシステムやマーケットが特に発達しました。

フレームワークツール

2015年にJAWS Frameworkから始まったServerless FrameworkはいまやGitHubで2万以上スターを獲得している超定番な開発フレームワークになりました。また、AWS SAMも順調に進化しています。

toris.io

やっぱり読まずにスクロールしましたね。

サーバーレススタートアップ

また今年はIron Functionsの開発元であるIron.ioXenon Venturesを経由してOracleに売却されてそのプラットフォームに組み込まれたり、OpenFaaSが急激に頭角を現したりといったオープン系FaaSの話題が多かったです。

日本ではShifter*1GS2*2が多機能化して日本のサーバーレススタートアップシーンを牽引してます。

また、海外からも複数のサービスが日本市場に入ってきています。Auth0*3Algolia*4Netlify*5といったあたりですが、どれも良いサービスなのでぜひさらに利用者が増えて成功してもらいたいです。

コンサルタンシー/エージェンシー

日本でのクラウドプラットフォーム各社の上位ティアなパートナーの多く(cloudpackさん/クラメソさん/サーバーワークスさん/スカイアーチさんなど)がサーバーレスを活用した開発を請け負う専門部署を運営し始めたのも今年でした。サーバーレスのメリットを享受しながらある程度リスクオフしたいユーザーにおいてはこういったエージェンシーも活用されてビジネスが伸びると嬉しいなと思います。

プラットフォーム

また、今年後半は個人的に「サーバーレスとは何か」という定義についてあらためて考える場面も多かったです。サーバーレス関連のプロダクトが充実してきたことで「サーバー管理不要」「スケーラビリティ」「使ったぶんだけ課金」の3つの特徴だけが「サーバーレスコンピューティング」のメリットと言い切れなくなりました。

AWS

aws.amazon.com

Microsoft

azure.microsoft.com

Google

cloud.google.com

サーバーレスコンピューティング = プロキシ + 実行環境 + ステート管理 = リアクティブなマイクロサービス

あらためてサーバーレスの特徴を考えてみると、リクエストのプロキシ、実行環境、ステート管理(ステートマシンやワークフローのオーケストレーション、さらにはエラー管理やリトライ処理)が分離されて管理できることがサーバーレスの最大の特徴かなと自分の中で確信しています。プロキシと実行環境の分離がスケータビリティや実行時のみリソース調達といったクラウド事業者が共通して訴求してる部分ですし、実行環境とステート管理の分離が開発生産性やアプリのロバスト性につながる部分かなと思います。

システムの処理パターンとコンポーネントの組み合わせをちょっと見てみましょう。

3つの基本的な処理パターン

  • Webプロセッシング
  • ストリームプロセッシング
  • バッチプロセッシング

各コンポーネントの説明

  • リクエストプロキシ
    • WebアプリにおけるリクエストプロキシはNginxなどのプロキシサーバーやREST APIの場合はAPI Gatewayがこれにあたりますが、ここがサーバーレスにおいてはプラットフォームの提供するAPI GatewayやFaaSのHTTPトリガによってリクエストを受け付け、トラフィックルーティング、キャッシュ管理、保守不要、無限のスケール、流量管理などをしたうえでバックエンドにルートします。オープン系FaaSではこのトリガ(HTTPトリガ含む)はアプリのエンドポイントのプロキシコンテナが実行環境のコンテナとは別に常時起動しているという仕組みになっています。
    • ストリームであればKinesis StreamsやEvent HubsやCloud Pub/Subがこれにあたり、Publisher(Producer)がストリームに対してデータを投げ、Subscriber(Consumer)がデータを取り出して処理を行います。
    • マイクロバッチであれば、SNSやEvent Gridのような非同期かつプッシュ型のプロキシもあれば、非同期かつPull型のSQSやCloud Pub/Subといったキューがこれにあたります。
  • 実行環境
    • ロジックレイヤーである実行環境はLambdaのように言語およびバージョンに制約のあるものから、IBM Cloud FunctionsのようにDockerイメージ指定で自由に実行できるもの、OpenFaaSのように基盤からk8sなどに連携してリソーススケジュールすることができるオープン系までさまざまです。
  • ステート管理
    • Webアプリではステートマシンを使うことはないですが、エラー処理やリトライ制御が実行環境と切り離されていることがロバスト性を担保する鍵になります。Lambdaであれば同期イベントのエラー時にはHTTP429が返却されるため、エラー処理はクライアント側での実装になるという意味で切り離されています。
    • マイクロバッチにおけるステート管理はStep FunctionsやDurable Functionsのように複合条件やファンアウトの待ち合わせを行うステートマシンや、ジョブネットのような実行順序制御を管理するオーケストレーションから、Lambdaの非同期ジョブの自動リトライや、DLQによるエラー制御の外部定義などです。これらを活用することで、こういった制御をロジックレイヤーから切り出すことができることで、コードに依存しないアプリのロバスト性やメンテナンス性を確保することができるようになります。おそらく今後サーバーレスの開発生産性を議論する場合にはこういったソフトウェアエクセレンスを考える必要が重要になってくるでしょう(※単純にマネージドサービスを使って「作らない部分を増やす」だけでなく、「作る部分をどれだけ小さく/正しい粒度に保てるか」といった観点や、Testableであるという観点)

アプリケーションレジストリ

生産性について言うと、今年はAWS Serverless Application Registryのようにアプリケーションを定義化して共有できるサービスも増えました。これは当初Serverless Platformが似たような構想として始まっていましたが、AWSはSAMをベースにこれを実現し、stdlibでは少しづつリクエストのIF実装などが違う複数のFaaSへのコードを共通ルール化しておいて、各プラットフォームに合うように変換してデプロイできるレポジトリサービスを開始しました。

認証サービス

従来モノリシックなサービスであればアイソレートされたサーバーの内側での通信や保護されたネットワーク内部の通信で良かったものの、マイクロサービスのようなドメインをまたいだサービスの呼び出しなどが必要な場合、ネットワークによる保護以外の方法で安全に呼び出し会える必要があります、リクエスト時に認証された一時トークンを引き回すためにOAuth2などに対応したAuth0のようなサービスや各クラウドプロバイダーのマネージドサービスがサーバーレスなマイクロサービスを作る上でキモになります。

いろんなニューカマー

4つのサーバーレスカンファレンス勢

今年はServerlessconfや元々Serverlessconfを始めたメンバーによって立ち上げられたJeffConfの発展、emitの初開催にくわえ、インドでServerless SummitというのをOracleがリードスポンサーとして初開催されました。

Oracle

そのOracleですが、買収したIron.io自体は既存事業を維持しつつもOracle Cloud上での展開も見据えてIron Functionsとは違った新しいFaaSのプロジェクトであるFn Projectを提供し始めました。先行きに関してはまだ不透明ですが、来年はさらなる台頭が期待されます。特にIronFunctionsはただのオープン系FaaSというだけでなく、自社で提供していたMQなどとの連携ができることを売りにしていたので、Oracle Cloud内の各種サービス、特にOracleはデータベース以外にもさまざまなソリューションカットのSaaSパッケージを持っているので、そういうものと統合されると便利(有益なユースケースが多い)なのではないかと考えています。

さらに来年はAlibaba Cloudもクラウド全体の市場でのプレゼンスがさらに高まります。彼らはすでに中国国内のみ(かつ中国アカウントのみ)で利用できる「Function Compute」というLambdaに似たFaaSを提供しています。

FaaSはバインドサポートの多さがあってこそとあらためて思った

ただしこのFunction Compute、現状OSS(オブジェクトストレージ)のオブジェクト作成のトリガしかサポートされていないため、画像のサムネイル作成や圧縮ファイルをほどくようなユースケースしかないなと感じたのが正直なところで、あらためて思うことは「FaaSはやはりどれだけ周辺の便利なサービスとネイティブでバインドがサポートされるか」によって開発生産性が大きく変わりそうだなというのが1つです。ロジックレイヤーだけあっても、上記で書いたようなプロキシ(Enent Grid)とステート管理レイヤーが充実しないとサーバーレスなシステムを作るベネフィットは得られにくいなという感想です。

Alibaba Cloud

そのAlibaba Cloudですが、上記のFunction Computeやk8sベースのContainer Serviceもあったり、ビッグデータ系のサービスも充実して事例も多くあり、グローバルのクラウドプラットフォームとして十分に便利なので急激にシェアを拡大してます。特にマーケットがグローバルな会社ほど中国の内需を取り込むことを想定してはじめから基盤をAlibaba上でという選択が増えていくと思います。ICPライセンス取得や、ビジネス慣習にあった業務提携が得られるというのもメリットだと思います。

ちなみに準拠法については日本で契約したアカウントは日本に準拠します。とはいえ地政学的リスクとして中国のクラウドプロバイダーの姿勢は欧米とちょっと違うなということがあるので、ユーザーの情報の開示は仕方ないにせよ、保存されるカスタマーのデータについてはカスタマーサイド暗号化で保護すべきと思いますが、そこらへんはまた別途考えてみましょう。

今後

エンタープライズアーキテクチャやデザインパターンなどを背景にした実装方法の議論がもっと出てくる(べき)かなと思います。Serverlessconfのオーガナイザーとしては、次回のServerlessconf Tokyoではワークショップやセッションだけでなく、サーバーレススタートアップのピッチとか、ハッカソンなどを企画したいと思っています。来年はもっとサーバーレスについて皆さんと議論できると嬉しいです。

それでは。

*1:ShifterはテンポラリのWordPressコンテナ(プラグインなども利用可能)を使って記事を静的なページにパブリッシュしてCDNから配信することで、スケーラビリティを気にせず安定運用できるサーバーレスなWordPressホスティングサービス

*2:ゲームに必要な検索やランキングといった部品をSaaSとして安くスケーラブルに安定的に提供するAWSやGCPのサーバーレスコンポーネントで作られているサービス

*3:システムに素早く組み込めて安定している認証サービス。Extendではそれに加えてWebtaskという実行レイテンシの安定したFaaSが使える。Auth0自体もこのWebtask上に実行環境が載っている

*4:爆速検索サービス、インクリメンタルサーチも爆速ならインデックス更新も爆速

*5:静的サイトの配信サービス。ただS3ホスティングやCDNを使うのとは異なり、SSRなどが可能