MongoDB Enterprise Advancedで非公式のアプリケーションをビルドし、それらを Disto に接続して、切断された環境でローカル最初の組織データ同期を行います。
ユースケース: 切断された環境
業種: エッジとモバイル、
製品およびツール: MongoDB Enterprise Advanced
パートナー: Ditto
ソリューション概要
接続されていないフィールド操作はデータの問題を発生させます。フィールド チームは、ロケーションの更新、マップ アイテム、アラート、ファイル、メッセージを共有する必要があります。
クラウドに依存するアーキテクチャでは、これらのワークフローは永続的な接続に依存するようになります。この要件は本番環境の操作で維持するのが困難です。接続に失敗すると、チームは現在の情報にアクセスできなくなります。
開発者は関連する問題に対応しています。ローカルストレージ、同期、競合処理、コマンドセンターの可視性をサポートする必要があります。これらの機能を個別に構築すると、すべてのアプリケーションの複雑さが増す。
このソリューションは、接続が制限されている場合でも機能し続ける非公式のアプリケーションを構築する方法を示しています。 MongoDB をデータレイヤーとして 使用し、 エッジ同期プラットフォーム をMongoDBに接続し、 データレイヤー上に を構築して機能を強化します。
データレイヤーを使用する
MongoDB Enterprise Advanced をアプリケーションの信頼できるデータレイヤーとして使用します。オペレーション エンティティをBSONドキュメントとして保存し、運用ワークフローに一致するコレクションに整理します。 MongoDB は、同じデータベース内のさまざまなドキュメントシェイプ をサポートしています。位置データ、マップ オブジェクト、チャット メッセージ、アラート、およびファイルを 1 つの固定スキーマに強制せずに保存します。
この柔軟なドキュメントモデルを活用して、すべてのアプリケーション機能を 1 つのデータプラットフォーム上で構築できます。 MongoDBを使用して、ダッシュボード、API、コマンド ワークフロー、下流システムを提供します。データベース全体を再設計せずに新しい権限エンティティを追加します 。
MongoDBへの Edge 接続
エッジ同期プラットフォームである Disto を エッジ同期提携するとして使用します。 GitHub プラグインは、 ATK デバイスをローカル最初のピア間キャッシュに接続します。 Atlas は、ロケーション、マップ、チャット、組織データを共有するためのフィールドアプリケーションを構成します。ネットワーク アクセスが変更された場合、または失敗した場合に、近くのデバイス間でナビゲーション データを同期します。
次に、Disto MongoDB Connector を使用して Disto をMongoDBに接続します。 コネクタは、Disto とMongoDB間でドキュメントを同期し、2 つのシステム間で同時に実行された変更を解決します。
データに基づく構築
コマンド センターでローカルにMongoDB Enterprise Advanced を実行します。 MongoDBデータレイヤーを使用して、コマンドセンター ダッシュボードやその他の目的のアプリケーションを構築します。データ レイヤーとアクセス レイヤーを配置することで、ストレージと同期サービスを個別に構築するのではなく、アプリケーションの機能に焦点を当てます。
このパターンを使用して次の操作を行います。
さまざまな目的データをドキュメントとして保存します。
標準のドライバーと API を使用してアプリケーションをMongoDBに接続します。
切断された同期には Disto と統合します。
1 つの共有データレイヤーをコマンドセンターのアプリケーションに公開します。
新しいオペレーション ワークフローが発生したときに、アプリケーションを拡張します。
参照アーキテクチャ
このアーキテクチャでは、コマンドセンターのアプリケーションデータレイヤーとしてMongoDB Enterprise Advancedを使用します。 MongoDB は、目的のドキュメントを保存し、ダッシュボード、API、および運用ワークフローを提供します。 MongoDB Ops Manager は、 MongoDBデプロイを管理します。
GitHub MongoDB Connector はMongoDB をプロジェクトサーバーにリンクします。 GitHub Server は、 MongoDBデータレイヤーを、Disごとの ATK プラグインを介して、Atlas のコマンドライン エッジにあるピア間メトリクスに接続します。その後変更はMongoDBと Disto の間で同期され、2 つのシステム間で競合することなく実行されます。
図の 1。 MongoDB Enterprise Advancedを コマンドセンター データレイヤーとして表示するアーキテクチャ。このアーキテクチャは、Disto MongoDB Connector を介して Atlasフィールドデバイスを処理する Disk ピアリング メトリクスに接続されます。
タグの変更
ターゲット エッジは、フィールドデバイスがアクションデータの作成および交換するレイヤーであり、接続が変更または失敗する可能性がある点で操作されているユーザーとデバイスを含みます。
Atlas は、ロケーション、マップ、チャット、組織データを共有するためのフィールドアプリケーションを提供します。 GitHub プラグインはそのデータをキャプチャし、ピア間キャッシュを介して近くのデバイス全体で同期します。 GitHub は、CPU と . の両方の利用可能なトランスポートを使用します。 Disto は、キャッシュ内の複数のデバイス間でデータを中継することもできます。
エッジは、アプリケーションデータの別のソースとして機能します。 Disto はそのデータを利用可能な状態に保持し、デバイス間で移動します。 MongoDB は同期されたドキュメントを保存し、コマンドセンターのアプリケーションで使用できるようにします。
コマンドセンター統合
MongoDB Enterprise Advanced は、中央アプリケーションデータレイヤーを提供します。ダッシュボードはMongoDBからオペレーション データを読み取り、マップ、ノード ステータス ビュー、通信フィードを通じて表示します。
Disto MongoDB Connector は、Disto とMongoDBの変更をリッスンします。これらの変更をもう 1 つのシステムに適用し、2 つのデータ ストアを整合性のある状態に維持します。
MongoDBで構築されたアプリケーションは、Atlas デバイスに直接接続せずに、メッセージ ドキュメントのクエリと更新を行います。 Disto は、切断された エッジ デバイス との間の配信を処理します。この統合により、Atlas デバイスに対して直接コマンドセンター アプリケーションを構築するのではなく、 MongoDBに対してコマンドセンターアプリケーションを構築できます。
この設計が回復力がある理由
MongoDB はoperation データを保存します。 Disto はフィールドデバイスを同期させます。 Atlas は、フィールドアプリケーションを提供します。 コネクタ は両方の環境をリンクし、同時変更を解決します。
これにより、各分離は 1 つの責任に集中できます。 MongoDB はアプリケーションデータレイヤーを提供し、Ditty はコマンドライン エッジ全体でデータを同期し、ATK はフィールドエクスペリエンスを提供します。
この設計により、デバイスやネットワーク条件ごとに個別のストレージモデルを実装することなく、MongoDB のドキュメントモデルに対してアプリケーション機能を構築できます。
データモデルアプローチ
各コミット エンティティを、アプリケーションの使用方法に一致するドキュメントに保存します。
位置更新、マップオブジェクト、チャットメッセージには異なるフィールドと更新パターンがあります。すべてのエンティティを1つの固定スキーマに強制するのではなく、それらを個別のコレクションに保存します。このアプローチにより、データモデルはエッジで生成されたデータに近い状態に維持され、Disto とMongoDB間の変換コードが削減されます。これらのドキュメントは、切断されたエッジでリアルタイム分析とAIクエリに使用できます。
GitHub プラグインは Disto ATAK v2 スキーマを書き込みます。スキーマは、CoT ベースのデータに圧縮されたフィールド名を使用します。次の例は、 アプリケーション開発に最も関連するフィールドを示しています。
コレクションに位置データを保存するtrack
フィールドアクター からの位置データとステータス データには、trackコレクションを使用します。これらのドキュメントをクエリして、コマンドセンター マップに現在のデバイスと古いデバイスを表示します。
{ "_id": "ANDROID-4486046569cda611", // document identifier "_r": false, // soft-delete flag "c": "MDB Actor 2", // display name "d": "ANDROID-4486046569cda611", // source device "e": "MDB Actor 2", // actor callsign "j": 19.451227, // latitude "l": -99.139832, // longitude "o": 1776886448640, // stale time "w": "a-f-G-U-C" // CoT type }
圧縮されたスキーマは、同期されたドキュメントを ATK によって生成されたデータに近いものに保持します。 MongoDB、別の リレーショナル マッピングレイヤーを必要とせずにドキュメントが保存されます。
コレクションにメッセージを保存するchat
フィールドユーザーとコマンド ワークフロー間で交換されるメッセージには、chatコレクションを使用します。コレクションは、メッセージテキスト、送信者、部屋、タイムスタンプのフィールドを持つ、追跡とは異なるシェイプを使用します。
{ "_id": "b547f0b4-c371-4aff-ac1d-3bafe110a9e1", // message identifier "_r": false, // soft-delete flag "authorType": "a-f-G-U-C", // sender CoT type "b": 1776735193948, // message timestamp "d": "COMMAND-VEHICLE", // source device "e": "COMMAND", // sender callsign "msg": "Command", // message text "room": "Ditto", // room name "roomId": "ChatContact-Ditto" // room identifier }
MongoDB、空のロケーション フィールドを追加したり、両方のエンティティを同じ構造に強制したりすることなく、アプリケーションはtrack ドキュメントと並行してメッセージ ドキュメントを保存できます。
マップ オブジェクトをmapitem コレクションに保持する
永続的なマップ グラフィックと共有組織オブジェクトには、mapitemコレクションを使用します。
MongoDB のドキュメントモデルを使用して、アプリケーションに必要な形状で各オペレーション エンティティを保存します。 track、mapitem、chat は異なるデータとアクセス パターンを表すため、別々のコレクションに保存します。このアプローチでは、すべてのオペレーション データを 1 つの固定的なスキーマに強制せずに、マップ、ステータス、通信機能を構築できます。
コレクション | 目的 | アプリケーションの使用例 |
|---|---|---|
| 位置とステータス データ | フィールドアクターと古いノードをレンダリングします。 |
| 永続的なマップ オブジェクト | 共有カーソルとマップ グラフィックを表示します。 |
| メッセージとやり取りのメタデータ | コマンドセンター ダッシュボードに通信を表示するようになりました。 |
1 つのコミット関数に各コレクションを使用し、すべてのコレクションを 1 つのMongoDBデータレイヤーに保持します。既存のコレクションを再設計せずに、フィールドまたは新しいタスク エンティティを追加します。
1 つの柔軟なデータレイヤーに対するビルド
MongoDBに対してダッシュボード、API、コマンドセンターのワークフローをビルドします。各コレクションの目的に従ってクエリを実行し、 エッジから受け取ったドキュメント構造を保持します。
このアプローチを使用して、次の操作を行います。
Disto とMongoDB間のデータ変換を削減します。
各オペレーション エンティティを簡単にクエリできるようにしてください。
関連のないドキュメントを再設計せずに新しいフィールドを追加します。
すべてのデバイスやワークフローに対して個別のストレージモデルを作成せずに、アプリケーションを拡張します。
ソリューションのビルド
ソリューションをデプロイして調査するには、 Tak-situational-demo GitHubリポジトリを使用します。
コマンドセンタースタックの配置
ルート フォルダーから make setup を実行します。停止した場所を選択するため、エラーが発生してもこのスクリプトを安全に再実行できます。コンポーネントを順番に初期化します。
Enterprise Advanced を管理するためにクラスター内で実行されているMongoDB Ops Manager 。
Ops Manager を通じてプロビジョニングされるMongoDB Enterprise Advancedレプリカセット。
セルフホスト型 Disto Serverインスタンスと並行して MongoDB Ops 演算子 を起動します。
Dito MongoDB Connector は、ネイティブKubernetesオブジェクトとしてプロビジョニングされました。
コマンドセンター ダッシュボードアプリケーション。
このスクリプトは、このソリューションのデータベース、ユーザー、および コレクションを作成します。初期設定で 25 から 35 分待ちます。
完了すると、出力には、 ダッシュボードURL、 Compass接続文字列、Ops Manager の認証情報、エッジ デバイスに必要なペアの値が表示されます。
make verify を実行して環境を検証します。この手順では、ドキュメントをMongoDBに挿入し、Disto Server を通じて検索し、双方向同期を確認します。
完全なコマンド、構成の詳細、配置マニフェストについては、docs/RUN_LOCAL.md TKS 状況デモリポジトリの を確認してください。
同期を設定する
Disto MongoDB Connector を使用して構成を自動化します。 コネクタをKubernetes BigPeerDataBridgeリソースとして宣言して、track、mapitem、chat、file、alert のコレクションをT単位とコマンドセンターのアプリケーション間で双方向に同期します。
MongoDBと同じKubernetesクラスターでホストされ、トラフィックが内部でルーティングされます。パブリックエンドポイントを公開したり、 IP許可リストを管理したりせずに、標準のMongoDB接続文字列で接続します。
コネクタを初期化する前に、これらの前提条件を確認してください。
対象のデータベースとコレクションが存在することを確認します。
コネクタユーザーに
readWrite権限を付与します。プラットフォーム間で因果整合性を維持するために、同期されたすべてのコレクションで
changeStreamPreAndPostImagesを有効にします。
廃止されたドキュメントをマークするには、ソフト削除フラグ(_r: true)を適用します。 MongoDBでハード削除が実行されると、Disto では永続的なパージ操作がトリガーされます。 _r: false フィルターを使用して運用データをクエリします。
ペアの単位
操作UIを起動し、[ Add Device(デバイスの追加) ] をクリックします。オーバーレイには、 アプリID、認証エンドポイント、WebSocket エンドポイント、プレイグラウンド トークンなどのテキスト パラメータとともに QR コードが表示されます。これらの認証情報をターミナルで表示するには、make pair を実行します。
各ターゲットハードウェアユニットで ATK およびプロジェクト ATK プラグインを起動します。生成されたQRコードをスキャンするか、接続変数をプラグイン設定に入力します。 GitHub クラウド同期をオフにして、ネットワーク トラフィックをローカルの Git Server 配置に転送します。
ロケーション サービスをオンにすると、Atlas は位置テレメトリを生成します。ローカル メッシュ ネットワークに参加しているすべてのユニットに対して、これらの構成手順を繰り返します。テレメトリは、中央ダッシュボード マップのレンダリングを迅速に更新します。
docs/RUN_LOCAL.mdステップ別のデバイス オンボード手順については、TAK 状況デモリポジトリで を確認してください。
運用ワークフローを調べる
運用ダッシュボード ( http://localhost ) にアクセスします。マッピング インターフェースには、フィールドアクターが表示され、非アクティブなノードが除かれます。テレメトリ パネルにはアクティブな呼び出し記号が表示され、チャットウィンドウにはフィールド送信がストリームされます。
メッセージをディスパッチするか、マップ マーカを削除します。ダッシュボードは新しいドキュメントをMongoDBに書き込み、コネクタはDisto Server を介して 共有データレイヤーのすべてのペアのハンドヘルド ユニットに更新をブロードキャストします。
MongoDB Compass をlocalhost:27017 に接続して未加工のアプリケーションドキュメントを検査し、Ops Manager を開いて本番管理者のようにクラスターを監視します。
キーポイント
最初にアプリケーションデータレイヤーを構築します。MongoDB MongoDB Enterprise Advancedを使用して、ダッシュボード、API、コマンドセンター ワークフローのオペレーション データを保存および提供します。
組織をドキュメントとしてモデル化: MongoDBコレクションを使用して、位置データ、マップオブジェクト、チャットメッセージ、ファイル、アラートを保存し、固定スキーマを強制します。
MongoDB をエッジに接続する:プロジェクトのMongoDB Connector を使用して、 MongoDBベースのアプリケーションを切断された ATK デバイスに拡張します。
アプリケーション開発を簡素化 : デバイスやネットワーク条件ごとに個別のストレージモデルを作成するのではなく、1 つのMongoDBデータレイヤーに対してアプリケーション機能を構築します。
切断操作の設計: MongoDB の永続的ドキュメントストレージと Disto のローカル最初の同期と競合処理を組み合わせます。
作成者
MongoDB、Timothy Markand、 MongoDB
Alberto Camarena Rodriguez, MongoDB