Upgrade to Pro — share decks privately, control downloads, hide ads and more …

P2P分散型SNS “D-Twi”

0ca0c0ec6efe3a7f5220332a910e6da0?s=47 shinyoshiaki
November 04, 2018
1.7k

P2P分散型SNS “D-Twi”

WebRTCハッカソン
2018/11/4(日)  株式会社エウレカ会場

0ca0c0ec6efe3a7f5220332a910e6da0?s=128

shinyoshiaki

November 04, 2018
Tweet

Transcript

  1. 学部3年 チーム「分散型」 ShinYoshiaki
 WebRTCハッカソン
 2018/11/4(日)  株式会社エウレカ会場 P2P分散型SNS “D-Twi”

  2. D-Twiとは「Distributed Twi◦◦」の略 要するにP2P分散型のTwi◦◦風SNS

  3. P2P分散型システムのメリット •止まらない •負荷分散 実装方法にもよるが、負荷分散につながる場合もある 今回、用いる「Kademlia」という分散ハッシュテーブルは負荷分散の効果がある 例 ・サーバクライアントな Github や Twitter

    はちょくちょく止まる    ・ P2Pな Bitcoin や Torrent は止まらない
  4. Kademlia •分散ハッシュテーブル •Torrent , IPFSといった有名プロジェクトに採用されている実績 •効率の良いノードと値の探索が可能 •Churn耐性、スケール可能 •実装が簡単 今回はWebRTCの DataChannel

    で Kademlia を実装する
  5. Kademliaネットワークの構成 Kademliaネットワークは ポータルノードと呼ぶ外部からアクセス可能な端末 の Node.js 上で動作する物と ブラウザ上で動作する一般のノードから成り立つ 一般のノードは Kademliaネットワークに接続するた めにまず、ポータルノードとシグナリングをする

    一般のノードはその後、Kademlia のアルゴリズムに 従い他のノードと接続(シグナリング)する ポータルノードとノードは Kademliaネットワーク上で は、対等に振る舞う
  6. WebRTCを使うメリット • NAT越え(STUN) • Ping処理(生存判定)の実装が不要 ・・・・・・・・ Iceが切れたら教えてくれる • ブラウザで動作(マルチプラットフォーム) • 多機能

    • 使いやすい
  7. “D-Twi”の機能紹介 • ログイン画面  アカウントは公開鍵/秘密鍵で管理    アカウント作成時に公開鍵ファイルと  秘密鍵ファイルが保存される    ログインは先ほどの鍵ファイルを  ファイル選択して行う

  8. • メイン画面  Twitterでいうタイムライン。文字と画像が投稿できる  フォローしている人の投稿がタイムラインに表示される。また他人の投稿がランダムに表示される  文字と画像はKademliaのアルゴリズムに従って分散保存される

  9. • ユーザ検索 相手のIDを知っていれば、Kademliaの 探索アルゴリズムによって、 そのIDの相手と直接、接続することができる また、この機能を用いてダイレクトメッセージ 機能を実現している

  10. • ダイレクトメッセージ    オンライン状態のユーザ同士はDMを  送りあえる  DMはKademliaネットワークとは別の  DM用のDataChannelでP2P通信する  任意のファイルを送受信できる  (完全P2Pだから匿名性がある!)  当然、リアルタイム通信。通知も来る

  11. • ビデオチャット  本家にはないビデオチャット機能もWebRTCなら簡単に実装可能!!  DataChannelでStreamをシグナリングして実現

  12. 技術仕様 プロダクト ツール フロントエンド React / Redux storybook Javascript 周辺ライブラリ(自作)

    Kad-rtc (kademlia for webrtc / ポータルノード機能付き) Typescript Webrtc4me (webrtcのラッパー) Typescript
  13. まとめ • WebRTCでP2P分散型SNSのプロトタイプを作れた • WebRTCでP2P分散型プラットフォームは作れそう • WebRTCは全部入り(映像、データ、リアルタイム通信)

  14. ↓質問はTwitterでも受け付けます @ShinYoshiaki