Sameer Ajmani, Barbara Liskov, Liuba Shrira, "Modular Software Upgrades for Distributed Systems", In European Conference on Object-Oriented Programming (ECOOP), July 2006.(1)

この論文は、分散システムを以下に動的にアップグレードするかと言う話。実際にシステムも作ったらしい。ファーストオーサーがGoogleの人だから、実際にGoogleで使われていたりするのかな。
以下、まとめ。

Introduction

分散システムを動的にアップグレードするシステムを考える時に、以下の要件を満たしているとよいだろう。

  • modularity(モジュラー性):システムをアップグレードする際に、アップグレードをする人はシステムの全てを把握している必要がない。
  • generality(一般性):アップグレードに対して制約がない。つまり、前のバージョンと互換性がなくても良い。
  • 永続的なデータの移行:アプリケーションによって異なるが、そのシステムにとって永続的に必要なデータは、アップグレードする際に移行できる。
  • 自動的:手でアップグレードを行うのではなく、自動的に行われる。
  • コントロールできる:いつアップグレードを適用するのかと言う事を、制御できる。
  • 継続的な稼動:分散システムでのアップグレードは、全てのノードで同時に行う事は出来ないので*1、システム内で異なるバージョンのノードが混在しうる。そういった場合でも、問題なく継続して稼動できる。

本論文に基づいて作成したシステムでは、以上の要件を満たしているらしい。
で、この論文の新規性は、

  1. 分散システムに対して、初めて自動的で制御可能な動的アップグレードシステムを提供した。
  2. 異なるバージョンが混在する状況を理解し、記述する方法を提供した。

と言う点にあるらしい。

Overview

この論文では、分散システムを、オブジェクトの集合と考える。そして、アップグレードは、<oldClass, newClass, TF, SF, pastSO, futureSO>という6つ組であると考える。

  • oldClass:アップグレードする前のクラス
  • newClass:アップグレード後のクラス
  • TF:Transform Functionの略で、古いバージョンのオブジェクトの状態を受け取って、新しく作られるオブジェクトの状態を作る関数
  • SF:Scheduling Functionの略で、各ノードに対していつアップグレードをするかを教える関数。

pastSOfutureSOに関しては、後に詳しく説明します。
そして、このアップグレードを行うためのシステムは、アップグレードサーバー、アップグレードデータベース(UDB)、そしてオブジェクトの集合からなる。さらに、それぞれのオブジェクトに、アップグレードレイヤー(UL)という階層を設ける。*2



ここで、眠くなってきちゃったのでまた明日。

*1:本論文では、そう考えているみたい。まあそうだろうね

*2:元の論文のFig.1にULの説明をした図があります。