ユーザとしてHubzillaの障害に備える今回、Harukin+が保守作業に伴うシステム障害によりダウンしました。
TwitterやFacebookなど一般的なSNSであればSNSサーバがダウンすると復帰するまで当然ながら利用はできません。
そして、日本ではMastodonをメジャーとする分散型SNSでも、所属するMastodonサーバがダウンした場合は、別のURLドメインを持つサーバへ複アカウントを作成し、分散ネットワークシステムとしては全く別のユーザとしてログインすることにより待避することが可能です。
しかしHubzillaには一般的なSNSの"アカウント"とは違うNomadic identity(ノマディックアイデンティティ/遊牧民のアイデンティティ)という概念を持ち、もし現在ログインしているHubサーバがダウンしても、別のHubサーバへユーザ情報を障害の事前にクローンしておいて、障害発生時に別のHubサーバへログインすることによって分散ネットワーク上で同一ユーザとして振る舞えるという機能があります。
今回はHubzillaの先進的な分散システムについてご説明します。
Hubzillaでは複数のHubサーバが接続されることによって分散ネットワークを形成します。これをGrid(Gridネットワーク)と呼称します。
例えば、ユーザboyがalpha.hub.netにアカウントを作り、alpha.hub.net/channel/boyというチャンネルを設けます。
実はHubzillaではチャンネルを設けた際に内部でIdentityIDという固有のハッシュ値が与えられます。
更にboyはユーザ情報を分散させるためbravo.hub.orgでアカウントを作りbravo.hub.org/channel/boyというチャンネルを設けますが、その際に事前に設けていたalpha.hub.net/channel/boyのチャンネル情報をクローンするように指定しました。
直ぐ上の図のチャンネルURLとIdentityIDへ注目してください。チャンネルURLが別であり、IdentityIDが同一なのが理解できるでしょうか?
Hubzillaの分散ネットワークGridで共有される全ての操作はこのIdentityIDへ指向して行われます。
例えば、リプライやメンションなどはalpha.hub.net/channel/boyへ指向して送受信されるわけてなく、IdentityID:SzhlhNa4lDqRへ指向して送受信されるということです。
図解してみましょう。
charlie.hub.socialへログインしているユーザgirlが、いつもalpha.hub.netへログインしているboyへ向けて何らかのメッセージを送ったとします。
しかしながら、boyがいつもログインしメインとするalpha.hub.netは何らかの障害によりダウンしており、boyは一時的にbravo.hub.orgへ待避しました。
このような状態だとalpha.hub.netにログインしていないboyには絶対にgirlのメッセージは届きません。
これはTwitterやFacebookなどの一般的なのSNS、Mastodonを代表するActivityPub系分散型SNSでも同じです。
しかし、Zotプロトコルで実装されるGridネットワークではalpha.hub.netへ指向するわけでなくIdentityIDへ指向するのでboyがbravo.hub.orgへログインしていてもメッセージが届きます。
再三続けて申し訳ないですが、Hubzillaの書き込みやメンション、リプライ、シェアなどの操作はalpha.hub.netやbravo.hub.orgなどへ指向して行われるのではなくIdentityIDへ指向して行われます。
つまり、boy(IdentityID:SzhlhNa4lDqR)が書き込んだという情報はGridネットワークへ接続されているalpha.hub.net/channel/boyとbravo.hub.org/channel/boyへ同期されます。何故ならこの2つのチャンネルのIdentityIDは同一だからです。
もし、片方のHubサーバがダウンしていても活動しているHubサーバで書き込めばboy(IdentityID:SzhlhNa4lDqR)の投稿情報はGridネットワーク内で共有されます。
また、girlも見ているのはalpha.hub.net/channel/boyやbravo.hub.org/channel/boyではなくIdentityID:SzhlhNa4lDqRなので、片方のHubサーバが落ちていても活動しているサーバからIdentityID:SzhlhNa4lDqRの情報を取得しboy(IdentityID:SzhlhNa4lDqR)の投稿を読むことができるというわけです。
今回、Harukin+がダウンしている間にボクが書き込めたのは、チャンネルクローンしている別のHubサーバにて書き込んだ為です。
長くなりましたが、つまりユーザとしてHibzillaの障害に備えるということは、現在メインで使っているHubサーバとは別のHubサーバへ事前にチャンネルクローンをしておくということになります。
最後にちなみにですが、サーバがダウンしてもダウンしている間の情報はGridネットワーク内でキューされ、ダウンしたサーバが復帰した際に自動同期をはじめます。
以上です。ありがとうございました。