SHOEISHA iD

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

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

japan.internet.com翻訳記事

エンタープライズ環境におけるSubversionの複製アーキテクチャ

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

 Subversionはオープンソースのバージョン管理システムです。この記事では、Subversionリポジトリを安全かつ確実にバックアップし、最新の状態まで迅速に復元できるようにするためのいくつかの戦略を示し ます。

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

はじめに

 Subversionはこれまでで最も人気のあるオープンソースのバージョン管理システムであり、実際、その評価は当然と言えます。最小単位でのコミット(アトミックコミット)、高速なブランチ/タグ作成、効率的なバイナリファイル処理、HTTPおよびWebDAVでのアクセスなど、数々の強力な機能を備えており、多くの組織にとって利用価値の高い選択肢となっています。また、Subversion 1.5に搭載されている、より高度な機能、特にマージ追跡機能などは、このバージョン管理システムの価値を一層高めています。

 優れたバージョン管理システムは、ソフトウェア開発を行う組織にとって戦略的に重要な意味を持ちます。開発者なら誰でも知っているように、ソースコードはIT組織のまさに「血液」です。従って、ソースコードを適切に管理することはビジネス的に意義のあることで、ソースコードリポジトリを使用する主なメリットの1つは、ソースコードが常に安全な場所にしっかり保管されているという保証です。

 しかし、本当に保証されていると言えるでしょうか。

 サーバーはクラッシュする可能性があり、ネットワークはダウンする可能性があります。火事が起きてデータセンターに被害が出ることもあるでしょう。このような非常事態に直面した場合に、ソースコードリポジトリを短期間のうちに必要な状態まで復元できる保証はあるでしょうか。はたして単純なファイルシステムのバックアップだけで十分でしょうか。

 この記事では、Subversionリポジトリを安全かつ確実にバックアップし、最新の状態まで迅速に復元できるようにするためのいくつかの戦略を示します。また、ライトスループロキシという方式を使って単純ながら強力な高可用性ソリューションを構築する簡単な方法も紹介します。

最も基本的な方法:リポジトリをバックアップする

 Subversionリポジトリのバックアップを取る主な理由は、何かあった場合に大切なソースコードを復元できるようにするためです。最も基本的なバックアップ戦略の1つは、単純に、データを安全な場所に定期的にコピーすることです。Subversionではこの作業を簡単に行えます。

 デフォルトでは、SubversionリポジトリはFSFSというフラットファイル形式で保存されます。この形式は可搬性に優れ、複製や移動が簡単です。リポジトリをFSFS形式で保存しておくと、そのリポジトリファイルを適切なディレクトリにコピーするだけでリポジトリを復元できます。ただし、リポジトリをただ定期的に(例えば1時間ごとに)コピーした場合には、コミットが正しく反映されないおそれがあります。前回のバックアップからサーバーのクラッシュまでの間に、ユーザーがリポジトリにコミットした変更が失われてしまうのです。

 この問題を回避するには、ユーザーがコミットしたときにデータが自動的にバックアップされるようにします。そのためにはSubversion Hooksを使用します。Hooksは、Subversionの上級ユーザーならば知っておきたい強力なスクリプティング機能です。Subversionリポジトリのhooksディレクトリは次のようなファイルが配置されているはずです。

Kapiti:repos johnsmart$ ls hooks/
post-commit.tmpl          pre-lock.tmpl
post-lock.tmpl               pre-revprop-change.tmpl
post-revprop-change.tmpl     pre-unlock.tmpl
post-unlock.tmpl          start-commit.tmpl
pre-commit.tmpl

 これらは基本的に、Subversionのコミットライフサイクル中のいくつかのキーポイントで実行されるスクリプトです。例えば、post-commitというスクリプトはsvn commit操作の直後に毎回実行されます。

 Subversionリポジトリを自動的にバックアップするには、このスクリプト内に、Subversionリポジトリ全体をバックアップするためのコマンドを記述します。こうしておくと、誰かが変更内容をリポジトリにコミットするたびに、リポジトリ全体が適切に複製され、安全な場所に配置されます。

 ただし、この方法の大きな問題は、スケーラビリティがあまり高くないという点です。リポジトリが大きくなるにつれて、すべてのバージョンを保管するために必要な領域は大きくなり、リポジトリファイルをバックアップするのにかかる時間も長くなります。また、クラッシュ後にリポジトリを復元するのは極めて手動的な作業です。しかし、実はもっと良いソリューションがあります。「svnsync」というツールを使うのです。

会員登録無料すると、続きをお読みいただけます

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

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

メールバックナンバー

次のページ
よりスマートな方法:svnsyncを使ってリポジトリを同期させる

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

  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

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

John Ferguson Smart(John Ferguson Smart)

政府機関や企業の国内外の開発チームから成る大規模なJ2EEプロジェクトに数多く携わる。J2EEのアーキテクチャと開発、およびITプロジェクト管理を専門とする。オープンソースのJavaテクノロジの経験も豊富。自らのテクニカルブログを公開中(www.jroller.com/page/wakaleo)。

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

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

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3286 2008/11/28 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング