まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

『大規模サービス技術入門』の終盤をまとめる

 

こんばんは、まさです。

 

今日『大規模サービス技術入門』の終盤(第11回〜第15回)を終えたので、それについてまとめていこうかと思っています。 

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

[Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)

 

 

 

後半は難しかったです。チンプンカンプンな言葉が出まくり。よって、言葉だけざっくりとまとめてみてはわからないところを補足説明していくという形をとっていきたいと思います。

 

 

二種類の情報システム

「情報システム」というと、世の中的には「エンタープライズ」という領域が圧倒的に大きいです。一方、「Webサービス」はここ20年くらいで立ち上がってきたものです。

 

エンタープライズ」という領域では、システムが落ちると人のお金とか命などに大きく関わる、リアルビジネスと連携しています。

 

よって

 

トラフィック:それなり
成長度合い:そこそこ
信頼性:死守
トランザクション:多様

 

という風に言えます。

 

一方、Webサービス

 

トラフィック:たくさん

成長度合い:爆発的

信頼性:99%

トランザクション:それほど使わず

 

という風に分類できます。ポイントは、Webサービスでは信頼性を死守する代わりにコストを下げたり、少ないサーバ数でトラフィックがたくさん出たりするようにする設計にすることです。

 

ここで少なくともいわゆる「エンタープライズ」と「Webサービス」によって求められることが違うこと、そして設計の仕方によって意図的に対策できることがわかりました。

 

Webサービスのインフラで重視したい3つのポイントとして本書では

 

  • 低コスト、高効率重要
  • 設計重要
  • 開発スピード重要

 

を挙げてます。信頼性100%を目指さず、スケーラビリティ、応答性を意識し、機動的にリソースを提供すべきとしています。

 

 

負荷の把握

負荷を見る際には、ロードアベレージから見ます。

 

ロードアベレージとは、起動している多数のプロセスがいつでも動ける状態なのにまだ実際CPUが割り当てられてなくて、待ち状態にあるプロセス数の平均値です。

 

はてなではロードアベレージがCPUコア数以下かその半分以下であれば良いとしているそうです。

 

負荷を測るための項目は、本書によると、

 

メモリの使われ方についてはユーザー空間が消費されているメモリや共有されているメモリや共有されているメモリ、あとはカーネルが使っているバッファのメモリなどがあります。

 

だそうな。さて、ユーザー空間とか共有メモリとかカーネルが使っているバッファのメモリとか難しい言葉が出てきたので、整理していきたいと思います。

 

まずはユーザー空間について。

 

ユーザー空間とは、アプリケーション(OS上で動作するソフトウェア)が使用するメモリ領域のことであり、カーネル空間とは、カーネルが使用するメモリ領域のことを指します。つまり両者の違いは使用するメモリ領域の違いと言えます。

ユーザー空間とカーネル空間 | Linuxデバイスドライバ開発入門

 

ほうほう。つまり「ユーザー空間」という言葉はカーネル(OSの中核となるソフトウェアのことらしい)が利用していないメモリ領域のことなんですな。

 

共有メモリには以下のサイトが詳しいですが、要するに「基本的にメモリはあるプログラムが占有するものだけど、共有メモリでは複数のプログラムがメモリを共有できる」みたいな感じだそうな。

http://wa3.i-3-i.info/word13818.html

 

カーネルが使っているバッファのメモリ」についてですが、これは言い換えるとカーネルがキャッシュしていないメモリのことと言えそうです。

 

 

仮想化技術

仮想化技術の目的は

  • スケーラビリティ
  • コストパフォーマンス
  • 高可用性

 

と言われています。

 

例えばはてなではIPMI(Intelligent Platform Management Interface)というベンダ製のサーバのリモート管理機能の代わりにハイパーバイザーというホストOS(サーバ上に最初に起動するOS)を利用することで、IPMIが搭載されていない安価のハードウェアを使っているようです。

 

また、環境を抽象化することによって新しいハードや古いハードでも差分を気にせずにしようできたり、準仮想化という方式を利用することで仮想化によるオーバーヘッドを減らしたりしているようです。

 

最後に、仮想化によってリソース消費をソフトウェアレベルで強力に制御することもできているそうです。 

 

 

仮想化サーバの構築ポリシー

最後に、その仮想化サーバの構築の方針についてまとめていきたいと思います。

 

ハードウェアの利用効率の向上のために空いているリソースを使うゲストOSを投入することがポイントです。

 

例えば、CPUリソースが空いていたらWebサーバ、I/Oリソースが空いていたらDBサーバ、メモリ容量が空いていたらキャッシュサーバを投入するということになります。

 

 

 

駆け足になりましたが、以上をもって『大規模サービス技術入門』のまとめを終えます。 

 

ではまた。