データベース入門:アーキテクチャ設計

アプリケーションやシステムでは、大量のデータを効率的に管理するために、データベースの設計が非常に重要です。しかし、データベースアーキテクチャの選定や設計には、性能、可用性、拡張性といった多くの要素を考慮する必要があります。本ブログでは、なぜアーキテクチャが重要で、どういうアプローチで検討すれば良いのかを解説します。

アーキテクチャ設計の重要性

そもそも「アーキテクチャ」とは何か。この言葉は、古くは建築の構造や様式のことを指して使われていました。20世紀に入って、それがシステム開発の分野にも転用されたのですが、そこでは「そのシステムの目的と機能」を表現する言葉として使われています。

逆に言えば、アーキテクチャを見れば、そのシステムがどのような用途で使われ、何を目的としているのかがある程度推測できるわけです。
また、アーキテクチャという領域は、こちらの記事で解説している「コスト」とも密接な関係を持っています。これは当然のことで、システムというものは予算制約の中で構築され、運用されるため、現実離れした高機能のシステムを作ろうとすれば、予算オーバーで頓挫してしまいます。とはいえ、必要以上に予算を絞り、非力なアーキテクチャを選択して失敗するというケースもあります。

要するに、「システムに求められる要件を満たすために、どのようなアーキテクチャが適切か」ということを考えずに、システム構築にかかる費用を算出することはできないのです。その意味で、アーキテクチャ設計はシステム開発の序盤で行われる仕事の中でも重要なものです。アーキテクチャは、システム開発の終盤になってから大きく変更することは難しいことも、序盤のアーキテクチャ設計の重要性を表しています。

アーキテクチャの歴史

データベースに関するアーキテクチャの歴史は、基本的に以下の3段階に分けられます。

  • スタンドアロン(〜1980年代)
  • クライアント/サーバ(1990年代〜2000年代)
  • Web3層(2000年〜現在)

「スタンドアロン(Stand-alone)」

特徴
「スタンドアロン」は、直訳すると「ひとりぼっち」という意味になります。文字通りデータベースの動作するマシン(データベースサーバ)がLANやインターネットなどのネットワークに接続されておらず、孤立して動作する構成になっています。この構成においては、DBMSとアプリケーションのソフトウェアは、ともに同じデータベースサーバ上で動作します。したがって、データベースを使う際は、データベースサーバの設置されている場所まで物理的にやってきて、データベースを使わなければなりません。

欠点

  1. 物理的に半れた場所からのアクセスができない
    ネットワークに繋がっていないため、データベースを利用するためには、データベースサーバの前に来て利用する必要があります。
  2. 複数ユーザによる同時作業ができない
    ネットワークに繋がっていないため、同時にサーバを利用できる人数は一人に限られます。
  3. 可用性が低い
    サーバが1台しかないため、その1台に障害が起きるとサービスが停止してしまうというのも大きな欠点です。
    システムがサービス提供時間において、どの程度障害なくサービスを継続できるかを示す概念を「可用性(Availability)」と呼びますが、スタンドアロンにおいては、サーバが1台しかないため、そのサーバに何らかの障害が発生したら、その時点でサービス停止に直結してしまいます。
  4. 拡張性に乏しい
    スタンドアロンは、性能が悪かった場合の改善手段が非常に乏しい構成です。実際マシンが1台しかないということは、そのマシンそのものの性能を上げる以外に改善手段がありません。しかも、交換のためにはシステムを停止する必要があるため、可用性をますます下げることにも繋がります。

利点

  1. 構成が非常にシンプル
    非常に簡単な作りをしているため、ちょっとした作業や試験を手早く行うことが可能です。
  2. セキュリティが高い
    ネットワークを介して侵入される危険がないため、ユーザが外部から物理的に持ち込まない限り、サーバがウイルスに感染したり、攻撃を受けることはありません。また、データ漏洩のリスクも同様の理由から非常に低いものとなります。

「クライアント/サーバ(C/S)」

特徴
データベースサーバ1台に対して複数のユーザ端末がアクセスするタイプの構成を「クライアント/サーバ」構成といいます。この構成では、システムが「クライアントとサーバ」という2つのレイヤ(層)から構成されるため、「2層構成」とも呼ばれています。データベースサーバでは、「DBMSが動作し、クライアント上では業務アプリケーションが動作する」という分業体制とと見ることもできます。
この構成は、主に企業や組織内に閉じたネットワーク(LAN)の中で利用されました。逆にいうと、インターネットなど外部のネットワークを経由してデータベースサーバにユーザがアクセスすることは、基本的にはありませんでした。
現在ではアーキテクチャの主流ではなくなりましたが、この構成によって、複数ユーザが同時にある程度物理的に離れた場所からでもアクセスできるようになりました。

欠点

  1. インターネットから直接データベースへアクセスすることに対するセキュリティリスク
  2. 不特定多数のユーザが使用するクライアント上でのアプリケーション管理コスト
    インターネットを使ったシステムの利便性の1つは、Webブラウザさえ動作すれば、どのようなクライアント環境からでも動作するという手軽さにあります。しかし、クラウド/サーバ時代のアプリケーションは、個人の利用するPCにアプリケーションをインストールして動作させるものでした。ユーザが特定の企業や組織に限られ、管理対象のPCも少ないならば問題ありませんが、インターネットを介して世界中から不特定多数のユーザが利用するアプリケーションについて言えば、各環境ごとのアプリケーションの作成、バージョン管理やバグ修正版リリースに、非現実的なコストがかかります。

