ソフトウェア設計の非機能的特徴 – システム設計 03

システム設計-システム設計 03-ソフトウェア設計の非機能機能-hogantech-hoganblab

序文

最新のソフトウェア システムの非機能特性には、可用性 (Availability)、信頼性 (Reliability)、拡張性 (Scalability)、保守性 (Maintainability)、耐障害性 (Fault Tolerance) が含まれます。これらの特性は、ソフトウェア システムのパフォーマンスと効率にも影響を与えます。ユーザーエクスペリエンスに直接影響します。この記事では、上記5つの特徴についても詳しく解説していきます。

機能しない機能

システム設計において、システム設計計画の要件は、機能要件(Functional Requirement)と非機能要件(Non Functional Requirement)の 2 種類に大別できます。

  • ユーザーのログイン、動画のアップロード、動画の視聴などの機能を含む動画視聴プラットフォームの設計などの機能要件。
  • 非機能要件 (数百万のユーザーのトラフィックを処理できるビデオ視聴プラットフォームの設計など)。

ここで、機能要件と非機能要件の両方が非常に重要であることがわかるはずです。そのため、この記事では最初に非機能要件について説明します。

可用性

可用性 ユーザーがアクセスでき、正常に動作するシステム サービスまたはシステム機器全体の割合を指します。たとえば、サービスの可用性が 100% の場合、システムのサービスがいつでも正常に動作し、応答できることを意味します。つまり、システムが壊れることはありません。

ユーザビリティを測定する方法

可用性は、A で表される数学的な比率として表すことができ、値が高いほど優れています。これを次の数式で表します。

A (パーセンテージ) = (合計時間 – サービスのダウンタイム) / 合計時間 * 100%

可用性 年間のダウンタイム 毎月のダウンタイム 毎週のダウンタイム
90% (a9) 36.5日 72時間 16.8時間
99%(9が2つ) 3.65日 7.20時間 1.68時間
99.9% (9 が 3 つ) 8.76時間 43.8分 10.1分
99.99% (9 が 4 つ) 52.56分 4.32分 1.01分
99.999% (9 が 5 つ) 5.26分 25.9秒 6.05秒
99.9999% (9 が 6 つ) 31.5秒 2.59秒 0.605秒
99.99999% (セブンナイン) 3.15秒 0.259秒 0.0605秒

上の表からわかるように、可用性の割合を使用してシステムの安定性を判断できます。一般に、トラフィックが多いシステムでは、ユーザーに影響を与えないよう、可用性の割合を 100% に近づけることが望まれます。

ユーザビリティ要因

可用性に影響を与える可能性のあるいくつかの要因を次に示します。

  • ハードウェア障害
  • ソフトウェアエラー
  • ネットワークの問題
  • ヒューマンエラー
  • 自然災害

システム サービス会社は通常、可用性を向上させるために次のようなさまざまな措置を講じます。

  • 定期的なメンテナンスとテストを実行する
  • 災害復旧計画を実施する

信頼性

信頼性とは、サービスが指定された時間内にその機能を実行する速度であり、信頼性メトリクスは、さまざまな動作条件下でのシステム サービスのパフォーマンスを測定します。

信頼性を測定するために、「平均故障間隔 (MTBF)」と「平均修復時間 (MTTR)」がよく使用されます。

MTBF = 障害の合計数 / 経過時間の合計 – 障害の合計

MTTR = 総修理時間 / 総メンテナンス時間

(より高いMTBF値とより低いMTTR値を追求します。)

信頼性と可用性

信頼性と可用性は非常によく似ていますが、実際には 2 つの異なる概念です。信頼性 (Reliability) と可用性 (Availability) は、システム サービスが合意されたサービス レベル目標 (SLO) を満たしているかどうかを測定する 2 つの重要な指標です。可用性は時間のロスに重点を置き、信頼性は障害の頻度に重点を置きます。可用性と信頼性はどちらも不可欠です。これら 2 つの指標によってシステムの安定性を判断できます。

スケーラビリティ

スケーラビリティとは、パフォーマンスに影響を与えることなく、増加するワークロードを処理できるシステムの能力を指します。たとえば、ビデオ プラットフォームは、増加するユーザー数とビデオのダウンロードと再生を処理できなければなりません。

ワークロードには、次のようなさまざまなタイプがあります。

  • リクエストのワークロード: これは、システムが処理するリクエストの数です。
  • データ/ストレージ ワークロード: これは、システムによって保存されるデータの量です。

寸法

スケーラビリティにはさまざまな次元があります。

  • サイズの拡張性: スケーラビリティとは、より多くのユーザーとデータをシステムに追加できることを意味します。
  • 管理上のスケーラビリティ: 管理のスケーラビリティとは、増加するユーザーが単一の分散システムを簡単に共有できる能力を指します。
  • 地理的なスケーラビリティ: 地理的なスケーラビリティとは、パフォーマンスの制約にもかかわらず、プログラムが他の地域にどれだけ簡単にサービスを提供できるかを指します。率直に言うと、このシステムはパフォーマンスに大きな影響を与えることなく、さまざまな国やタイムゾーンにまたがって使用できます。

異なるスケーラビリティ

私たちは通常、スケーラビリティについて言及しますが、これは 2 つのタイプに分類できます。

