-名古屋のIT系学生コミュニティOthloTechのブログです。クラウドおはこんばんちは!@ジュジュです!最近コンテナのおかげでサーバサイドエンジニアとインフラエンジニアの垣根がなくなっていたり、FireBaseのおかげでモバイルエンジニアとサーバサイドエンジニアの切れ目が減ってきていたり、便利になっているなぁということを肌で感じます。Whitepaperに基づいて記述していきたいと思います。※なお筆者が読んで書き下したものであるため主観が含まれる場合等がございます。対象読者インフラ技術の勉強をしている人。クラウドって技術が多すぎてどうしたらいいのかいまいちわからない人。XaaSの使い道のプラクティスが知りたい人。記事の内容XaaSっていったい何?という疑問に答えていきます。v1.0に基づいてXaaSの使い分けについて記述を行います。Foundationの略称でクラウド標準に則った構成や持続可能性の高いシステムを作る際の標準を謡っている会社です。マイクロサービス化を推進し、ソフトウェアエンジニアがより高速且つ柔軟に開発を進めるためのOSS等を定義しています。具体的にはKubernetesやfluentd、新たな通信規格であるgRPC、メトリクス監視ソフトウェアのPrometheus等が上記理念を実現するためのソフトウェアとして推奨されています。FoundationXaaSとは最近よく聞くXaaSです。IaaS、CaaS、PaaS、FaaS等どんどんいろんな名称で出てきています。Functionを指します。これらの違いとしては利用したときにエンジニアが管理すべき領域が変わってきます。IaaSであればOS以上、PaaSであればWebアプリケーションプログラムとなります。具体的には下記の画像をご覧いただくとどこを管理するのかのイメージがわくかと思います。Daysの発表資料である下記スライドから引用しています。Machines、GCPであればGCEがこれにあたります。クラウド技術の中でも最も抽象度が低いサービスでOS以上のレイヤをすべて開発者が管理する必要があります。それゆえに自由度も非常に高くOSレベルでのアプリケーションチューニング等を行うことができます。その一方で開発におけるワークロードが定まっておらず、生産性がほかの技術と比べると低いケースが存在します。クラウド技術の中でもっとも古くからある技術であるためにプラクティスは十分に存在し、成熟した技術であるといえます。現在のKubernetesのワーカーノードではIaaSが利用されることが多いです。WhitepaperではIaaSに対する言及はされていません。メリットベアメタルからの移行でも比較的小さい変更で運用可能。OSレベルでのアプリケーションチューニングやログ収集が可能。自由度が非常に高く、ほとんど任意の開発環境を用意できること。デメリット開発者の管理領域が大きく開発に伴う作業が肥大化すること。開発以外にも運用に時間コストがかかってしまうこと。ユースケース現在ベアメタルで運用しているシステムをクラウドに移行したいとき。OSレベルのチューニングやログ監視が要求されるとき。Service)これは少し耳慣れない言葉かもしれません。CaaSはDockerをはじめとするコンテナにパッキングしたものを動作させるランタイムを指します。例を挙げると各パブリッククラウドで用意されているKubernetesエンジンであったり、AWSであればECSやFargate、さくらインターネットであればArukasになります。CaaSではコンテナ特有の"less-opinionated"という特徴をそのままに運用することが可能でベンダーロックインなどの恐れはほとんどありません。コンテナ技術を利用するがゆえに自由度もとても高くなります。IaaSと同様に管理範囲は大きなものとなってきます。IaaSとの違いとしてはOSや環境に依存しない携帯性や再利用性の高さがあげられます。メリットコンテナならではのベンダーに左右されない携帯性や再利用性の高さ。動作環境の制御性の高さ。イメージ指定等のポリシー指定の柔軟さ。IaaSと比較したときのスケールアウトの高速さ。FaaSと比較したときの開発者が持つべき責任の大きさ。"less-opinionated"故の生産性の低さ。ユースケース既存アプリケーションをマイクロサービス化して展開したいとき。マルチクラウドの利用を念頭に入れているとき。柔軟なポリシーに基づいたアップデートやスケールアウトを行いたいとき。Service)PaaSは言語の実行環境を提供してくれるクラウドサービスで開発者はアプリケーションの管理のみをすれば開発可能になります。PaaS以上の抽象度ではアプリケーションは大小ありますがベンダーロックインすることになります。Engine、Heroku等があげられます。PaaSでは開発者はアプリの実行プラットフォームについては考慮しなくていいので開発が容易になるほか提供ベンダによってはスケールアウトやデプロイなどについてもマネージしてくれます。メリット開発者はスケールアウトやデプロイなど運用の面などをクラウドに投げることが可能。オペレーティングシステムやランタイムの管理をしなくてよい。FaaSと比較してステートの存在するアプリケーションを構成可能。Appに則って開発できるために生産性が高い。デメリットOSや実行環境に対しての制御がしにくい。Appに則るが故の自由度の低下。ユースケースロックインが需要できて、高速に開発を進めていきたいとき。インフラエンジニアが不在な環境での開発。FaaSと比較してウェブアプリケーションという形式での開発に慣れている。Service)FaaSはあるイベントに基づいて関数が動作するという動作をするクラウドサービスです。Functionsが挙げられます。サーバレスではイベントの実行に対して課金が発生するためにIaaSのように毎月一定の額が徴収されるというわけではなく、厳密に利用した分だけお金を支払うという構図となります。これゆえに課金額は抑えることができますが、一定時間以上イベントが発生しない場合にクラウド側に展開されない状態となってしまうため、そうなってしまった場合の駆動は遅くなってしまいます。イベントが呼び出された場合に関数は引数に合わせて1から動作するため状態を持った動きを定義するためには外部ストレージ等を駆使して工夫する必要があります。イベント駆動がゆえにスケーリングに関しては非常に強力でクラウド資源がベンダに存在する限り事実上無限となります。メリット理論上無限のスケーリング等にほとんどコストを割かなくてよい。go"に完全に則るが故の課金額の安さ。抽象度が最も高く開発者が管理するものが少ない。意識せずともマイクロサービスに近いような設計になる。デメリットステートのあるプログラムの記述がしたい場合に工夫する必要がある。成熟してないがゆえにベストプラクティスが存在しない。一定期間動作しなかった場合に初回動作が低速になる。開発工数の管理の難しさ(Functionで工数管理ができ、容易という説もある。)FaaSならではの設計を行う必要がありパラダイムシフトが必要。ユースケースどこまでスケールするか分からないシステム。新たな技術に挑戦するのに慣れているチーム。運用を極端にまで少なくしたいチーム。クラウド利用料を抑えたい場合。IoT連携等完全にイベント駆動で動作するシステム。FaaSの使い分け方について紹介をしています。これらに関してはそれぞれメリットデメリットがあり、今はまだどれが正解という段階にはありません。これはWhitepaperにも記述があるのですがマイクロサービス化したうえで得意な部分を該当サービスを利用して開発運用するというのが現状はベストなのではないかと思います。Code"にもつながっていくのではないかと思っています。終わりに最近はとりあえず動かしてみようという気持ちで利用できるクラウドシステムが非常に増えてきたように思います。それとともに初学者にとってはサービスが非常に多いという状況を生んでしまい、何をどうやって使うのかがよくわからないという状況を招いてしまっています。FaaSについての解説をするとともにユースケースを紹介しました。初めましての方は初めまして、@yoshikawataikiです。Auroraがなぜ高速か解説するweb制作者が意識すべきSEO対策のキホン月別アーカイブはてなブログをはじめよう!othlotechさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。