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、システム内で異なるバージョンのノードが混在しうる。そういった場合でも、問題なく継続して稼動できる。
本論文に基づいて作成したシステムでは、以上の要件を満たしているらしい。
で、この論文の新規性は、
- 分散システムに対して、初めて自動的で制御可能な動的アップグレードシステムを提供した。
- 異なるバージョンが混在する状況を理解し、記述する方法を提供した。
と言う点にあるらしい。
Overview
この論文では、分散システムを、オブジェクトの集合と考える。そして、アップグレードは、<oldClass, newClass, TF, SF, pastSO, futureSO>という6つ組であると考える。
- oldClass:アップグレードする前のクラス
- newClass:アップグレード後のクラス
- TF:Transform Functionの略で、古いバージョンのオブジェクトの状態を受け取って、新しく作られるオブジェクトの状態を作る関数
- SF:Scheduling Functionの略で、各ノードに対していつアップグレードをするかを教える関数。
pastSOとfutureSOに関しては、後に詳しく説明します。
そして、このアップグレードを行うためのシステムは、アップグレードサーバー、アップグレードデータベース(UDB)、そしてオブジェクトの集合からなる。さらに、それぞれのオブジェクトに、アップグレードレイヤー(UL)という階層を設ける。*2
ここで、眠くなってきちゃったのでまた明日。