ITpro会員向けの新サービス「MyITpro」が本日(2007年5月18日)中にはオープンできる運びとなりました。ここではMyITproサービスを提供しているシステムの構成などについて少し紹介させて頂こうと思います。

複数サーバーで負荷分散,1台がコケてもほかがカバー

 MyITproのサーバー群は,ITpro本体のシステムとは完全に独立しています。ドメイン名も少し違いますし(ITpro本体はitpro.nikkeibp.co.jp,MyITproはmy.itpro.nikkeibp.co.jp),サーバー・システムを設置しているデータセンターの場所も異なります。

 システムの構成は,ユーザーからのアクセスを負荷分散装置(ロードバランサー)が受け付けて,配下の複数のWebサーバーに割り振るところまではITpro本体もMyITproも同じです(図1)。ただし,ITpro本体のシステムはWebサーバー群のバックエンドに記事コンテンツを保持するサーバーがあり,そこをすべてのWebサーバーがアクセスしています。一方のMyITproのシステムでは,コンテンツ・データを個々のサーバーが保持し,同期するようにしています。こうすることによって,ディスクアクセスが1個所に集中することを防いでいます。

図1●ITpro本体とMyITproのシステム構成
図1●ITpro本体とMyITproのシステム構成
MyITproのシステムはITpro本体システムと完全に独立していて,システム構成も異なる。

 また,MyITproのシステムでは,1台のWebサーバーを更新マスターと位置付け,情報を更新するようなWebアクセスはすべて,この更新マスターに割り振られます。そして,この更新マスターの情報が,ほかのレプリカに配信される仕組みです。ただ,このような仕組みだと,更新マスターがダウンしたときに情報を書き換えられなくなりますので,更新マスターのダウン時には自動的に1台のレプリカが更新マスターに昇格するようなメカニズムも実装しています。

Rubyなどオープンソースのソフトを全面採用

 次にサーバー内部のソフトウエア構成に目を向けてみましょう。ITpro本体のサーバーはSun Java ServerやOracle Severなど,市販のサーバー・ソフトを使っていましたが,MyITproのサーバー・ソフトはすべてオープンソースのものにしました(図2)。OSはLinux,データベース管理サーバーはMySQL,Webサーバー・ソフトはApache,キャッシュ・サーバーはSquidという具合です。

図2●MyITproサーバーのソフトウエア構成   図2●MyITproサーバーのソフトウエア構成
オープンソースのソフトウエアを全面採用した。

 さらに,Webアプリケーション開発環境は,Ruby on Railsを採用しました。ITproの記事ではお馴染みのまつもとゆきひろ氏が開発したプログラミング言語Rubyを使った開発プラットフォームです。RubyはITpro編集部が強力に推薦したこともあって2007年の日経BP技術賞大賞に輝き,着実に普及が進んでいます。直感的で分かりやすいプログラミング言語であるため,素早くWebアプリケーションを構築できる点はすでに実証済みです(今回のMyITproサービスの開始が大幅に遅れてしまったのは,我々が要求仕様を確定させるのが遅れたためで,RubyやRuby on Railsが問題ではありません)。

Ajaxを駆使してITproとMyITproが連携

 最後に,ITpro側の記事ページにMyITproの情報をどのような仕組みで表示しているかという連携方法を紹介しましょう。

 必修講座100の記事ページを見てもらうと(例えば「【ファイアウォールの役割と機能】Part1 基本---管理外の外部ネットから内側のセキュリティを守る」参照),記事本体の情報はITproサーバーが配信しています。URLのドメイン名部分がitpro.nikkeibp.co.jpとなっていることから分かるでしょう。ページの右側にあるMyITproのロゴがある枠内と,「わからないことを聞いてみよう」と書かれた枠内の部分は,WebブラウザがMyITproサーバーから取得した情報です。

 こうした情報は,ITproサーバーが配信する記事ページのHTMLデータに埋め込まれたJavaScriptをWebブラウザが解釈・実行することで表示しています(図3)。ここではAjax技術を駆使したJSONP(JavaScript Object Notation with Padding)という仕組みが使われています。つまり,ブラウザは非同期でMyITproサーバーにアクセスして,ユーザー自身の情報やフォーラムの新着情報を取得して表示しているのです。これにより,記事自体を表示するのにMyITproサーバーからの情報取得を待つ必要がなくなり,MyITproサーバーの負荷状態によって記事表示が遅くなるのを防いでいます。

図3●MyITproサーバーとITpro本体が連携する仕組み   図3●MyITproサーバーとITpro本体が連携する仕組み
ITpro本体が配信する記事ページ中に,Ajax技術を駆使して非同期でMyITproサーバーが保持する情報を挿入する。

 以上のように,MyITproはこれまでのITproのシステムと比べれば,流行の技術やソフトを取り込んだものになっています。ただ,MyITproサイトはようやく皆さんに使ってもらえるたたき台を用意しただけのβサイトという位置付けです。これから,皆さんのご要望などをどんどん取り入れてより使いやすいサービスに拡張していく予定です。ぜひ,皆さんのご意見やご要望をお寄せ下さい。