AWS認定など、IT関連の勉強をしている際には、
「耐久性は99.999999999%、可用性は99.99%の高い堅牢性を誇る」
だとか、
「耐障害性を向上させるため、冗長性の確保が必要」
だとか、
「◯◯性」という用語がたくさん出てきます。
信頼性、可用性、耐久性、耐障害性、冗長性、堅牢性、保守性、保全性、安全性、結果整合性、読み取り一貫性などエトセトラエトセトラ・・・
どれもないよりはある方が、低いよりは高い方が、なんとなく安心で高性能なのはわかりますが、具体的にはどう違うのか、初学者の方はなかなか迷うのではないでしょうか。
これらをある程度使い分けないことには、正しい理解は出来ませんし、資格試験でも業務でも支障をきたすこと間違いありません。
しかも、あまり違いをはっきり解説してくれているサイトが見つかりませんでした。
(信頼性と可用性、可用性と耐久性など、2者を比較解説してくれるサイトはちらほら見つかるのですが・・・)
そこで、これらの違いを表に整理しました。
<比較表>システムの「◯◯性」一覧(+それぞれの違い)
出来ればパソコンで御覧ください。
用語 | 定義 | 単位 | 違い(解釈) |
1.信頼性(Reliability) = 平均故障間隔 = Mean Time Between Failures | 「障害の発生のしにくさ」のこと。具体的には、システムやサービスが使えなくなる頻度やその間隔を示す指標。 | 時間 or % | システムの連続稼働時間が長いほど優秀。 (故障した際にどれだけ復旧に時間がかかるかは問わない) |
2.可用性(Availability) = 稼働率(稼働時間) | 「システムやサービスが利用できる時間の割合」のこと。 使いたい時に使える確率。 | % | システムの停止時間が少ないほど優秀 (あくまで稼働時間と停止時間の割合なので、頻繁に壊れても瞬く間に復旧するなら高可用性と言える) |
3.耐久性・永続性(Durability) = データ持続性 | データの平均年間予測存続率。 1からAFR(年間故障率)を引いた確率。 | % /年 | ストレージやDBの文脈で使用する、データを失わない確率。 保全性・完全性(Integrity)に近いが、Integrityとは異なり、耐久性・永続性は数値で表現可能。 |
4.耐障害性 = フォールトトレランス(fault tolerance) | 1.どれだけ障害に備えてあるか 2.障害耐性を高める仕組み 3.障害発生時に機能制限なしで動かし続けるための仕組み AWSでは3の考え方。すなわち「たとえ障害が発生したとしてもサービスレベルアグリーメント(SLA)を守り続けられる構成」のこと。 | 概念のみ | 問題が起こったとしても、自動で復旧し、100%のサービスを維持する仕組みのこと。 問題が起こる前提(= Design for Failer)で考えるため、単一障害点(= SPOF)を排除する。復旧後に少しでも使いにくくなるならそれは耐障害性があるとは言えない。 |
5.障害回避 = フォールトアボイダンス(fault avoidance) | 問題を発生させないための備え。 具体的に何を指すかは、結構あいまい。 | 概念のみ | そもそも、問題が発生しないための仕組み。 Design for Failerが前提のAWSでは出てこない概念。 |
6.冗長性(Redundancy) = 多重性 | コンピューターやシステムに障害が発生した場合に備えて、冗長な(=無駄な)予備装置を普段から配置、運用すること。 「普段は無駄だけどいざという時に活躍する」そんな奴がいれば、それは冗長性があると言える。 | 概念のみ | 単にバックアップと言った場合は、自動的に短時間で復旧する(切り替わる)場合のみ、冗長性があると言える。 もちろん、冗長性があれば、信頼性や可用性の向上に寄与する(ただし、同じ意味ではない)。耐障害性の必要条件となることも多い(これも、同じ意味ではない)。 |
7.堅牢性 | 堅いこと、丈夫なことなどを意味する表現。ハードウェアなどが丈夫で壊れにくい設計になっていることや、予期しないエラーや障害やセキュリティ上のリスクなどに柔軟に対応できること、などを幅広く指す。 | 概念のみ | 丈夫で壊れにくいという、幅広い、曖昧な概念。 信頼性や可用性、耐障害性が総じて高いことを表現している。 |
8.保守性(Serviceability) = 平均修理時間 | ”障害復旧(メンテナンス)の容易さの度合い”のこと | 分 | 一般的に保守性が高い方が可用性を高く保てる。違いは、保守性はシステム構成やプログラムなど中身に対して、可用性はシステム全体に対して使う(結果論)のイメージ。 |
9.保全性・完全性(Integrity) | ”情報が矛盾を起こさずに一貫性を保てる度合い”のこと | 概念のみ | 耐久性・永続性(Durability)と異なり、概念のみ。 |
10. 安全性・機密性(Security) | ”情報の外部流出の起きにくさの度合い”のこと | 概念のみ | ー |
11. 結果整合性 = 結果整合性モデル = 結果整合性のある読み込み | 「更新はそのうち全体に反映される」 データの保存や変更の直後に別のプロセスからアクセスを試みると、保存前や変更前の状態に見える可能性がある。 | 有無 | データの更新の際にDBをロックすることによってデータの一貫性(Consistency)を担保するが、その間他の人はDBにアクセス出来ないため、可用性(Availability)を犠牲にすることになる。 |
12. 強い一貫性(Strong Consistency) = 強い整合性のある読み込み = 強力な整合性のある読み込み = 強整合性 = 読み取り一貫性(Consistent Readオプション) | あるデータの追加や更新が行われれば、その直後から必ず追加後や更新後の状態が取得できるようになる。 更新が反映された最新データの応答を返す。 ただし、ネットワークの遅延または停止があった場合には利用できなくなる可能性あり。 | 有無 | データの更新時DBがロックされることはないため可用性とスケーラビリティを維持できるが、その代わりノード間でのデータの一貫性はデータ複製にかかる時間に依存することになるため、必ずしも担保されない。 |
13. 再現性 | 別のものでも、同手法で同じ(近い)結果が得られること。 x, y に対し、f(x) = f(y) 実験の概念で並列的 | 有無 | エラーが出る場合などトラブル発生時、よく使われる。再現性が低い、つまり同じ条件にしたつもりでも出たり出なかったりするエラーは原因の特定が難しく、解決されにくい。 |
14. 冪等性 (べきとうせい) | ある操作の結果に対し、同手法を重ねて行っても同じ結果が得られること。 f(x) = y に対し、f(y) = y 数学の概念で直列的 | 有無 | 構成管理ツールなど、冪等性が確保されていることが望ましい。現状がどうであれ「その状態になる」ことを保証する、ということ。 |
- 似たような表現は、まとめて「用語」(最左列)に記してあります。同じ概念で表現が異なるだけとご理解ください。
- 参考文献から色々引っ張ってきて加工しております。文献そのままの表現が一番わかりやすいと判断した場合はコピペのものもありますがどうか許してください。
- 正確性にかける表現がございます。「違い」がわかることを重視しているため、その目的を果たせる範囲であれば、その点もご容赦いただけると助かります。
- 耐久性・永続性(Durability)と保全性・完全性(Integrity)の違いがあまり自信ないです。どなたかご意見をお持ちの方、ご教授いただけると嬉しいです。
おそらく、はっきりとした違いが議論されていない用語は、きっと同じ文脈で出てくることがないのだと推察しています。同じ土俵に上がってくることがないのに、あえて同じ土俵で比べるからよくわからないことになっているのかもしれません。だけど、だったらなおさら「明確な違い」があるはずで、説明できるはずですよね? 今回、それにチャレンジしてみた、という形です。
例えばデータベースとストレージ、どちらもデータを保存するものですが、ズバッと違いを説明できるでしょうか? どちらも慣れ親しんでいる方にとっては、「いや、そもそも役割が違うじゃん、比べるもんじゃないよ」と思われるかもしれませんが、学生さんやお子さんに聞かれたらなんて答えますか?興味のある方はご参考までに。
今回も、そんなチャレンジでした。
<追記>冪等性と再現性の違い
2021/8/22 表に追記しました。
信頼性・可用性・保守性などの「◯◯性」をまとめた表現
この◯◯性をまとめた表現もあるみたいです。
RAS/RASISとは:信頼性・可用性・保守性(+保全性・安全性)
RASは
- Reliability(信頼性:壊れにくさ)」
- Availability(可用性:使用可能状態の維持の度合い)
- Serviceability(保守性:維持管理のしやすさ)
RASISは
- RAS +
- Integrity(保全性・完全性:データがおかしくなっていないこと)
- Security(安全性・機密性:使って良い人以外が使えないこと)
だそうです。表でいうところの1, 2, 8, 9, 10で、コンピューターシステムやソフトウェアの品質をまとめた表現ですね。
8, 9, 10はわかりやすいですが、1, 2(信頼性と可用性)の違いが知らない人にとっては「?」となるポイントですね。信頼性と可用性の違いについては既に多くの記事で述べられているので、足りない方は追加でGoogle先生に聞いてみてください。
ACIDとは:不可分性・一貫性・独立性・永続性
- Atomicity (不可分性・原子性)
- Consistency (一貫性)
- Isolation (独立性)
- Durability (永続性)
エラーや停止が発生した場合でもデータの有効性を保証するためのデータベーストランザクションに必要な品質。一般に、リレーショナルデータベースに必要な要素です。
「リレーショナルデータベース」って何?という方はこちらでわかりやすく解説しています。
「トランザクション」って何?な方はこちら↓
ACIDについては、まだConsistencyとDurabilityしか上記の表に入れていません。違いが重要な場面に遭遇したら、残りの要素も追加したいと思います。
信頼性・可用性・耐障害性・耐久性などの参考文献
どのサイトも非常に参考になりました。この場をお借りしてお礼申し上げます。ありがとうございました。
信頼性と可用性は何が違う?:https://active.nikkeibp.co.jp/atclact/active/17/030800250/030800007/
信頼性と可用性の違い:https://bongineer.net/entry/rasis/
冗長化と可用性:https://www.networld.co.jp/sp/learn_first/storage/p08_09.html
クラウドの耐久性とは:https://www.joho-manage.com/article/047/
AWSの高可用性と耐障害性をまとめてみる:https://qiita.com/hz1_d/items/ca24e1d131bf475e23b1
「高速・堅牢・低コスト」サーバーの悩みは「S3」で解決!!:https://www.oro.com/ja/technology/004/
weblio辞書「堅牢性」:https://www.weblio.jp/content/%E5%A0%85%E7%89%A2%E6%80%A7
wikipedia「ACID」:https://nipponkaigi.net/wiki/ACID
「分かりそう」で「分からない」でも「わかった」気になれるIT用語辞典:https://wa3.i-3-i.info/
結果整合性について:https://izumisy.work/entry/2018/06/11/224719
システムの信頼性、可用性、保守性、耐久性、耐障害性、冗長性などの違いまとめ
解釈を交え、システムの「◯◯性」の違いを解説しました。少しでも参考になりましたら幸いです。
一応、各用語に定義はあるものの、状況によっては同じ意味になったり、なんなら一般ブログレベルなら誤用の可能性もあるので、最後は文脈判断、というのが、悲しいかな、本記事のまとめになります。
言葉というのは、時代と共に変わってゆくものですし、正確性にかける表現があるかもしれません。そんな表現を発見した方、コメントいただけたら嬉しいです。
この記事をご覧の方の中には、今プログラミングを勉強されていて、プログラマーを目指している方も多いかもしれません。私も未経験からプログラマーになりました。その経験から、プログラマーになる方法、目指す意義などまとめておりますので、気になる方はどうぞ。(もちろん無料です)
「AWSの資格に興味があるのだけれども、IT業界の経験が浅すぎて何から手をつけて良いのかわからない・・・」そんな方は、この記事を参考にしてみてください。私も同じ状況だったので、役立つ情報を提供できるかもしれません。
基本的なIT用語をざっと確認したい方は、こういった書籍を1冊買っておくと安心です。
この記事が少しでも誰かの役に立てたのなら嬉しいです!
最後まで読んでくださってありがとうございました!
画像提供:Gerd AltmannによるPixabayからの画像
コメント