こんにちは。
エス・エー・エス株式会社の海田です。
2月も下旬になり、だいぶ日が伸びてきました。
少し前だと17時は真っ暗だったのに、今は結構明るいですね。
これから少しずつ明るく暖かくなってきて、同時に花粉もやってきて・・
そんな春になっていきますが、皆様いかがお過ごしでしょうか?
さて、本日は「冗長化」という言葉について、いろいろと書いてみようと思います。
1.冗長化(じょうちょうか)とは?
冗長化とは、ITシステムを設計・構築する場合、特に非機能要件として頻出する用語なので、
まあ覚えておいて損はしない言葉かと思います。
もし知らなかったとしても本記事を流し読みするだけで概要は理解できると思いますので安心してください。
「冗長(じょうちょう)」とは、日常生活では
「話がまわりくどい」「おなじことを何度も伝える」「無駄」
・・みたいな
意味に使われることが多いです。どちらかというとネガティブな言い回しに感じます。
ITの世界では「冗長」に「化」をつけて「冗長化」といいます。
それではITでいう「冗長化」とはどんな意味なのでしょうか?
日常生活の言葉で一番近い意味合いとしては「無駄」ですかね。
つまり、余計なもの、本来必須なものではないということです。
「化」という言葉の通り、「システムを(あえて)無駄な状態と化する」という意味です。
2.冗長化の具体例その①(ストレージの冗長化)
冗長化の具体例を挙げてみます。
通常、データを格納・保存するにはストレージと呼ばれるハードウェアが必要です。
一般的にはSSDとかHDDとか、SDカードやUSBメモリもそうですね。
ストレージにはそれぞれ決まった容量があるので、
例えば10GBの容量のある動画を保存したいと思ったら、
10GB以上のサイズのストレージを用意すれば(例えば100GBとか)、その1本で事足ります。
このストレージを「冗長化」するということは、簡単に言うとストレージを2本用意するということです。
そして、本来のストレージにデータを書き込むのとほぼ同時に、
もう片方のストレージにも同じデータを書き込みます。
この仕組みをRAID(正確にはRAID1)といいます。
余談ですが、最近RAIDという言葉をあまり聞かなくなりましたね・・
ここで考えていただきたいのが、この
「もう一つのストレージに同じデータを保存すること」は、はたして「無駄」なのかどうか・・?
ということですね。ちょっと考えてみてください。
答えは最後にします(笑)
3.冗長化の具体例その②(ネットワークの冗長化)
インターネットが普及したこの世界では、
私たちは自分のデバイスから各WEBサービスにアクセスし、
検索したり、
予約したり、
ゲームをしたり、
モノを買ったりすることができます。
これは、IPアドレスというITの世界での住所によって互いを識別し、
それらを互いに繋いだ「ネットワーク」というデータの道路があるおかげです。
このデータの道路をもう一本用意することがネットワークの冗長化になります。
ネットワークの冗長化をする場合、
「仮想IPアドレス(代表IPアドレスともいう)」という考え方があります。
実際のIPアドレスはそれぞれの物理機器(ネットワークカード)に確かに存在しますが、
外側に見せるのは論理的な仮想IPアドレスです。
仮想IPアドレスは基本的に不変であり、
利用者側から見れば、その裏にある実IPアドレスは見えず、
常に同じ仮想IPアドレスをめがけて通信を行います。
仮想IPアドレスは配下のそれぞれの実IPアドレスと紐つく動きをします。
その時によって、紐つく実IPアドレスが変わります。
物理機器同士はお互いを定期的に監視しあっていて、
指定した間隔、指定した回数以内に応答がなければ相手が機能していないとみなし、
仮想IPを自分の物理IPと紐付けるような動きをします。
このお互いの確認のことを生死確認(ハートビート)といいます。
ハートビート・・つまりお互いの心臓の鼓動の確認ですね。
初めてこの言葉を知ったとき、いい名前を付けたなあ・・と感心しました。
ストレージの時の繰り返しになりますが、
本来は道路一つあれば問題ないネットワーク経路をもう一本用意することは「無駄」なのかどうか・・?
こちらも考えてみてください。
4.冗長化の具体例その③(サーバの冗長化)
ネットワークのその先にある、サーバについても冗長化という考え方はもちろんあります。
サーバを構成するCPU,メモリ,MB,電源などを1セットとして、それらを複数台持ちます。
それを「クラスタ(分散基盤)」という論理グループとして定義し、
クラスタ内の主サーバを決めたり、クラスタ全体に処理を振り分けたりします。
主サーバのことをプライマリサーバ、それ以外のサーバをセカンダリサーバと言ったりもします。
処理を振り分ける場合は、ロードバランシングといいます。
クラスタは3台以上で構成することもあり、
その場合は、各サーバ間で②のようなハートビート通信を行います。
ネットワークと違いサーバの場合は、
サーバ自身が生きていてネットワークが死んでいるという可能性もありますので、
自分以外の相手にハートビートを送って反応がないからと言って、
自分が正常であるとは限りません。
そのため、多数決の原理で本当に機能していないおかしなサーバはどれか?
を検討する会議が行われたりします。
(初めてこの仕組みを知ったときはちょっと感動しました)
例えばサーバA、サーバB、サーバCがあったとして、
以下のようなハートビート通信結果があったとします。
- サーバA:僕は正常だ。「サーバB」「サーバC」へハートビート確認をしたが応答がなかった。
- サーバB:僕は正常だ。「サーバA」は応答がなかった。「サーバC」は応答があった。
- サーバC:僕は正常だ。「サーバA」は応答がなかった。「サーバB」は応答があった。
この時、どのサーバが正常で、どのサーバが正常でないかを考えてみてください。
【まとめ】
冗長化というのは「無駄なものをあえて用意しておく」ということです。
そして、冗長化のいろんなパターンを紹介してきました。
冗長化とよく似た言葉として「バックアップ」という言葉あります。
しかしバックアップとは、ある時点(静止点)でのコピーなので、すぐに使うことはできません。
運用保守をやったことがある方ならご理解いただけると思いますが、
バックアップした資産を再び利用するには、必ず「リストア」という作業が必要となります。
それに対して冗長化とは、主がダメだったらすぐに利用できるという意味で用いていることが多いかと思います。
「冗長」とは日常世界ではネガティブな言い回しですが、
ITの世界で「冗長化」について考えることは、
そのシステムの可用性(システムがどれだけ休まずに動き続けられるか)に大きく影響するので、
とても重要なことです。
しかしその一方で、「なんでもかんでも冗長化すればよい!」というわけではない
こともわかっていただけるかと思います。
冗長化は大前提として、
「本来なくても機能するもの、無駄なもの」であり、
もしもの時に備えてたくさん用意すればするほどコストがかかります。
つまり、「携わるプロジェクトの可用性の要件がどれくらいなのか?」
を知ることが最も大切なことだと思います。
というわけで途中に出てきた問いの答えはもうわかったかと思います。
(答)無駄なのかどうかは、プロジェクトの可用性要件による
・・ということですね!
読んでくださってありがとうございました。
人間も、冗長化できたらいいですね・・。