「Web3層」

特徴

Web3層とは、システムを以下の3つのレイヤの組み合わせとして考えるモデルです。

  • Webサーバ層
  • アプリケーション層
  • データベース層

クライアント/サーバ構成と異なるのは、クライアントとデータベース層の間に「Webサーバ層」と「アプリケーション層」が追加されたことです。

Webサーバ
クライアントからのアクセス(HTTPリクエスト)を直接受けつけ、その後の処理を後段のアプリケーション層(アプリケーションサーバ)に渡し、また結果をクライアントに返却する役割を持ちます。

よく利用される製品:「Apache」「IIS (Internet Information Service)」

アプリケーション層
ビジネスロジックを実装したアプリケーションが動作するレイヤです。Webサーバから連携されたリクエストを処理し、必要ならばデータベース層(データベースサーバ)へアクセスを行ってデータを抽出し、それを加工した結果をWebサーバへ返却します。

よく利用される製品:「Tomcat」「WebLogic」「WebSphere」

 

Web3層では、ユーザから直接アクセスを受けるのはWebサーバに限定することで、アプリケーション層とデータベース層のセキュリティを高めています。かつ、アプリケーション層にビジネスロジックを集中させることで、アプリケーション管理のコストを下げています。
このようにして、「データベースに直接アクセスすることによるセキュリティリスク」「クライアント上でアプリケーションを管理するコストの増大」というクラウド/サーバ構成の2つの欠点をクリアした構成となっています。
この構成は現在のWebシステムではほぼ標準と言って良い地位を確立しています。

可用性と拡張性の確保

システムが成長し、ユーザー数やデータ量が増加する中で、可用性と拡張性の確保はますます重要になります。データベースアーキテクチャの設計において、これらの要素を適切に考慮することは、長期的な成功のカギとなります。

可用性(Availability)の確保

可用性とは、システムがユーザーに対して常に利用可能であるかを示す指標です。特にビジネスの現場では、システムがダウンすることで業務がストップし、信頼や収益に大きな影響を与える可能性があります。そのため、可用性を確保するために以下のような工夫が必要です。

  1. 冗長化(Redundancy)
    データベースやサーバを複数台用意し、1台に障害が発生しても自動的に別のサーバが代替できる仕組みを構築します。例えば、クラスタリングやリーダー・フォロワーレプリケーションといった技術を活用することで、ダウンタイムを最小限に抑えられます。また、フェイルオーバーの機能を持つシステムを導入することで、障害が発生した際も迅速に別のサーバに切り替えることが可能です。
  2. バックアップとリカバリ
    定期的なバックアップと、障害発生時に迅速に復旧できる仕組みを整備することで、データの損失を防ぐことができます。特に、重要なデータを扱うシステムにおいては、常に最新のデータが利用可能であることが、ビジネス継続において不可欠です。

拡張性(Scalability)の確保

システムの規模が拡大し、ユーザー数やデータ量が増加した際でも、システムが問題なく動作するかどうかは拡張性によって決まります。拡張性には、大きく分けて垂直スケーリングと水平スケーリングの2つのアプローチがあります。

  1. 垂直スケーリング(Vertical Scaling)
    サーバやデータベースのハードウェアをアップグレードし、1台のサーバの能力を高める方法です。CPUやメモリ、ストレージの性能を向上させることで、処理能力を高めることができます。ただし、1台のマシンに依存するため、物理的な限界があり、コストも高くなる傾向があります。
  2. 水平スケーリング(Horizontal Scaling)
    サーバを追加して処理を分散する方法です。シャーディングやロードバランシングといった技術を活用し、複数台のサーバにデータやリクエストを分散させることで、システム全体の負荷を軽減します。このアプローチは、ユーザー数やデータ量が増えた場合でも、柔軟に対応できるため、現在のクラウドベースのシステムでは広く採用されています。

可用性と拡張性を両立する設計

可用性と拡張性は、しばしば相反する課題として捉えられることがありますが、実際には両者をバランスよく実現することが可能です。例えば、クラウドサービスを利用することで、必要に応じてリソースを迅速に増減させるオートスケーリングや、複数のデータセンターにデータを分散するマルチリージョン展開などが可能となります。これにより、高い可用性を保ちながら、必要なときにシステムをスムーズに拡張することができます。

このように、可用性と拡張性を確保するためのアーキテクチャ設計は、システムの信頼性と成長性を支える基盤です。適切な技術を選択し、慎重に計画することで、長期にわたって安定したサービス提供が可能となります。

まとめ

データベースアーキテクチャの設計は、システムの信頼性や成長性を支える重要な要素です。歴史的にスタンドアロンからクライアント/サーバ、Web3層へと進化してきた中で、それぞれの構成には利点と課題がありました。

現代では、可用性と拡張性の確保が特に重要であり、冗長化やスケーリングといった技術を活用することで、システムの安定運用と将来的な成長に対応できます。これらのバランスを取りながら設計することが、長期的な成功の鍵となります。

関連記事

カテゴリー:

ブログ

情シス求人

  1. チームメンバーで作字やってみた#1

ページ上部へ戻る