データベースレイヤにおける対策
現時点(フェーズI)では実装していないが、フェーズIIで実装予定の対策を紹介する。
1. DBロードバランサによるデータベースのロードバランス
LVS(Linux Virtual Server)とldirectordの連携により、データベースへの処理を複数のデータベースサーバへ自動的に振り分けることが可能だ。
データベースサーバの障害検知はDBロードバランサ上のldirectorにより行われる。Ldirectordにより検知された障害はLVSに伝えられ、LVSは自動的に障害が発生しているサーバを処理振り分け対象から外す。これにより、冗長性の確保を実現している。
2. mysql_clusterによる拡張性・冗長性の確保
mysql_clusterの機能を利用することで、データベースサーバをスケールアウトしてもデータベースサーバ間のデータ同期が行われる。また、DBロードバランサにより複数台のデータベースサーバに処理を振り分けられるため、データベースサーバの拡張性を確保している。
クッキーとセッション管理
ログイン認証のあるサイトを構築している場合、セッション情報の管理が必要となる。セッション情報とは、アクセス履歴やログイン情報、買い物かごの中身、入力したデータなどが、アクセスしたユーザーのセッションごとの特定情報として使われるものである。
セッション情報の保存先(セッションストレージ)として、以下の6種類が挙げられる。
PStoreは、PStore形式のフラットファイルに格納する方法で、RoR 1.2ではデフォルトである。
ActiveRecordStoreは、ActiveRecord経由でデータベースに保存する方法で、sessionsというテーブルに保存される。
DRbStoreは、DRbサーバに格納する方法である。DRbとは、Rubyプロセスがネットワーク接続を経由してオブジェクトを共有できるようにするプロトコルであり、gemでインストールできる。
MemCacheStoreは、memcachedで格納する方法である。すでに説明したが、memcachedは、オブジェクトをメモリ上でキャッシュするデーモンであり、複数のWebアプリケーションサーバ間でメモリを共有できるのが最大の特徴である。例えば、Wikipediaのようなトラフィックが多いWebサイトで利用されている。
Memoryは、Webアプリケーションサーバのローカルメモリに格納する方法である。Webアプリケーションサーバを複数台用意した場合、セッション情報の共有ができないため利用は控えたい。
FileStoreは、フラットファイルに格納する方法である。文字列で格納されないためあまり利用されない。
それぞれのやり方は、構築するサイトの状況によって選択する必要がある。ライフパレットでは、複数のWebアプリケーションサーバ間でセッション情報の共有をする必要があり、また、memcachedはメモリキャッシュで高速処理が実現できるため、MemCacheStore(memcached)を利用している。
次回は、RoRならではの設計ということでモデル設計を取り上げたい。特に、利用すると便利だが、実例が少なくてややこしい「ポリモフィック関連」という設計法も取り上げてみる。
3/3 |
Index | |
CGMサイト構築で悩む負荷対策と拡張性の確保 | |
Page1 CGMサイト構築の初期段階で考えること アプリケーションレイヤにおける対策 1. HTTPロードバランサによるロードバランス 2. 大容量データの扱い |
|
Page2 アプリケーションレイヤにおける対策(続き) 3. キャッシュを効果的に利用する 4. スループットの向上策 |
|
Page3 データベースレイヤにおける対策 1. DBロードバランサによるデータベースのロードバランス 2. mysql_clusterによる拡張性・冗長性の確保 クッキーとセッション管理 |
RoRでCGMサイト構築虎の巻 |
Ruby/Rails関連記事 |
プログラミングは人生だ まつもと ゆきひろのコーディング天国 ときにプログラミングはスポーツであり、ときにプログラミングは創造である。楽しいプログラミングは人生をより実りあるものにしてくれる |
|
生産性を向上させるRuby向け統合開発環境カタログ Ruby on Rails 2.0も強力サポート 生産性が高いと評判のプログラミング言語「Ruby」。統合開発環境を整えることで、さらに効率的なプログラミングが可能になる |
|
かんたんAjax開発をするためのRailsの基礎知識 Ruby on RailsのRJSでかんたんAjax開発(前編) 実はAjaxアプリケーション開発はあなたが思うよりも簡単です。まずはRuby on Railsの基礎知識から学びましょう |
|
Praggerとnetpbmで作る画像→AA変換ツール Rubyを使って何か面白いものを作ってみよう! 一般的な画像をアスキーアートに変換するツールを作ってみる。さらに出力にバリエーションを持たせてみよう |
|
コードリーディングを始めよう Railsコードリーディング〜scaffoldのその先へ〜(1) 優れたプログラマはコードを書くのと同じくらい、読みこなす。優れたコードを読むことで自身のスキルも上達するのだ |
|
- プログラムの実行はどのようにして行われるのか、Linuxカーネルのコードから探る (2017/7/20)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。最終回は、Linuxカーネルの中では、プログラムの起動時にはどのような処理が行われているのかを探る - エンジニアならC言語プログラムの終わりに呼び出されるexit()の中身分かってますよね? (2017/7/13)
C言語の「Hello World!」プログラムで使われる、「printf()」「main()」関数の中身を、デバッガによる解析と逆アセンブル、ソースコード読解などのさまざまな側面から探る連載。今回は、プログラムの終わりに呼び出されるexit()の中身を探る - VBAにおけるFileDialog操作の基本&ドライブの空き容量、ファイルのサイズやタイムスタンプの取得方法 (2017/7/10)
指定したドライブの空き容量、ファイルのタイムスタンプや属性を取得する方法、FileDialog/エクスプローラー操作の基本を紹介します - さらば残業! 面倒くさいエクセル業務を楽にする「Excel VBA」とは (2017/7/6)
日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本稿では、業務で使うことが多い「Microsoft Excel」で使えるVBAを紹介する。※ショートカットキー、アクセスキーの解説あり
|
|