目次
セミナー概要
従来型のシステムに対して、ビジネスのスピードを上げる新しいクラウド開発の手法を学ぶセミナー「DevOpsとCI/CDを支えるクラウドソフトウェア」がBFT道場で開催された。クラウドネイティブアプリケーションの基礎であるマイクロサービスについて、IBMのDistinguished Engineerの経歴を持つ山下克司氏が解説する。 なお、セミナーは「クラウド・アーキテクチャ」をテーマにして全4回の開催を予定している。今回はその第3回である。
クラウドが前提のシステム構築手法とマイクロサービスアーキテクチャ
クラウドの特徴は改善の速さや、多さ、弾力性と言える。そのため、クラウドが前提の新しいシステム構築手法が生まれてきた。ソフトウェアの開発方式にリーンソフトウェア開発がある。
これは、トヨタ自動車の生産方式を応用したリーン思考から派生した開発手法であり、製造過程の無駄を省き生産効率を向上させることを目的としている。
リーンソフトウェア開発を早期に取り入れた点が、急成長したスタートアップ企業(FacebookやTwitter)に共通していたと言われている。生産効率を向上させることにより、図1, システム構築を高速化するための手法「LEAN」における、ドラムロールに合わせた素早い改善活動を行うサイクルを実現する。
図1の例では、開発と運用が同時にシステムリリースを行い、サイクルの間隔をどんどん短くすることにより、高速なシステムアーキテクトが可能となった。
マイクロサービスアーキテクチャのベストプラクティスについて、監視、インターフェース、アーキテクチャの安全性という観点で山下氏は語った。
監視においてはシステムの健全性とビジネスの継続性を計測して自律的なモニタリングとスケーリングを行う、性能管理が直接的にクラウドのコスト管理につながることを理解した監視のシステムを作ることが必要である。
インターフェースにおいては、それぞれのチームが自分の意思決定でリリースができるようになっていないと、どこかに変更を行う際に全部門との調整が必要になりリリースに時間がかかってしまう。そのため機能ごとに意思決定を分割し、独立した意思決定を行うこと、システム全体としてインターフェースの標準を決めることでシステムの安定を図ることが重要である。
アーキテクチャの安全性においてはアーキテクチャ上のSPOS(Single Point of Failure:単一障害点)を避ける、直列ではなく並列に実装する、同期で呼び出さずにプールやキューを用いて疎結合とするアーキテクチャが採用されるようになってきている。
システムを改善しながら運用するためのマイクロサービスアーキテクチャ
上記で説明したマイクロサービスと、対義語であるモノリシックサービスついて比較していく。
従来型のシステムであるモノリシックサービスは、本来であれば独立しているべきサービスモジュールが、インフラが原因で1つにまとめられてしまっている。そのため、ある1箇所の変更がシステム全体に影響を及ぼすことになり、システムリリース後に他部分への影響を確認するための全体テストなどを実施する必要があり、一つのリリースに対して非常に手間と時間がかかってしまう仕組みとなっている。
特に日本ではSOA(サービス指向アーキテクチャ)のアプローチを嫌って「動けばいい」という考えでシステム構築をした結果、モノリスと化したシステムが増えてしまったという歴史がある。
一方マイクロサービスは、大規模なアプリケーションを複数の小規模なサービスに分割して開発・運用するアーキテクチャである。サービスごとに異なる稼働環境を用意して各サービスを独立させ、フロントエンドに統合しているため、アジャイルチームごとに意思決定ができ、1つの変更がシステム全体に影響を及ぼさない疎結合なシステムを実現することができる。
疎結合なシステムであるため、障害が発生した場合でも影響範囲を限定することができる。執筆現在主流で用いられているWebアプリケーションはマイクロサービスの形となっている。
コード等の再利用をしない(書き捨てる)前提で、分割してマイクロサービス化することでサービスごとに非同期に独立した意思決定ができるようになり、そういった考え方と相性がいいDevOpsやCI/CD、コンテナ技術(※1)が広まってきている。
※1
DevOps:開発(Development)と運用(Operation)を一体化した開発手法。「小さく、頻繁に」開発・運用を行うというDevOpsの考えと、各サービスが独立しているマイクロサービスは相性が良い。
CI/CD:継続的インテグレーション(Continuous Integration)と継続的デリバリー(Continuous Delivery)の組み合わせ。マイクロサービスで開発されたアプリケーションを迅速にリリースするために有効な手法である。
コンテナ技術:アプリケーションを実行するための環境をパッケージ化した技術を指す。コンテナは、アプリケーションを異なる環境に移植したり、複数のアプリケーションを同じ環境で実行したりすることができ、マイクロサービスの利点を向上させることができる。
コンテナに適した分野
OSなどの共通化すべき部分を共通化し、プロセスだけ異なるシステムを並列化して大量にかつ簡易に動かすために、Dockerをはじめとしたコンテナという技術が登場した。コンテナは実行環境ごとにOSを持たなくて良いため非常に軽量であり、セキュリティを保つためにLinuxのnamespace、cgroupといった機能によりコンテナ境界を実現している。
コンテナ技術を用いれば、環境を容易にコード化することができる。そのため、コンテナ技術はCI/CD、IaC (Infrastructure as Code)、Immutable Infrastructureを実現するために使うべきである。
Immutable Infrastructureとは、同じコードを使えば作業者のスキルに関係なく複数の同じ環境を作ることができるものである。この性質により、本番環境、開発環境、検証環境を簡単に統一することができる。クラウドのような仮想環境では、バージョンアップ時にサーバやコンテナの単位で新規作成し、古い環境は破棄してデプロイすることが可能である。このようなクラウドの仕組みはマイクロサービスのアジャイルな意思決定と相性が良い。
トレンドのアプリケーションの変化
ここからはマイクロサービスアーキテクチャの普及により登場した、現在トレンドとなっているアプリケーションについて紹介していく。
コンテナを稼働させるためのミドルウェア
・コンテナを用いてアプリケーションを開発・実行するDocker
・サーバが動いていないことを前提に必要な時だけネットワークを介してサーバを起動したり、クラスターを管理したりするオーケストレーションツールであるKubernetes
・コンテナ環境を管理しタスクごとに分散処理を行うMESOS
・コンテナ動作時にコンテナにトラフィックコントロールを行うサービスメッシュであるIstio
サービスを提供するためのアプリケーション実行環境
・Apacheと似たようなWebサーバの機能を持つnginx
スケーリング、ABテスト、Blue Greenデプロイメント(※2)といった手法と相性が良いため、主にWebサーバをコンテナ化することが多い。
nginxはApacheと比較してI/Oの発生しないキャッシュを持っており、軽量データの大量配信に向いており、近年Webサーバのシェアを伸ばしてきている。また、nginxはリバースプロキシやロードバランサとしても使われる。
※2
スケーリング:設定に応じてサーバ台数を自動で増減させる手法。
ABテスト:リクエストが入った時に確率によって異なるパターンのコンテンツを表示することにより、どちらのパターンが良いか評価する手法。
Blue Greenデプロイメント:バージョンアップ時にサーバやコンテナ単位で新規に構築し、古い環境は破棄する計算機環境の更新手法。短期間低コストで環境更新できる。
アンケート結果紹介
セミナー後のアンケートでは、9割近くの受講者が「役に立った」、「大いに役に立った」と回答してくれた。
一方でセミナーの内容については「理解できた」と回答した受講者は半分に満たなかった。しかしながら、「最新のシステムについて学べて良かった」、「理解が追い付かなかった部分はこれからキャッチアップしたい」といったポジティブなコメントが多く寄せられた。
また、クラウドについての課題として「クラウドに明るい人材の不足」を感じている受講者が多く、本セミナーを通じてシステム開発経験のない方や開発についての知識が浅い人が、クラウドやマイクロサービスアーキテクチャに興味を持ち、今後理解を深めていくことにつながれば幸いである。
セミナーを受講して
私も実際にセミナーを受講したが、分かりやすい箇所と聞きなれない単語が多く難しい箇所に分かれていたと感じた。
セミナー受講当時、AWSソリューションアーキテクトアソシエイト(SAA)の試験勉強中であり、その試験内容に通ずるものが多いと感じた。ある経営層の方が本講義を受講して、「講義に出てくるようなクラウドシステムを作りたいと思った。」と話していたが、私も本講義を受講してマイクロサービスのシステムを構築することに興味が湧いてきたため、同様の感想を持った。
執筆現在トレンドとなっている最新の技術について学ぶことができ、今後システムを構築する仕事をする際のモチベーションになる内容だったと感じている。
本セミナーは、BFT道場の教育サービスご契約者、受講者であれば誰でも受講できる無料セミナーとして実施した際の内容をレポート化したものだ。BFT道場では現役のインフラエンジニア講師による実践型IT技術研修を提供している。詳しくはBFT道場をご覧いただきたい。