「Severlessを支える技術 第2版」を読んでサーバレスアーキテクチャとは何かを改めて学んだ
このNoteでは「Severlessを支える技術 第2版」を読んだ感想などについてまとめています。書籍自体は同人誌で以下のURLで販売されています。
1章のサーバレスの概念説明だけでもためになり、他の章も各クラウド事業者の取り組みのサーベイになっているため非常に読み応えがあるのでおすすめです!
※注意
この感想は2版の内容を元に書いてあるので、最新版の情報は反映できてません。
なぜ書いたのか
筆者はAWS LambdaやDynamoDBなどのサービスを趣味で使っていて、何となくサーバレスサービスについて知っていました。最近会社で「サーバレスとは何なのか」説明したいと思った時に良い表現が思い浮かばず悩んでました。今まではLambdaを例に挙げてコードを与えれば実行結果だけが返却されるものとして説明したり、あるいは以下のURLのクラウド事業社と自社の責任範囲画像などを引用してPaaSだけでなく連携機能があるものとして説明していました。
ただ今ひとつ釈然としないまま人に説明していた中で、この本を思い出して、読み返すとサーバレスの定義をコンパクトにまとまっていて理解が深まったため記事にしてみました。
サーバレスとは何か
この本ではまず「サーバレス」という言葉についてどういう源流から生まれたのか、サーバの抽象化という本質と2つの観点でサーバレスとはサーバ抽象化をどう実現されているものなのか記載されてます。1つはフルマネージドなサービス、2つ目はイベントドリブンなシステムとして観点を分けています。
フルマネージドサービス
AWSでいえばRDSやLambdaのように、サーバ設定やミドルウェアの管理をクラウド事業者に任せていて、かつスケーラビリティの確保などを含めたものをフルマネージドサービスと呼んでいます。サーバに関する技術的なサポートは基本クラウド事業者に依存することで、開発者は設定にとらわれずサービスの開発に集中できます。またLambdaのように問い合わせに対して自動で多重実行されることでスケーラビリティが自然に確保できるようになります。(実際は大量に仮想マシンが裏で起動されることで実現されてます)
最初に設計さえ詰めておけばスケーラビリティを考慮してプログラムの大幅な変更などが必要なくなるのでスケール時の保守性は高くなります。
※ただ余談としては、勝手に上限までスケールしてしまうので設定ミスをすると思わぬコストが掛かる場合があるので、導入前の事前検証が非常に重要になるとは感じています。私はLambdaとCloudWatchEventの設定ミスでLambdaが初期上限の1000台1日中稼働し続けて1日で2万円かかったことがあります…
イベンドリブンなシステム
もうひとつはプログラミングモデルにおけるサーバレスと書かれています。従来のオンプレ型のDB、WEB、BatchサーバなどのN層構造モデルでなく、APIリクエストやファイルアップロードなどのイベントをトリガーとして別のサービスを実行してシステムを実現する仕組みです。
この仕組みではLambdaのようにプログラムを実行して他のサービスに接続するものから、クラウド事業者が提供しているサービス同士を接続することで開発者はプログラムすら記述せずシステムを実現するパターンもあります。簡単なモバイルバックエンドの設計だと従来のN層構造とサーバレス構成で以下のように変化します。(以下は自分のイメージ図でCloudFrontやRoute53などは省略しています)
APIリクエストをトリガーにAppSyncがDynamoDBからデータを取得し返却します。N層構造でのロードバランサとリクエスト処理、DBアクセスの役割はAppSync内部の設定が担ってくれます。
個人的なイメージとしては、Linuxのパイプのように単一の役割をもつコマンド同士を組み合わせて新しい機能を実現するようにシステムを作る感じです。
所見
今まで曖昧な説明しかできずモヤモヤしてた部分が多少言語化できるようになりました。本書でも言及されていますがサーバレスについて話す場合は「フルマネージドサービス」の話か「イベンドリブンなシステム」の話か分けて考えなければならないようです。個人的には、運用面の考慮を減らせるフルマネージドの部分より、イベントドリブンな設計の部分が気になってます。
従来のコーディングとインフラ構築ベースのシステム開発からクラウド事業者のサービスを利用したイベントドリブンなシステム開発が将来当たり前になる可能性があると思っていてます。従来の構築と違って、AppSyncなどのサービスが自分の作成したいものの要件を満たしているかが重要になり、実装して機能を試しながら設計していく方式が基本になるかもしれません。もしその構成が当然の時代になったとしても対応できるように勉強や実装は続けたいですね。後、最近のAmazonの障害をみるとマルチクラウドでの設計が必要な要件が増えるかもしれないですが、AppSyncなど各社独自サービス部分は2重に設計しなきゃいけないので大変そう…
この本については、上記の内容は本の1章の序盤に過ぎなく、この後も2004年のAmazon SQSの誕生から現在までサーバレスサービスの動向やAWS、GCP、AzureなどのFaaSがそれぞれ課金体系や仕様がどうなっているのか比較されていて読み応えの多い内容になっていました。サーバレスについて考える時は必携の本になると思うので、Boothで買うと新たな知見が得られると思います。
(正直なぜこの深い内容で1000円で売ってるのか不思議なレベルです…)