Muranaga's Golf

46歳でゴルフを始めて10数年。シニアゴルファーが上達をめざして苦労する日々をつづります

Google Gears: Disconnected Operation の思い出

Google Gearsにより、Google ReaderGoogleRSS reader)がオフラインで使えるようになった。

モバイル環境ではネットワークがつながらない・安定しないという問題がある。これを解決するために、サーバにあるデータをクライアント側にキャッシュ・蓄えて(hoarding)、ネットワークにつながらなくてもアプリケーションが実行できるようにすることを disconnected operation という。Google Gears は、disconnected operation を Ajax で実装するためのブラウザ・モジュールである。

今から 15年以上も前、カーネギーメロン(Carnegie Mellon)大学 School of Computer ScienceM. Satyanarayanan 教授(通常 Satya と呼ぶ)のところで研究されていたのが、ファイルシステム層での disconnected operation である。分散ファイルシステム Coda 上で実装されており、利用者やアプリケーションからは disconnected operation が透過(transparent) になっていた。つまりノートPC を普段使っているうちに勝手にデータが hoard され、いつネットワークから切り離されても利用者はそれに気づかないでアプリケーションを動かすことができたし、アプリケーションを改造する必要もなかった。Coda 上の disconnected operaiton の基本設計と実装については "Disconnected Operation in a Distributed File System (Lecture Notes in Computer Science)" という博士論文に詳しく記述されている。

僕自身は Satya の研究室に訪問研究員として 1年半滞在(1994年11月から1996年4月まで)、グループウェアの disconnected operation を研究した。再接続したときにクライアントとサーバとにあるデータの複製を統合する必要があるが、そのデータ統合(競合解消)をどうすべきかモデル化と実装による検証を行った。海外に初めて住むという貴重な体験と共に、OS に代表されるシステムソフトの研究方法を徹底的に鍛えられた 1年半であった。当時の Satya たちの研究が、モバイルコンピューティングの最先端を走っていたことは紛れもない事実である。

それから 15年以上の時を経て、ブラウザ層での disconnected operation を実装したのが Google Gears である。Coda とちがい、オンライン/オフラインの切り替えは利用者やアプリケーションに透過にはなっていない。アプリケーション固有の実装ができるように、基本的なサブシステムとその API が公開されている。クライアント上のサブシステムは下記のようなものであろう:

  • Web (http) サーバ
  • データ・ストレージ(SQL データベース)
  • オフライン/オンラインの切り替えモジュール
  • 非同期通信
  • 並列スレッド実行
この上でアプリケーションごとに以下を実装することになる:
  • データのキャッシュ・hoard
  • 再接続時のデータ複製(レプリカ)間の同期

Google Reader の複製間同期は非常にシンプルである。RSS が既読/未読のどちらかのステータスであり、ネットワーク再接続時にはクライアント側のステータスを有効にすればよい。Google Docs や Spreadsheet のような複雑なアプリケーションにおいて、どのような方針で実装するべきか。単にクライアント側のステータスで override すればよいのか。一つのブラウザがオフラインになっている時、別の PC からオンラインアクセスがあった時はどうするのか。実装がモダンになったとはいえ、データ複製の統合・競合解消の難しさは 15 年前とまったく変わっていないのである。

システムCoda Google Gears
時期 1990年代前半 2007年
組織 Carnegie Mellon 大学Google
実装 ファイルシステム ブラウザ/http層
透過性 アプリ透過 アプリ改造

Disconnected Operation in a Distributed File System (Lecture Notes in Computer Science)

Disconnected Operation in a Distributed File System (Lecture Notes in Computer Science)