🕸️

P2Pメッシュネットワーク + 自動同期『Ditto』

に公開

公式ドキュメント

詳細や最新情報は、公式ドキュメントを確認:
https://docs.ditto.live
Ditto企業サイトはこちら:
https://www.ditto.com

Dittoとは

  • 米国Ditto社のソフトウェア
  • 中央サーバー・DB無し
  • サーバー依存なしの分散型DBがモバイルで!
  • 端末間でデータ自動同期
  • 端末のアプリに入れるSDK + クラウドプラットフォーム(認証、長期データ保存など)
  • アプリをLAN、Wi-Fi Aware、Bluetooth LEなどでP2P接続
    • 接続経路を自動切り替え
    • Bluetooth LEだと障害物がなければ80mぐらい届く
      • データをリレーできるので、端末が多ければ距離は無限
  • データ衝突しないデータ方式(CRDT
  • 直接繋がってなくてもデータを 中継(リレー) できる
  • 誰とも繋がってなくてもローカルに保持 → 再接続で自動同期
  • マルチプラットフォーム(それぞれに自動対応)
    • iOS、Android、Windows、Mac、Linux、Raspberry Pi...などなど

何が嬉しいの?

  • 依存が減って、障害ポイントが少なくなる
    • 全体の安定性が向上
  • ネットワークの問題を 「アプリのアップデートだけ」で解決 → 機器追加よりコストが安い
  • 自社開発では実現が難しい体験

どんな感じの使い方?

基本的な流れは以下の通り (詳細は公式ドキュメント参照)

初期化

ditto = Ditto(<認証情報>)
// メッシュに参加 + データ同期開始
try ditto.startSync()

受信したいデータのクエリを登録(配布)

// 他の端末に対してクエリを配布し、受け取りたいデータの種類を伝えておく。
// 更新があったら自動的に受信し、ローカルDBが更新される(ポーリングとか更新とかのコードは不要)
ditto.sync.registerSubscription(
  "SELECT * FROM cars WHERE color = :color",
  [ "color": "blue" ]
)

ローカルDBの変更をリアルタイム検知

observer = ditto.store.registerObserver(
  query: "SELECT * FROM cars WHERE color = :color",
  argumets: [ "color": "blue" ]) { result in
    /* `result` にデータ(JSON)が入ってるので、UI更新などに利用 */
};

ローカルDBの更新

// ローカルDBにDocument追加
// 他の端末に送信するなどは不要で、データを必要としている端末があればバックグラウンドで自動で送信
await ditto.store.execute(
  query: "INSERT INTO cars DOCUMENTS (:newCar)",
  arguments: ["newCar": ["color": "blue"]]);

Dittoの面白さ

  1. SDKをインストールするだけで、メッシュ構築!(めっちゃ楽しい)
  2. 勝手に通信経路(LAN、Wi-Fi Aware、Bluetooth LE)が切り替わるのが凄い
  3. ネットが切れやすい場所など、今までアプリが使いづらかった場所でアプリが使える(チャットとか)
    • 人が多い会場、船、飛行機、工場、、、
  4. ネットが切れたり、サーバー障害があるとダメージがでかい場所で万が一に備えて入れたい
    • 災害、病院、飲食店(ランチ時にサーバーとの通信に遅延があるとやばい)
  5. セキュリティ考慮済み(暗号化(TLS1.3))
  6. 自動同期のためサーバーサイドAPIとかも無くて良い
  7. モバイルアプリエンジニアだけでサービス実装可能

Why Ditto?

  • 自前でメッシュ + 自動同期を作るのは難しすぎる
  • ネットが安定してない or 切れるとやばい場所を考えると唯一の選択肢

対応言語・プラットフォーム

  1. Swift
  2. Flutter
  3. React Native
  4. Kotlin
  5. Java
  6. JavaScript Web (ブラウザではBluetooth等は利用不可なのでサーバーとのみ通信可)
  7. Node.js
  8. C#
  9. C++
  10. Rust
    など

利用ケース

  1. 飲食店・小売の店舗システム
    • サーバーの障害、Wi-Fiが不安定になると売上ダメージがでかい
  2. 人が多く4G/5Gが安定しない場所
    • 会場、災害時、遊園地
  3. ネットがそもそも繋がりにくい場所
    • 金属に囲まれた工場
    • 飛行機
    • 工事現場
    • 地下

利用企業 (一部)

https://www.ditto.com/customers

クラウド

  • 長期間・大容量のデータ保管
  • 既存クラウドDBとも同期可能
    1. HTTP API
    2. Webhook
    3. Apache Kafka
    4. コネクター(他社DBと自動同期)
  • ネットが復旧したり、1台でもメッシュ内で繋がってる端末があれば、データ中継で全端末がサーバーと同期
  • 認証やデバイス管理
  • データ、デバイス状況の可視化
    など

デモアプリ (ソースコードあり)

https://www.ditto.com/demo-apps

チュートリアル

https://github.com/getditto/quickstart

技術問い合わせ (日本語可)

https://support.ditto.live/hc/en-us

Discussion