新DX時代のシステムアーキテクチャデザイン ~システムアーキテクチャの基本

前回の記事では「システム開発プロジェクトにおけるシステムアーキテクチャデザインの設計プロセス」と題して、システム開発プロジェクトにおいて、どのようなプロセスを経てシステムアーキテクチャが決定されていくのか、について解説しました。

今回は、システムアーキテクチャをより深く理解する為に、システムアーキテクチャの構成要素と種類についての基本を解説します。

システムアーキテクチャとは

システムアーキテクチャとは、ソフトウェアや情報システムの設計と構造に関する基本的な原則や概念をまとめたシステム構成のことです。

システムアーキテクチャの構成要素

システムアーキテクチャは、主に「目的や要件」「構造」「コンポーネント」「相互関係」の4つの要素で構成されます。

目的や要件

システムの目的や要件を定義します。システムアーキテクチャを設計する上でシステムの目的や要件について明確に定義することが何より重要になります。

目的や要件を定義せず、曖昧な状態でシステム開発プロジェクトを進めてしまうと、設計が曖昧になり手戻りや開発工数ばかりが増え、当初の目的を達成することができないシステムとなってしまいますので、システムの目的や要件について明確に定義することが求められます。

システムの目的とは、システムが達成すべき目標です。要件とは、システムが満たすべき条件のことです。

構造

システムの構造とは、システムを構成するコンポーネントの組み合わせです。

コンポーネント

コンポーネントとは、システムを構成する要素です。コンポーネントには、サーバやストレージの他、データベースやロードバランサーやファイアウォール、APIなどが含まれます。

相互関係

コンポーネント間の相互関係とは、コンポーネントがどのように連携するかを定義したものです。

システムアーキテクチャの種類

システムアーキテクチャには、さまざまな種類があります。代表的な種類としては、以下のようなものが挙げられます。

サービス指向アーキテクチャ:SOA (Service-Oriented Architecture)

サービス指向アーキテクチャは、システムを複数の独立したサービスに分割し、それらが連携して動作するアーキテクチャです。各サービスは独自の機能を提供し、相互に通信することで全体の機能を実現します。

3層アーキテクチャ:three-tiered architecture

3層アーキテクチャは、システムをプレゼンテーション層、ビジネスロジック層、データアクセス層の3つの層に分けて設計するアーキテクチャです。

モノリシックアーキテクチャ:Monolithic Architecture

モノリシックアーキテクチャは、システムを1つの大きな単一のアプリケーションとして構築するアプローチです。モノリシックな設計は簡単に開発できる一方で、拡張性や保守性に課題が生じることがあります。

少し前に開発された多くのシステムでは、3層アーキテクチャやモノリシックアーキテクチャといったアーキテクチャ思想を元に開発されていました。

社内に設営されたコンピュータールームや契約先のデータセンターにサーバーやストレージを置いた所謂オンプレミスなシステムの多くはこのアーキテクチャで設計されています。

当社にリファクタリングやリアーキテクチャをしたいとご相談頂く多くのお客様のシステムの多くが、3層アーキテクチャやモノリシックアーキテクチャで設計されたシステムが大半を占めており、クラウドへの移行やリファクタリングによるコードの改善と共にシステムアーキテクチャの変更を希望されるお客様が増えています。

マイクロサービスアーキテクチャ:Microservices Architecture

マイクロサービスアーキテクチャは、小規模で独立したサービス(マイクロサービス)に分割されたシステムです。各サービスは個別に開発・デプロイ・スケール可能で、柔軟性と独立性を提供します。

イベント駆動アーキテクチャ:Event-Driven Architecture (EDA)

イベント駆動アーキテクチャは、システム内外で発生するイベントに基づいて処理を行うアーキテクチャです。イベントに反応して非同期にタスクを実行し、システムの柔軟性と拡張性を高めます。

マイクロサービスアーキテクチャやイベント駆動アーキテクチャは、主にAWSやGCPなどのクラウドサービスが一般的に広がりを見せた後に広まっていったシステムアーキテクチャです。

日本国内におけるクラウド上に構築されるシステムは、昔からのモノリシックアーキテクチャなどの設計思想をそのまま引き継いだシステムとマイクロサービスアーキテクチャなどのクラウドネイティブなアーキテクチャ思想をもとに設計されたシステムに大きく二分している傾向がみられます。

CQRS (Command Query Responsibility Segregation)

CQRSは、読み取り操作と書き込み操作を明示的に分離するアーキテクチャです。データベースの更新とクエリに異なるモデルを使用し、柔軟なデータ処理と効率的なクエリを可能にします。

ヘキサゴナルアーキテクチャ:Hexagonal Architecture

ヘキサゴナルアーキテクチャは、システムを内部のコアと外部のポート(アダプタ)に分割し、外部要因に対して柔軟に変化できるようにします。ビジネスロジックは中心に配置され、外部の変更に対して耐性を持つことができます。

RESTfulアーキテクチャ:RESTful Architecture

RESTfulアーキテクチャは、分散システムのデザインに適した原則を提供します。リソースを操作するための状態を転送することで、柔軟で拡張性のあるAPIを構築します。

今回は、システムアーキテクチャの構成要素と種類の基本についてご紹介しました。次回は、システムアーキテクチャの重要性についてご紹介します。