
本シリーズのこれまでの記事では、モダンなソフトウェア開発について説明し、そのソフトウェアのアーキテクチャについて考えてきました。これらの知識を踏まえ、今回はそのようなアプリケーションを構成する「ビルディングブロック(構成要素)」に焦点を当てます。LPI の DevOps Tool Engineer 試験の目的 701.2 では、ソフトウェアコンポーネントおよびプラットフォームが扱われています。この試験範囲では、オブジェクトストレージ、リレーショナルデータベースや NoSQL データベース、メッセージブローカー、ビッグデータサービスといった、さまざまな技術コンポーネントが挙げられています。ある程度 IT 業界で経験を積んだ人であれば、これらのカテゴリの少なくとも一つには馴染みがあるでしょう。同様に、ソフトウェアアーキテクチャの中でこれらのコンポーネントが果たす役割を大まかに理解しておくことは不可欠です。
かつては、これらのアプリケーションコンポーネントはソフトウェアの導入準備の際にシステム管理者が手作業でインストールしていました。しかし現在では、クラウドプロバイダーがこれらのツールをサービスとして即座に利用できる形で提供しています。多くのクラウドプロバイダーは既存の技術を採用し、それらを自社のインターフェースに統合し、独自の名称を付けて提供しています。
クラウドコンピューティングには複数のサービスレベルが存在し、それぞれのレベルでプロバイダーとユーザーの責任範囲が異なります。主なモデルとしては IaaS、PaaS、SaaS、FaaS があり、これらは「最大限の制御」から「最大限の利便性」までの連続したスペクトル上に位置付けられます。
Infrastructure as a Service(IaaS) モデルは、インターネット経由で仮想化されたコンピューティングリソースを提供する、最も基本的なクラウドサービスです。ユーザーは仮想サーバー、ストレージ、ネットワークにアクセスできますが、オペレーティングシステム、ミドルウェア、ランタイム、アプリケーションについては引き続きユーザー自身が管理する責任を負います。OpenStack はオープンソースの IaaS プラットフォームの代表例であり、Nova(コンピュート)、Cinder(ブロックストレージ)、Swift(オブジェクトストレージ)、Neutron(ネットワーク)といったコンポーネントによって、完全なインフラストラクチャを構成しています。
Platform as a Service(PaaS) モデルは、基盤となるインフラを抽象化し、アプリケーションの開発、デプロイ、管理のための完全な環境を提供します。プロバイダーがオペレーティングシステム、ミドルウェア、ランタイムを管理するため、開発者はアプリケーションコードの作成に専念できます。例としては Heroku、Google App Engine、そして OpenStack の文脈では Database as a Service を提供する Trove プロジェクトがあります。
Software as a Service(SaaS) モデルは、最も上位のサービスレベルであり、すぐに利用可能な完成済みのソフトウェアをインターネット経由で提供します。ユーザーはインストールや保守、インフラについて心配することなくアプリケーションを利用できます。プロバイダーがハードウェアからソフトウェアの更新まで、すべての技術的要素を管理します。例としては Google Workspace、Microsoft 365、Salesforce などがあります。
Function as a Service(FaaS) モデルは、しばしば「サーバーレスコンピューティング」と呼ばれ、インフラを一切管理することなく、イベントに応じてコードを実行できる仕組みです。コードは必要に応じて起動される一時的なコンテナ上で実行され、課金は実際の実行時間に基づいて行われます。このモデルは、イベント駆動型のワークロード、Webhook の処理、需要が変動するマイクロサービスに最適です。代表例として AWS Lambda、Google Cloud Functions、Azure Functions があります。
オブジェクトストレージは、データを「オブジェクト」として管理するデータストレージアーキテクチャです。ディレクトリ階層でデータを整理する従来のファイルシステムや、セクタやトラック内のブロックとしてデータを管理するブロックストレージとは異なり、オブジェクトストレージでは各データ項目を独立した単位として扱います。各オブジェクトには、データ本体、可変長のカスタムメタデータ、そしてグローバルに一意な識別子が含まれます。Amazon S3(Simple Storage Service)は、市場で最も影響力のあるオブジェクトストレージサービスとして確立されており、その API は他の多くの実装でも採用される事実上の標準となっています。
データベースは、ほぼすべてのモダンなソフトウェアアプリケーションにおいて基本的な構成要素です。データベースは大きく、リレーショナル(SQL)と非リレーショナル(NoSQL)の二つに分類され、それぞれに固有の特性、利点、用途があります。
リレーショナルデータベースは、データを行と列からなる構造化された表形式で保存し、テーブル間の関係を明確に定義します。あらかじめ定義されたスキーマを使用してデータを構造化し、ACID(原子性、一貫性、独立性、耐久性)特性によって整合性を保証します。MySQL は、世界的に最も広く使われているオープンソースのリレーショナルデータベースの一つとして確立されています。MariaDB は MySQL から派生したフォークで、完全な互換性を維持しつつ高度な機能を追加し、完全にオープンソースであり続けています。PostgreSQL は、信頼性、機能の充実度、SQL 標準への準拠で高く評価されているオープンソースのオブジェクトリレーショナルデータベースシステムです。
NoSQL データベースは、従来の表形式とは異なるモデルでデータを保存・取得する仕組みを提供します。多くの場合、スキーマの柔軟性や水平方向のスケーラビリティが重視されるビッグデータやリアルタイムシステムで採用されます。Redis はインメモリのデータ構造ストアとして機能し、データベース、キャッシュ、メッセージブローカーとして利用されます。キーと値の構造により、非常に低いレイテンシでの読み書きが可能です。MongoDB はドキュメントモデルを採用し、JSON に似た形式(BSON)でデータを保存することで、柔軟なスキーマとネイティブな水平スケーリングを実現しています。InfluxDB は時系列データに特化しており、タイムスタンプ付きのメトリクス、イベント、測定値の保存とクエリに最適化されていて、監視や IoT の分野で特に有用です。
分散システムアーキテクチャにおいて、非同期通信はサービス間の疎結合化、スケーラビリティの向上、システムの耐障害性強化のための基本的なパターンです。メッセージキューやメッセージブローカーは、この通信を実現する中核コンポーネントです。メッセージキューは、メッセージが受信者(コンシューマー)によって処理されるまで一時的に保存するデータ構造であり、通常は各メッセージが一度だけ処理されることを保証し、到着順(FIFO:先入れ先出し)で処理されます。ただし、実装によっては異なるセマンティクスを提供する場合もあります。
Apache Kafka は、1 日に数兆件のイベントを処理できる分散型イベントストリーミングプラットフォームです。Kafka はリアルタイムデータパイプラインやストリーミングアプリケーションの構築に利用され、メッセージング、ストレージ、ストリーム処理を単一のプラットフォームに統合しています。MQTT(Message Queuing Telemetry Transport)は、パブリッシュ/サブスクライブ型の軽量メッセージングプロトコルで、帯域幅が限られている、または接続が不安定な環境向けに特別に設計されています。
ビッグデータとは、「3 つの V」──ボリューム(大量性)、ベロシティ(生成・処理速度)、バラエティ(形式やデータソースの多様性)──によって特徴付けられるデータセットを指します。ビッグデータサービスは、従来のツールでは扱いきれない規模のデータを保存、処理、分析するためのツールとインフラを提供します。
Elasticsearch は Apache Lucene を基盤とした分散型検索・分析エンジンとして確立されており、ほぼリアルタイムで大量のデータを保存、検索、分析できます。全文検索、ログ分析、インフラ監視、セキュリティ分析(SIEM)などで広く利用されています。OpenSearch は、元プロジェクトのライセンス変更を受けて Amazon Web Services により作成された Elasticsearch のフォークです。Elasticsearch API との互換性を維持しつつ、Apache 2.0 ライセンスのもとで開発されており、完全なオープンソースであることが保証されています。両者は、分散インデックス、リアルタイム検索、統合ダッシュボードによる可視化など、類似した機能を提供しています。
コンテンツデリバリーネットワーク(CDN)は、地理的に分散したサーバー群が連携して、インターネットコンテンツを高速に配信する仕組みです。基本的な考え方は、世界各地の複数の PoP(Point of Presence)にコンテンツのコピーを配置し、ユーザーとリクエストを処理するサーバーとの物理的距離を短縮することです。CDN は、HTML ページ、JavaScript ファイル、CSS スタイルシート、画像、動画など、Web コンテンツの読み込みに必要な資産を高速に転送します。レイテンシの低減に加え、DDoS 保護、エッジサーバーでの SSL/TLS 終端、コンテンツ圧縮、画像最適化といった追加の利点も提供します。
CDN は、静的コンテンツをエッジサーバーにキャッシュし、最も近いユーザーからのリクエストに応答します。ユーザーがリソースを要求すると、CDN は地理的に最も近いエッジサーバーにリクエストを転送します。コンテンツがキャッシュされていれば即座に配信され、そうでない場合はオリジンサーバーから取得してキャッシュした上でユーザーに配信されます。
アイデンティティおよびアクセス管理(IAM)は、適切な主体(人、サービス、デバイス)が、適切な技術リソースにアクセスできることを保証するためのポリシー、プロセス、技術の枠組みです。クラウド環境において IAM は極めて重要なセキュリティ要素であり、「誰が」「どのリソースに対して」「何ができるのか」を制御します。IAM の基本概念には、アイデンティティ(ユーザー、サービス、デバイスの表現)、認証(主体が主張する本人であることの確認)、認可(認証された主体に許可される操作の決定)、監査(コンプライアンスや調査のための操作記録)が含まれます。
次回の記事では、ソースコード管理(Source Code Management)に進み、モダンな開発ワークフローにおいてソースコードを効率的に管理、バージョン管理、共有する方法を探ります。
You are currently viewing a placeholder content from Vimeo. To access the actual content, click the button below. Please note that doing so will share data with third-party providers.
More InformationYou are currently viewing a placeholder content from YouTube. To access the actual content, click the button below. Please note that doing so will share data with third-party providers.
More InformationYou need to load content from reCAPTCHA to submit the form. Please note that doing so will share data with third-party providers.
More InformationYou need to load content from reCAPTCHA to submit the form. Please note that doing so will share data with third-party providers.
More Information