SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

DeNAの人気サイトに学ぶ LAMPによるWeb-DBシステム構築/運用の極意(前編)

エンタープライズでのオープンソース使いこなし術


  • このエントリーをはてなブックマークに追加

Web サーバー/スレーブDB サーバー間の負荷分散

 Webサーバー群とスレーブDBサーバー群の間のSQLクエリ分散(クエリの振り分け)には、DNSラウンドロビンを利用している。これは、DNSサーバーに特定のホスト名で問い合わせを行なうと、問い合わせのたびに異なるIPアドレスを返す仕組みである。DeNAでもモバオクサービス開始時から利用しており、実績のある仕組みである。

 このような負荷分散には比較的高価な専用ハードウェア(L4スイッチやアプリケーションレイヤスイッチと呼ばれる)か、フリーのLinux Virtual Server(以下、LVS)を使うことが多いが、特定のハードウェアにトラフィックを集める必要があるので、その点がボトルネックになりやすいという問題がある。LVSはDirect Server Return(以下、DSR)という機能を持っており、リクエストだけを負荷分散サーバーで受けて複数の実サーバーに振り分け、レスポンスは実サーバーから直接リクエスト元に返すことが可能である。ブラウザとWebサーバー間のHTTPトラフィックの場合、一般的にリクエストパケットはレスポンスパケットの100分の1以下となるため、この方法は有効とされている。

 では、この方法はWebサーバー/DBサーバー間の負荷分散にも応用できるのだろうか?

 図4-1~3は、ある日のモバゲータウン日記機能のスレーブDBトラフィックを示している。これらを見るとWebサーバーからのリクエストのトラフィックと、それに対するレスポンスのトラフィックに大きな差はない。つまり、DSRを使ったとしてもボトルネックを回避する方法にはならない。このリクエスト/レスポンストラフィックの比率は利用するSQLによっても異なる可能性があるが、DNSラウンドロビンの場合、WebサーバーとDBサーバーは、特定のハードウェアを介さずに直接通信できるため、このボトルネックがまったく発生しないというメリットがある。

図4-1:モバゲータウン日記機能DB群トラフィック(マスタDBトラフィック)
図4-1:モバゲータウン日記機能DB群トラフィック(マスタDBトラフィック)
図4-2:モバゲータウン日記機能DB群トラフィック(バックアップDBトラフィック)
図4-2:モバゲータウン日記機能DB群トラフィック(バックアップDBトラフィック)
図4-3:モバゲータウン日記機能DB群トラフィック(スレーブDBトラフィック)
図4-3:モバゲータウン日記機能DB群トラフィック(スレーブDBトラフィック)

 ただし、DNSラウンドロビンには、次のような問題点が存在している。

分散比率の制御

 DNSラウンドロビンは、均等にクエリを分散する。例えば、4台のスレーブサーバーが存在する場合、1台に対するクエリは4分の1となる。スレーブ群にサーバーを追加していく際に処理能力の異なるサーバーが混在すると、スレーブサーバーごとの処理能力に応じた分散制御ができず、レスポンスに差が生じることになる。

 スレーブ群全体としての性能を最大化させるためには、この分散比率の制御が必要となってくる。

障害時の対応

 DNSラウンドロビンは、耐故障性を備えていない。DNSラウンドロビンで返されたIPアドレスに接続できない場合の対応として、DeNAでは独自に開発したDB接続フレームワークを用意している。このフレームは、ほかに返されたIPアドレスに接続させる機能を持っているが、リトライのコストがかかるためスレーブサーバーに障害が発生した場合は手動でDNSから切り離す必要がある。

 一般的なBIND namedなどでDNSサーバーを運用する場合、IPアドレスとホスト名の関連付けはゾーンファイルというフラットファイルで管理するが、ゾーンファイルで数百台のマシンの状態管理まで行なうことはかなりの労力を必要とする。

次のページ
DNS ラウンドロビン問題を解決する「MyDNS」

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

能登 信晴(ノト トキハル)

株式会社ディー・エヌ・エーにて、ケータイ向けサービス開発と運用を担当。以前はソリューション事業の一環で顧客企業向けコンサルティングや提携サイト構築プロジェクト統括なども行なっていた。「DeNA技師のメモ」更新中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

早乙女 正巳(サオトメ マサミ)

株式会社ディー・エヌ・エーにて、ケータイ向けサービス「モバコレ」の立ち上げと運用を担当。以前はディー・エヌ・エーのPC サービスの開発を幅広く担当していた。モバコレに関しては1 人で物流/決済などを含むすべての開発を約2ヶ月で行なった。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/1585 2008/09/04 12:45

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング