Windows Ruby on Rails サーバで構築する構成要素(機能編)

ちょっと反省

昨日は最初の記事から長文を書いてしまい、一応狙い通りなんですが、それでも長すぎたかと反省。
(小出しだとドコ目指して記事を書いてるのか判らないとつまらないと思って)
あれは概略ということで、今後の記事でも小分けにしてもう少し書いていきたいと思います。

Windows Ruby on Rails サーバで構築する構成要素(機能編)

今日は、現時点での私がこのサーバに与えるつもりの個々の機能に対して、
その実装の方針についてまとめたいと思います。
機能は大きく分けて
「データの保持」「データの閲覧」「データの更新」「データのバックアップ」「サーバの監視」
で考えています。

データの保持

まず第1に、このサーバには利用者が必要とする情報データを保持する機能を与えます。
保持する情報は、原則テキスト情報のみです。
テキスト情報の保持には定番の、
SQLが使えるリレーショナルデータベース(RDB)を使います。
また通信方式は、速度やセキュリティ重視ではなく
お手軽さと汎用性を考えてODBC接続をベースに考えます。
 
具体的には昨日も書いたとおりMySQLを用います。
これと通信するのは、RailsでActiveRecord経由および
必要に応じてVB.NETのソフトから直接 MySQL ODBC 3.51ドライバ経由で接続します。
 
DBの構築はRailsのマイグレーション機能を用いて行います。
実際には管理ツールに MySQL GUI Tools も導入し、
その中の MySQL Administrator を利用したり、
コマンドラインから mysql を実行して変更することもできますが、
Railsの規約の機能の流れに普通に乗ることを意識して
マイグレーション重視で行きます。
 
なお、画像や他のファイルの登録は、
当面私が必要としているのが文字のみの情報なので、今は先送りするつもりです。
もし実装することになった場合、
Windowsのファイル共有機能をベースにDBにパス情報含めた最低限の情報のみ保持。
実体ファイルをDBの内部に格納することはしません。
あえてテキスト情報とファイルとの紐付けを緩い状態にして管理するポリシーで行きます。

データの閲覧

データの閲覧は、Ruby on Rails で構築したRailsアプリケーションで行えるようにします。
WebサーバはInstantRailsに含まれるMongrelにします。
対象ブラウザについては余りスタイルの違いを意識はせずに、IE6以上、FF2以上、その他適当です。
モバイル対応は意識しません。
 
Railsで利用するプラグインは、ActiveScaffold、acts_as_authenticated を必須にします。
 
また必要に応じて acts_as_taggable_on_steroids、acts_as_bookmarkable を使えるようにしたいです。
これらはメインで管理するレコード群を、別のメタな仕組みで紐付けて利用できる仕組みが
欲しいから入れるのですが、ちょっとまだ私の技術ではハードルが高いかも。
 
日本語化もやらないと…これはまだ、手段を決めてません。

データの更新

データの更新は、前述のRailsアプリケーションの他、VB.NETからの直接更新(ODBC)も用います。
GUIから編集しての更新にも、命令一発でバッチ更新も両方機能としては使います。
 
内部的にはなるべくトランザクションを利用しなくともDB更新が進むような、
緩いポリシーでいけたらな、と考えています。
#例えばレコード追加のみ常に受付、集計テーブルの更新は定期実行で分けて処理する、といった感じ
 
そうそう、MySQLではストレートエンジンは基本 InnoDB で行きます。
耐障害性を意識してこちらにしました。

データのバックアップ

データのバックアップは、今回WSH(Windows Scripting Host)を VBScript にて実装して
実現しようと考えています。
 
MySQLだと、管理系コマンドのみで単純なオンラインバックアップまで可能なので、
これらのコマンドをVBScriptで一連処理するアプリを開発し、
それをWindowsのタスクに登録して定期実行するパターンで行きます。
使うコマンドは mysql、mysqldump です。
更新ログ(バイナリログ)を常に出力し、障害時には手動でリストア→リカバリ復旧まで
ちゃんとできる状態を運用できるようにします。
 
データの置き場所としては、今ですとUSB外付けRAIDが一番適当かな、とは思ってます。
ただ実際には試したことがないです。

サーバの監視

サーバの監視情報は、まずログはApache、Rails。あとバックアップ処理のログ。
 
ログやバックアップデータの更新状況は、管理者の利便性を考えて
Apache経由で公開ページを作成する方向で考えています。

外部からの死活監視は、別途監視PCからVBScriptにてping監視を主でやりたいです。
それ以上になると、今度はサーバ側で定期的にVBScriptで情報を収集するスタイルがよいのか、
それとも監視PC側からリモート接続するような形で情報を収集するのがよいのか、
ちょっとまだ決められません。

その他

サーバの起動、終了時のRails他の自動起動、終了は、
InstantRails の監視ツール(InstantRails.exe)が一通りやってくれるようです。
ですので基本はこれにまかせます。