MongoDB Enterprise Advanced 에서 전술 애플리케이션을 빌드하고 연결이 끊긴 환경에서 로컬 우선 미션 데이터 동기화를 위해 Ditto에 연결합니다.
사용 사례: 연결이 끊긴 환경
산업: 엣지 및 모바일,
제품 및 도구: MongoDB Enterprise Advanced
파트너: Ditto
솔루션 개요
연결이 끊긴 필드 작업은 데이터 문제를 일으킵니다. 필드 팀은 위치 업데이트, 지도 항목, 경고, 파일 및 메시지를 주식 해야 합니다.
클라우드 종속 아키텍처로 인해 이러한 워크플로는 지속적인 연결에 의존할 수 있습니다. 이러한 요구 사항은 실제 운영에서는 유지하기 어렵습니다. 연결에 실패하면 팀은 현재 정보에 액세스 없게 됩니다.
개발자는 관련 문제에 봉착합니다. 로컬 저장 , 동기화, 충돌 처리 및 명령 센터 가시성을 지원 해야 합니다. 이러한 기능을 별도로 구축하면 모든 애플리케이션 이 복잡해집니다.
이 솔루션은 연결이 제한될 때 계속 작동하는 전술 애플리케이션을 빌드 방법을 보여줍니다. MongoDB 데이터 계층으로 사용하고, 에지 동기화 플랫폼을 MongoDB 에 연결하고, 데이터 계층을 기반으로 구축하여 기능을 향상합니다.
데이터 계층으로 시작하기
MongoDB Enterprise Advanced 애플리케이션 의 신뢰할 수 있는 데이터 계층으로 사용하세요. 미션 엔터티를 BSON 문서로 저장하고 운영 워크플로에 맞는 컬렉션으로 구성합니다. MongoDB 동일한 데이터베이스 에서 다양한 문서 형태를 지원합니다. 위치 데이터, 지도 객체, 채팅 메시지, 경고 및 파일을 하나의 엄격한 스키마 에 강제하지 않고 저장합니다.
이 유연한 문서 모델 활용하여 하나의 데이터 플랫폼에서 모든 애플리케이션 기능을 빌드 할 수 있습니다. MongoDB 사용하여 대시보드, API, 명령 워크플로 및 다운스트림 시스템을 제공 . 전체 데이터베이스 다시 설계하지 않고도 새 미션 엔터티를 추가할 수 있습니다.
엣지를 MongoDB 에 연결
에지 동기화 제휴하다 로 에지 동기화 플랫폼인 Ditto를 사용합니다. Atak Plugin은 Atak 장치를 로컬 우선 P2P 메시에 연결합니다. Atak은 위치 , 지도, 채팅 및 미션 데이터를 공유 위한 필드 애플리케이션 으로 구성됩니다. 네트워크 액세스 변경되거나 실패할 때 주변 장치 간에 미션 데이터를 동기화합니다.
그런 다음 Ditto MongoDB Connector를 사용하여 Ditto를 MongoDB 에 연결합니다. connector Ditto와 MongoDB 간에 문서를 동기화하고 두 시스템 간에 동시 변경 사항을 해결합니다.
데이터를 기반으로 구축
명령 센터에서 로컬로 MongoDB Enterprise Advanced 실행합니다. MongoDB 데이터 계층을 사용하여 명령 센터 대시보드 및 기타 미션 애플리케이션을 빌드 . 데이터 및 액세스 계층이 배치되면 별도의 저장 및 동기화 서비스를 구축하는 대신 애플리케이션 기능에 집중할 수 있습니다.
이 패턴 사용하여 다음을 수행할 수 있습니다.
다양한 미션 데이터를 문서로 저장합니다.
표준 드라이버 및 API를 사용하여 애플리케이션을 MongoDB 에 연결합니다.
연결이 끊긴 동기화를 위해 Ditto와 통합합니다.
하나의 공유 데이터 계층을 명령 센터 애플리케이션에 노출합니다.
새로운 미션 워크플로가 나타나면 애플리케이션 확장하세요.
참조 아키텍처
이 아키텍처는 명령 센터의 애플리케이션 데이터 계층으로 MongoDB Enterprise Advanced 사용합니다. MongoDB 미션 문서를 저장하고 대시보드, API 및 운영 워크플로를 제공합니다. MongoDB Ops Manager 로컬 MongoDB deployment 관리합니다.
Ditto MongoDB Connector는 MongoDB Ditto Server에 연결합니다. Ditto Server는 Ditto Atak Plugin을 통해 MongoDB 데이터 계층을 Atak의 전술적 에지에 있는 P2P(peer-to-peer) 메시에 연결합니다. 그런 다음 두 시스템 간의 충돌 없이 변경 사항이 MongoDB 와 Ditto 간에 동기화됩니다.
그림 1. 명령 센터 데이터 계층인 MongoDB Enterprise Advanced 보여주는 아키텍처로, Ditto MongoDB Connector를 통해 Atak 필드 장치를 제공하는 Ditto P2P(peer-to-peer) 메시에 연결되어 있습니다.
택티컬 엣지
필드 장치가 조치 점 근처에서 미션 데이터를 생성하고 교환하는 계층인 전술적 엣지에는 연결이 변경되거나 실패할 수 있는 곳에서 작동하는 사용자와 장치가 포함됩니다.
ATAK는 위치 , 지도, 채팅 및 미션 데이터를 공유 위한 필드 애플리케이션 제공합니다. Atak Plugin은 해당 데이터를 캡처하고 P2P(peer-to-peer) 메시를 통해 주변 장치와 동기화합니다. 이와 동일한 방식으로 저전력 저전력 저전력 저전력(Wi-Fi), P2P(peer-to-peer) Wi-Fi, MANET 호환 경로 등 사용 가능한 전송을 사용합니다. 또한 메시의 여러 장치에 데이터를 릴레이할 수도 있습니다.
에지는 애플리케이션 데이터의 또 다른 소스 역할을 합니다. 동일한 방식으로 해당 데이터를 계속 사용할 수 있으며 기기 간에 이동합니다. MongoDB 동기화된 문서를 저장하고 명령 센터 애플리케이션에서 사용할 수 있도록 합니다.
명령 센터 통합
MongoDB Enterprise Advanced 중앙 애플리케이션 데이터 계층을 제공합니다. 대시보드 MongoDB 에서 미션 데이터를 읽고 지도, 노드 상태 보기 및 커뮤니케이션 피드를 통해 표시합니다.
Ditto MongoDB Connector는 Ditto 및 MongoDB 의 변경 사항을 수신 대기합니다. 이는 이러한 변경 사항을 다른 시스템에 적용하고 두 데이터 저장소를 정렬된 상태로 유지합니다.
MongoDB 기반으로 구축된 애플리케이션은 ATAK 장치에 직접 연결하지 않고도 미션 문서를 쿼리 하고 업데이트 . 연결이 끊긴 에지 장치와의 전송도 마찬가지입니다. 이 통합을 통해 ATAK 기기에 직접 대응하는 대신 MongoDB 에 대해 명령 센터 애플리케이션 빌드 할 수 있습니다.
이 설계가 복원력이 뛰어난 이유
MongoDB 미션 데이터를 저장합니다. 필드 장치를 동기화된 상태로 유지합니다. ATAK는 필드 애플리케이션 제공합니다. connector 두 환경을 모두 연결하고 동시 변경 사항을 해결합니다.
이렇게 분리하면 각 기술이 책임에 집중할 수 있습니다. MongoDB 애플리케이션 데이터 계층을 제공하고, Ditto는 전술적 엣지를 통해 데이터를 동기화하며, Atak은 필드 경험을 제공합니다.
이 설계를 사용하면 모든 기기나 네트워크 조건에 대해 별도의 저장 모델을 구현하지 않고도 MongoDB의 문서 모델 기반으로 애플리케이션 기능을 빌드 할 수 있습니다.
데이터 모델 접근 방식
애플리케이션 사용하는 방식과 일치하는 문서 에 각 미션 엔터티를 저장합니다.
위치 업데이트, 지도 객체 및 채팅 메시지에는 서로 다른 필드와 업데이트 패턴이 있습니다. 모든 엔터티를 하나의 엄격한 스키마 에 넣지 말고 별도의 컬렉션에 저장하세요. 이 접근 방식은 데이터 모델 엣지 생성 데이터에 가깝게 유지하고 Ditto와 MongoDB 간의 변환 코드를 줄입니다. 이러한 문서는 연결이 끊긴 에지에서 실시간 분석 및 AI 쿼리에 사용될 수 있습니다.
Ditto AtAK 플러그인은 Ditto 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 }
압축 스키마 동기화된 문서 ATAK에서 생성된 데이터와 가깝게 유지합니다. 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는 서로 다른 데이터 및 액세스 패턴을 나타내므로 별도의 컬렉션에 보관하세요. 이 접근 방식을 사용하면 모든 미션 데이터를 하나의 엄격한 스키마 로 강제하지 않고도 지도, 상태 및 통신 기능을 빌드 할 수 있습니다.
컬렉션 | 목적 | 애플리케이션 사용 예시 |
|---|---|---|
| 위치 및 상태 데이터 | 필드 행위자와 오래된 노드를 렌더링합니다. |
| 영구 맵 객체 | 공유 마커 및 지도 그래픽을 표시합니다. |
| 메시지 및 대화 메타데이터 | 명령 센터 대시보드 에 커뮤니케이션을 표시합니다. |
각 컬렉션 하나의 미션 기능에 사용하고 모든 컬렉션을 하나의 MongoDB 데이터 계층에 보관합니다. 기존 컬렉션을 다시 설계하지 않고도 필드 또는 새 미션 엔터티를 추가할 수 있습니다.
하나의 유연한 데이터 계층을 기반으로 구축
MongoDB 에 대한 대시보드, API 및 명령 센터 워크플로를 빌드합니다. 각 컬렉션 목적에 따라 쿼리하고 에지에서 도착하는 문서 구조를 유지합니다.
이 접근 방식을 사용하여 다음을 수행할 수 있습니다.
Ditto와 MongoDB 간의 데이터 변환을 줄입니다.
각 미션 엔터티를 쉽게 쿼리 할 수 있습니다.
관련 없는 문서를 다시 설계하지 않고도 새 필드를 추가할 수 있습니다.
모든 기기나 워크플로에 대해 별도의 저장 모델을 만들지 않고도 애플리케이션 확장할 수 있습니다.
솔루션 빌드
tak-situational-demo GitHub 리포지토리 사용하여 솔루션을 배포 하고 탐색합니다.
필드 장치 준비
계속 진행하기 전에 다음 요구 사항을 충족하는지 확인하세요.
두 개 이상의 Android 기기를 설정합니다.
각 기기가 최소 4 GB RAM 으로 Android 13 이상을 실행하는지 확인합니다.
모든 장치에 ATAK CIV를 설치하고 GPS 액세스 포함하여 필요한 모든 장치 권한을 승인합니다.
Atak Plugin을 다운로드하고 각 휴대폰에 애플리케이션 사이드로드합니다.
모든 장치를 명령 스테이션을 호스팅하는 로컬 Wi-Fi 환경에 연결합니다.
명령 센터 호스팅하다 준비
계속 진행하기 전에 다음 요구 사항을 충족하는지 확인하세요.
Docker, Kind, kubectl 및 Helm을 설치합니다. 임베디드 자동화 스크립트는 Kubernetes 배포서버 자동으로 빌드 .
32 GB 의 시스템 메모리를 할당합니다. 시스템에는 최소 24 GB 필요하며, 이는 Ops Manager, 서버 서버 로그 및 MongoDB Enterprise Advanced 합이 16 GB 한도를 초과하기 때문입니다.
컨테이너 이미지 및 영구 데이터 볼륨을 위한 30 GB 의 로컬 저장 용량 예약합니다.
포트 80 및 443를 지워 트래픽을 운영 웹 뷰 및 Ditto Server 구성 요소로 라우팅합니다.
명령 센터 스택 배포
루트 폴더에서 make setup를 실행합니다. 이 스크립트 중지된 지점에서 다시 시작하므로 오류가 발생한 후에도 안전하게 다시 실행할 수 있습니다. 구성 요소를 순차적으로 초기화합니다.
Kubernetes 용 MongoDB 컨트롤러를 통한 Kubernetes 연산자 .
Enterprise Advanced 관리 위해 클러스터 내에서 작동하는MongoDB Ops Manager .
Ops Manager 통해 프로비저닝된 MongoDB Enterprise Advanced 복제본 세트 .
자체 호스팅 Ditto Server 인스턴스 와 함께 Ditto Operator를 제공합니다.
네이티브 Kubernetes 객체 로 프로비저닝된 MongoDB Connector와 동일합니다.
명령 센터 대시보드 애플리케이션.
이 스크립트 이 솔루션에 대한 데이터베이스, 사용자 및 컬렉션을 생성합니다. 초기 설정 시 25~35분 동안 기다립니다.
완료되면 출력에 대시보드 URL, Compass 연결 문자열, Ops Manager 자격 증명 및 에지 장치에 필요한 페어링 값이 표시됩니다.
make verify를 실행하여 환경의 유효성을 검사합니다. 이 단계에서는 MongoDB 에 문서 삽입하고 Ditto Server를 통해 문서를 검색하여 양방향 동기화를 확인합니다.
전체 명령, 구성 세부 정보 및 배포서버 매니페스트를 보려면 TAK 상황 데모 리포지토리 에서 docs/RUN_LOCAL.md를 검토 .
동기화 구성
Ditto MongoDB Connector를 사용하여 구성을 자동화하세요. connector Kubernetes BigPeerDataBridge 리소스 로 선언하여 전술 유닛 및 명령 센터 애플리케이션에서 track, mapitem, chat, file 및 alert 컬렉션을 양방향으로 동기화 .
MongoDB 와 동일한 Kubernetes 클러스터 에 Ditto Server를 호스팅하여 내부적으로 트래픽을 라우팅합니다. 공용 엔드포인트를 노출하거나 IP 허용 목록을 관리하지 않고 표준 MongoDB 연결 문자열을 통해 연결합니다.
connector 초기화하기 전에 다음 전제 조건을 확인합니다.
대상 데이터베이스 및 컬렉션이 존재하는지 확인합니다.
connector 사용자에게
readWrite권한을 부여합니다.플랫폼 간 인과적 일관성 유지하려면 동기화된 모든 컬렉션에서
changeStreamPreAndPostImages를 활성화합니다.
일시 삭제 플래그(_r: true)를 적용하여 오래된 문서를 표시합니다. MongoDB 의 강제 제거는 동일한 방식으로 영구적인 제거 작업을 트리거하다 . _r: false 필터를 사용하여 운영 데이터를 쿼리합니다.
전술 유닛 쌍
작동 UI 실행하고 Add Device(장치 추가)를 클릭합니다. 이 오버레이는 앱 ID, 인증 엔드포인트, WebSocket 엔드포인트 및 플레이그라운드 토큰과 같은 텍스트 매개변수와 함께 QR 코드를 표시합니다. make pair를 실행하여 터미널에 이러한 자격 증명 표시합니다.
각 대상 hardware 장치에서 ATAK를 실행하고 Atak Plugin을 실행합니다. 생성된 QR 코드를 스캔하거나 플러그인 환경 설정에 연결 변수를 입력합니다. 네트워크 트래픽을 로컬 Ditto Server 배포서버 로 전달하려면 Ditto Cloud 동기화를 끕니다.
위치 서비스를 켜서 AtAK가 위치 원격 측정을 생성하도록 합니다. 로컬 메시 네트워크에 참여하는 모든 장치에 대해 이 구성 단계를 반복합니다. 원격 분석 업데이트는 중앙 대시보드 맵에 빠르게 렌더링됩니다.
단계별 기기 온보딩 지침은 TAK 상황 데모 리포지토리 에서 docs/RUN_LOCAL.md를 검토하세요.
운영 워크플로 살펴보기
http://localhost 에서 운영 대시보드 액세스합니다. 매핑 인터페이스는 필드 행위자를 표시하고 비활성 노드를 흐리게 표시합니다. 텔레메트리 패널은 활성 콜사인을 제공하고 채팅 창 필드 전송을 스트리밍합니다.
중앙 인터페이스에서 직접 메시지를 발송하거나 지도 마커를 드롭하세요. 대시보드 MongoDB 에 새 문서를 작성하고, connector Ditto Server를 통해 공유 데이터 계층 전체에 걸쳐 쌍을 이루는 모든 핸드헬드 장치에 업데이트를 브로드캐스트합니다.
MongoDB Compass localhost:27017에 연결하여 원시 애플리케이션 문서를 검사하고,Ops Manager 열어 프로덕션 관리자처럼 클러스터 를 모니터 하세요.
주요 학습 사항
애플리케이션 데이터 계층 먼저 구축: MongoDB Enterprise Advanced 사용하여 대시보드, API 및 명령 센터 워크플로를 위한 미션 데이터를 저장 하고 제공 .
미션 엔터티를 문서로 모델링: MongoDB 컬렉션을 사용하여 하나의 엄격한 스키마 강제하지 않고도 위치 데이터, 지도 객체, 채팅 메시지, 파일 및 경고를 저장 .
에지에 MongoDB 연결: MongoDB Connector를 사용하여 MongoDB 지원 애플리케이션을 연결이 끊긴 ATAK 장치로 확장할 수 있습니다.
애플리케이션 개발 간소화 : 각 기기 또는 네트워크 조건에 대해 별도의 저장 모델을 생성하는 대신 하나의 MongoDB 데이터 계층에 대해 애플리케이션 기능을 빌드합니다.
연결이 끊긴 작업을 위한 설계: MongoDB의 지속형 문서 저장 와 Ditto의 로컬 우선 동기화 및 충돌 처리를 결합합니다.
작성자
티모시 말런드, MongoDB
Alberto Camarena Rodriguez, MongoDB