水平分業型ミニブログHVDSGMの提案

追記: HVDSGMの最新の仕様書

2017年のマストドンの流行により、分散型ミニブログというアイディアも注目されるようになった。過去記事 分散型ミニブログの水平分業—素朴ディジタル画像インフラストラクチャーの設計と応用 では、ミニブログの機能をソーシャルグラフ層、テキスト層、マルチメディア層の3層に分類し、そのうちテキスト層とマルチメディア層の境界で水平分業するアーキテクチャーを提案した。本稿では、これらの3層がすべて分離した水平分業型ミニブログの仕様を提案する。本稿は概念的な提案のみであり、実装例は存在しない。

HVDSGMはhorizontally and vertically distributed social graph and messagingのアクロニムである。

以下、ミステリーポスト拡張は赤字で表記する。

 ソーシャルグラフ層

ソーシャルグラフ層はユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • スクリーンネーム (単数、文字列)
  • Bio (単数、文字列)
  • フォローしているユーザーのソーシャルグラフ層のURL (複数)
  • テキスト層のユーザーのURL (単数)

ログインしているユーザーは、パスワード、スクリーンネーム、Bio、テキスト層のユーザーのURLを変更できる。また、フォローしているユーザーのソーシャルグラフ層のURLを追加または削除することができる。

ユーザーには一意なURLが割り当てられる。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • スクリーンネーム
  • Bio
  • フォローしているユーザーのソーシャルグラフ層のURL
  • テキスト層のユーザーのURL

テキスト層

テキスト層はユーザー (複数) のレコードを永続化する。ユーザーは以下のフィールドを持つ。

  • ユーザー名 (単数、独自のログイン機構を持つ場合)
  • パスワード (単数、独自のログイン機構を持つ場合)
  • ソーシャルグラフ層のユーザーのURL (単数)
  • イベント (複数)
  • 信頼するマルチメディア層のホスト名 (複数)
  • 信頼するソーシャルグラフ層のホスト名 (複数)
  • 信頼するテキスト層のホスト名 (複数)

イベントは以下のフィールドを持つ。

  • タイムスタンプ (単数、Unixエポックからの秒数)
  • イベントID (単数、機械可読な文字列)

イベントは以下の種類がある。

  • メッセージ
  • いいね
  • 拡散
  • 削除
  • ミステリーポスト
  • ミステリーポストの拡散

メッセージは以下のフィールドを持つ。

  • 内容 (単数、文字列)

いいねは以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)

拡散は以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)
  • 内容のコピー (単数、文字列)

削除は以下のフィールドを持つ。

  • 削除されたイベントのイベントID (単数)

ミステリーポストは以下のフィールドを持つ。

  • タイトル (単数、文字列)
  • 内容 (単数、文字列)
  • ミステリーポストのURL (単数)

ミステリーポストの拡散は以下のフィールドを持つ。

  • オリジナルのユーザーのソーシャルグラフ層のURL (単数)
  • オリジナルのイベントのイベントID (単数)
  • タイトルのコピー (単数、文字列)
  • ミステリーポストのURL (単数)

ログインしているユーザーは、パスワードを変更できる。また、イベントを追加することができる。タイムスタンプとイベントIDとミステリーポストのURLはサーバーサイドで生成する。

ユーザーには一意なURLが割り当てられる。このURLに対してGETメソッドを要求すると、以下の情報が得られる。

  • イベント (複数)

ただし、ミステリーポストの内容は除かれる。

このGETメソッドの引数にタイムスタンプを指定すると、そのタイムスタンプよりも新しいイベントのみが得られる。

テキスト層は一定時間ごとにリフレッシュ動作を行う。リフレッシュ動作は以下のように行う。

  1. ソーシャルグラフ層のユーザーのURLに対してGETメソッドを発行し、諸情報を得る。
  2. フォローしているユーザーのソーシャルグラフ層のURLに対してそれぞれGETメソッドを発行し、諸情報を得る。
  3. フォローしているユーザーから新たにフォローされたならば、新しいフォロワーの通知を表示する。
  4. フォローしているユーザーのテキスト層のURLに対してそれぞれGETメソッドを発行し、諸情報を得る。
  5. 削除イベントによって無効化されていないイベントを以下のように表示する。ただし、ミステリーポストの拡散は削除イベントによって無効化されない。
    • いいねまたは拡散のオリジンが自分自身であれば、通知を表示する。
    • メッセージまたは拡散の内容を表示する。このとき、信頼するマルチメディア層のホスト名を持つURLが含まれている場合は、そのURLの内容をダウンロードし、自動再生する。
    • ミステリーポストまたはミステリーポストの拡散のタイトルを表示する。

マルチメディア層

マルチメディア層はファイル (複数) を永続化できる。ファイルは以下のフィールドを持つ。

  • ファイル名 (単数、機械可読な文字列)
  • バイトストリーム (単数)

ユーザーはファイルをアップロードできる。アップロードが完了すると、ファイルのURLが表示される。

ファイルのURLに対してGETメソッドを要求すると、そのファイルが得られる。

ミステリーポスト

テキスト層でミステリーポストを開く操作を行ったとき、以下のような通信が行われる。これらの通信はテキスト層とソーシャルグラフ層にまたがって行われる。

  1. テキスト層のホストAは、ソーシャルグラフ層のユーザーのURLにGETメソッドを要求する。
  2. ソーシャルグラフ層は、テキスト層のユーザーのURLを含む諸情報を返す。
  3. テキスト層のホストAは、ソーシャルグラフ層が申告するテキスト層のユーザーのURLが自分自身に一致するときのみ、以下の処理に進む。そうでなければ、ミステリーポストを開くことが許可されなかったことを表示する。
  4. テキスト層のホストAは、ミステリーポストのURLにGETメソッドを要求する。ミステリーポストのURLのホスト名は、別のテキスト層のホストBである。このとき、引数として、ソーシャルグラフ層のホスト名を渡す。
  5. テキスト層のホストBは、テキスト層のホストAと、ソーシャルグラフ層について、それぞれ信頼できるかどうか調べる。いずれも信頼できるときのみ、以下の処理に進む。そうでなければ、ミステリーポストを開くことを許可しないことをテキスト層のホストAに返信する。
  6. テキスト層のホストBは、ミステリーポストの内容をテキスト層のホストAに返信する。
  7. テキスト層のホストAは、ミステリーポストの拡散イベントを自分自身に追加する。
  8. テキスト層のホストAは、ミステリーポストの内容を表示する。

制限

フォロー、いいね、拡散の通知は、すでにフォローしているユーザーのみから受け取ることができる。未知のユーザーからいきなり通知を送られることはない。

ソーシャルグラフ層またはテキスト層のサーバーが、ミステリーポストの拡散に協力せずに内容のみを盗み見ることを試みた場合、信頼するサーバーのリストからそれらを除かなければならない。

メッセージを削除しても、その拡散は削除されない。同様に、ミステリーポストを削除しても、ミステリーポストの拡散は削除されない。

議論

これ役に立つのか?

タイムラインのUIを提供するのはテキスト層なので、ソーシャルグラフを維持したままUIだけを変えたいときに便利かもしれない。

ミステリーポストの導入はテキスト層の変更のみで実現されている。一般に、何か目新しい機能を導入するときは、ソーシャルグラフ層とマルチメディア層を稼働したまま、テキスト層のみを交換することで対応できることが多い気がする。

広告

投稿者: Hakaba Hitoyo

墓場一夜

“水平分業型ミニブログHVDSGMの提案” への 1 件のフィードバック

コメントは受け付けていません。