垂直スケーリング / スケールアップ

垂直拡張とは、拡張用に CPU や RAM を追加するなど、既存のサーバー機器をアップグレードすることを指します。垂直拡張によりサーバーのメモリ容量とパフォーマンスを拡張できますが、コンピュータのアップグレードには依然として上限があり、機器を無限にアップグレードする方法はなく、垂直拡張のコストは通常非常に高くなります。

水平スケーリング / スケールアウト

水平拡張とは、ネットワーク接続によるサーバーの数の増加を指します。端的に言えば、システムを拡張する必要がある場合には、サーバーを増設し続け、ネットワーク経由で接続・送信を行うため、コストが比較的安いというメリットがあります。

保守性

ソフトウェア システムの構築に加えて、システムの保守も必要です。この保守性とは、システムがエラーを修正し、新しい機能を追加し、システム プラットフォームを最新の状態に保ち、システムの正常な動作を維持するためにスムーズなシステム動作を保証することを意味します。

保守性の概念は、さらに次の 3 つの基本的な側面に分類できます。

  1. 運用性(Operability):システムが通常の状況下でスムーズに動作し、障害が発生した場合に正常な状態に復旧できることを保証する難しさを指します。
  2. 明快さ: コードの複雑さを指します。システム内のコードがより簡潔で明確であればあるほど、理解と保守が容易になり、その逆も同様です。
  3. 変更可能性: 新しい機能や変更された機能を簡単に統合できるシステムの能力を指します。

保守性の測り方(保守性)

保守性とは、サービスが障害発生後、指定された期間内に機能を回復できる確率です。また、サービスを通常の動作状態にどれだけ簡単かつ迅速に復元できるかを測定する保守性メトリクスを使用することもできます。

たとえば、30 分以内のシステム要素の保守性 95% を考えてみましょう。この場合、システム コンポーネントが 30 分以内に完全に正常な状態に戻る確率は 0.95 です。 M の尺度として平均修復時間 (MTTR) を使用します。

MTTR = 総修理時間 / 総メンテナンス時間

つまり、MTTR は、障害が発生したコンポーネントを修復して復元するのにかかる平均時間です。私たちの目標は、MTTR の値を減少させることです。

フォールトトレランス

耐障害性とは何ですか?

大規模な現実世界のアプリケーションには、通常、数十億のユーザーからのリクエストを受け入れ、大量のデータを保存する数百のサーバーとデータベースがあります。これらのアプリケーションには、データのセキュリティを確保し、単一障害点を回避することで負荷の高いプログラムを再実行する必要性を回避するためのメカニズムも必要です。

フォールト トレランスとは、1 つ以上のシステム コンポーネントに障害が発生した場合でも、システムが実行を継続できる能力を指します。ここで、システム コンポーネントはソフトウェアまたはハードウェアの場合がありますが、実際には、完全にフォールト トレラントなソフトウェア システムを設計することは非常に困難です。

フォールトトレランス技術

ハードウェアまたはソフトウェアで障害が発生すると、最終的にはデータに影響を及ぼします。フォールト トレランスはさまざまな技術や方法で実現できますが、それはやはりシステムの構造に依存します。

  • レプリケーション: これは、最も広く使用されているフォールト トレランス技術の 1 つです。この技術は特にデータベースでも使用されており、システム内のプライベート サーバーに障害が発生した場合、そのようなシステムに別の障害が発生した場合に、そのサーバーとデータが自動的に変換されます。による。
  • チェックポイント: チェックポイントは、将来エラーやサービス障害が発生したときに迅速な検査を容易にするために、システム状態をデータベースにバックアップする方法です。分散システムに障害が発生した場合、以前のチェックポイントから現在のデータを取得して、エンジニアが修復できるようにすることができます。

結語

この記事では、システムの可用性 (Availability)、信頼性 (Reliability)、スケーラビリティ (Scalability)、保守性 (Maintainability)、フォールト トレランス (Fault Tolerance) などの重要な概念について説明します。

  1. 可用性(可用性)ユーザーに対するシステムの可用性を表します
  2. 信頼性(信頼性)システム障害の可能性を表します
  3. スケーラビリティ(拡張性)ワークロードを処理するシステムの能力を表します
  4. 保守性(メンテナンス性)システムのメンテナンスのしやすさを表します
  5. 耐障害性(フォールトトレランス)システムの障害に対する耐性を表します。

これらの概念を理解し、適切な手法を採用することは、開発者がより信頼性が高く、効率的で、使いやすいシステムを構築するのに役立ちます。

システムの可用性、信頼性、拡張性、保守性、耐障害性を向上させるためのいくつかの提案を以下に示します。

  • 冗長設計を採用: 複数のシステム要素またはノードを使用して、システムの耐障害性を向上させます。
  • 定期的なメンテナンスを実行します。 障害を防ぐために、システムを定期的にチェックして更新してください。
  • スケーラブルなアーキテクチャを使用します。 増大するユーザーのニーズやデータ量に合わせて簡単に拡張できるシステムを設計します。
  • 実証済みのテクノロジーを使用します。 実証済みの信頼できる技術を使用して、システムの安定性を向上させます。
  • 徹底的なテストの場合: 導入する前にシステムを徹底的にテストして、潜在的な問題を特定して修正してください。
ja日本語