Cluex Developersブログ

株式会社Cluexでは、子育てをするママのためのメディア - mamanoko(ままのこ)をRuby on Railsで運営しております。

5分でたどる!インフラアーキテクチャの歴史

f:id:cluex-developers:20170705174545j:plain designed by Creativeart - Freepik.com

こんにちは。エンジニアの内山です。 少しずつ暑くなってきましたね。季節の変わり目は体調を崩しやすいので、食事や運動により気を使っていきたいと思う今日この頃です。

今回はインフラのことについて書きます。私自身は普段Ruby on Railsを使って開発を行うwebエンジニアなのですが、以前インフラエンジニアとして仕事をしていた経験があります。日々プログラミングを行なっているとなかなかサーバやネットワークのアーキテクチャについては意識しないのですが、そういったインフラの変遷を知っておくこともweb開発の役に立つのではないかと考え、今回おさらいしてみようというわけです。

インフラとは何か

そもそもインフラとはなんでしょう。Wikipediaを調べてみましょう。 「インフラエンジニア」の項が参考になりそうです。

情報システムの構成要素には様々な技術が使用されているが、H/W、仮想化、OS、ネッ トワーク、ミドルウェア、セキュリティといった基盤となる領域を担当するのがインフラ エンジニアである。(中略)IaaS等のクラウドコンピューティングやデータセンター、システム運用も主要な職務範囲である。アプリケーションを含んだ全体最適化等に取り組むインフラエンジニアはITアーキテクトと呼ばれる。

引用元:インフラエンジニア - Wikipedia

つまりインフラとはITを使って仕事をしたり、サービスを受けたり提供したりするときに、その土台となる設備や情報機器のことですね。より具体的には、サーバやネットワーク機器を想像すると良さそうです。また、要件に応じたインフラの構成をアーキテクチャというようです。

集約型から分割型へ

システムの黎明期は、大型コンピュータ(ホスト、メインフレーム)で全ての業務を行う形態でした。いろんなアプリが一つのコンピュータに載っているイメージです。こういった構成を「集約型」と呼びます。 確かにコンピュータは1台ですから管理は簡単そうです。しかしあらゆる業務アプリが稼働しているわけですから、その1台が故障するだけで業務が止まってしまいます。故障しないように部品を多重化したりメンテナンスしたりするわけですが、コストがかさみます。 f:id:cluex-developers:20170705174950p:plain

集約型の特徴
 メリット
  - 構成がシンプルで管理しやすい。
 デメリット
  - 大型コンピュータの導入コストが高い。
  - 1台故障したときの影響範囲が大きい。
  - 停止しないように部品を多重化するなど、維持コストが高い。
  - 拡張性に限界がある。

そこで、各機能を複数の小型サーバに分けて一つのシステムを構築するという発想が生まれます。これを「分割型」と呼びます。安いコンピュータ(サーバ)を何台か調達して、それぞれのサーバで業務アプリを稼働させるのです。これなら1台壊れても全ての業務が止まってしまうことは避けられます。とはいえ、一台のサーバが故障すると、そのサーバで動いていたDBや他の機能まで使えなくなってしまうので、他システムとの連携などに影響が出てしまいます。 f:id:cluex-developers:20170705175006p:plain

分割型の特徴
 メリット
  - 小型サーバを使用して安価にシステムを構築できる。
  - 拡張性が高い。
 デメリット
  - 台数が増え、管理が複雑になる。
  - サーバが壊れたときの影響範囲はまだ大きい。

垂直分割型へ

上記の分割型アーキテクチャでは、サーバ故障時の影響範囲が問題になっていました。そこで、webシステムではおなじみの3階層型が登場します。すなわち、webサーバ、APサーバ、DBサーバの構造です。システムを分割し、サーバごとに単機能を持たせてやるという発想です。これならwebサーバが壊れたとしても他のシステムにDBのデータを連携でき、影響を抑えることができます。 f:id:cluex-developers:20170705175016p:plain

垂直分割型の特徴
 メリット
  - 特定のサーバへの負荷集中が改善される。
  - 特定のサーバで発生した障害が他のサーバに影響しづらい。
 デメリット
  - サーバの台数が増え、管理は依然として複雑である。

水平分割型へ

システムを3階層型で構成し、故障時の影響範囲を抑えることができました。垂直分割では機能ごとにサーバを分割しましたが、さらにユーザが増えてくると、今度は負荷を分散し信頼性を確保するために同じ機能のサーバを拡張していく必要が出てきます。 そこで最後に水平分割型を紹介します。同じ用途のサーバを増やすことで信頼性、性能を向上させます。これにより1台の故障が全体に与える影響がさらに下がります。また、こういったアーキテクチャでは多くの場合ロードバランサなどを利用して負荷を分散します。 f:id:cluex-developers:20170705175026p:plain

水平分割型の特徴
 メリット
  - 信頼性が向上する。
 デメリット
  - サーバの台数が増え、管理は以前として複雑である。

さらに進化はつづく・・・

インフラの変遷について駆け足で見てきましたがいかがでしょうか。インフラが進化していく過程は、さまざまなメリットを獲得したり課題を克服していく歴史だということがよくわかると思います。 上記の説明で、台数が増えて管理が煩雑になったサーバですが、後に仮想化技術やクラウド技術が登場することで大きく改善されていくことになります。

かつては多くの企業で物理サーバをオンプレミスで構築することが常識でしたが、クラウドの登場により、高い信頼性を確保しつつ、コストの面ではより安価に、調達リードタイムの面ではより迅速に(クリックするだけで!)構築できるのが今日のインフラです。 提供するサービスに応じて、最適なインフラを構築しましょう。 今後もいったいどのような革命的なインフラ技術が登場するのか楽しみですね。

(参考図書:山崎泰史他『絵で見てわかるITインフラのしくみ』、翔泳社

We’re hiring!!

Cluexではエンジニアサイド、ビジネスサイド共にメンバーを募集しています!
お気軽にご連絡下さいませ!エンジニアの方、ぜひ情報交換しましょう! www.wantedly.com www.wantedly.com