Yayaka Protocolで実現する真の分散SNS

Read this in English

Yayakaプロトコルは分散SNSのためのプロトコルです。 この記事では、これがなぜ作られ、なぜ良いのかを説明します。

目的

Yayakaプロトコルは大まかに以下の目的があります。

  • 脱中央集権
  • 民主化
  • 小さなサーバーでのネットワークへの参加
  • 階層化されたプロトコルによる高い拡張性

脱中央集権は自由を得るための最初のステップです。 独占プラットフォームはあなたの自由を奪うことがあります。

民主化は自由を得るための第2ステップです。 Yayakaプロトコルは独占プラットフォームを複数の独裁プラットフォームには分割しません。

小さなサーバーでのネットワークへの参加はそれぞれのサーバーが分散SNSのすべての機能を実装する必要がないことを意味します。 それぞれのサーバーは最低限の機能だけを実装します。

階層化されたプロトコルによる高い拡張性は同じ目標をもつサーバー同士で協力しながら独自に拡張することが可能ということを意味します。

特徴

前述した目的を達成するためにYayakaプロトコルは以下の特徴を持ちます。

  • サーバー間を自由に移住できる。
  • それぞれのサーバーは分散SNSの一部分を実装する。
  • サーバー間の通信の方法はソケット通信やHTTPSなど任意のものが使える。
  • 追加のプロフィール属性やユーザーによるイベントの種類、コンテンツの種類は上層のプロトコルで定義される。

コンセプト

Yayakaサービス

YayakaサービスはIdentityサービス、Repositoryサービス、Social Graphサービス、Presentationサービスの4つあります。 それぞれのユーザーはIdentityサービスで登録を行い、他のサービスを認可します。 Repositoryサービスはユーザーによる投稿やお気に入り、リポストなどのイベントを保存します。 Social Graphサービスはユーザー同士の関係を保持し、イベントを配信します。 PresentationサービスはウェブフロントエンドやAPIを提供します。 それぞれのユーザーは複数のRepositoryサービスで投稿し、複数のSocial Graphサービスにイベントを配信し、用途に合わせて複数のPresentationサービスを利用することができます。 もしRepositoryサービスが不当な検閲を行ったり、PresentationサービスがUIやAPIの改悪を行ったらすぐに離れることができます。

Yayaka Meta/Messaging Protocol

Yayaka Meta/Messaging Protocol (YMP) は分散ウェブアプリケーションのためのメッセージングプロトコルです。 それぞれのサーバーはYMPの上層プロトコルとして複数のConnectionプロトコルやMessageプロトコルを実装します。 Connectionプロトコルはどのようにしてサーバー間で通信を行うかを定義し、Messageプロトコルはアプリケーションがメッセージの交換によりどのように動作するかを定義します。 YayakaプロトコルはYMPのMessageプロトコルの一つです。

Yayakaプロトコルの動作

登録

  1. ユーザーがどのサーバーで登録するかを決める。
  2. ユーザーはそのサーバーに信頼されたPresentationサービスの一つにユーザー登録のための情報を入力する。
  3. Presentationサービスは登録を行うサーバーのIdentityサービスにメッセージを送信する。
  4. Identityサービスはユーザーを作成する。

フォロー

  1. ユーザーがPresentationサービス上でフォロー操作をする。
  2. Presentationサービスはそのユーザーが認可したSocial Graphサービスの一つにメッセージを送信する。
  3. Social Graphサービスはフォロー先のSocial Graphサービスにメッセージを送信する。
  4. 2つのSocial Graphサービスはフォロー関係を保存する。

イベントの作成

  1. ユーザーがPresentationサービス上でイベント作成操作をする。
  2. Presentaitionサービスはそのユーザーが認可したRepositoryサービスの一つにメッセージを送信する。
  3. Repositoryサービスはイベントを保存する。
  4. Repositoryサービスは自分を購読しているSocial Graphサービスにイベントを配信する。
  5. それぞれのSocial Graphサービスも自分を購読しているサービスにイベントを配信する。

現状

YMPの定義はほとんど完成しています。 現在はYayakaプロトコルとElixirによるリファレンス実装を同時進行で進めています。

計画

以下が今後の計画です。

  • 最初のConnectionプロトコルを作る。
  • YMPの上層プロトコルを登録する分散レジストリのMessageプロトコルを作成する。
  • 分散GitホスティングサービスのためのMessageプロトコルを作成する。

Yayakaへの貢献

YayakaプロトコルスイートのためのGitHub Organizationがあります。 気軽にIssueを立ててください。

Written on June 8, 2017