Komento- ja hallintakojetaulu ei ole liiketoimintatietotyökalu sotilaallisella maalipinnalla. Arkkitehtuuripäätökset, jotka määräävät toimiiko BI-kojetaulu riittävästi — kyselyintervалlit, sivulatauksen päivitysjaksot, synkroniset API-kutsut — ovat täsmälleen ne päätökset, jotka aiheuttavat puolustuksen C2-kojetaulun epäonnistumisen kentällä. Uhkamalli, verkkoympäristö ja operatiiviset panokset ovat perustavanlaatuisesti erilaisia.

Tämä artikkeli käsittelee tärkeimpiä arkkitehtuuripäätöksiä, joita kehitystiimi kohtaa rakentaessaan C2-kojetaulua puolustuskäyttöön: miten jakaa käyttöliittymä taustaosasta, miten nielaista reaaliaikaista dataa ylikuormittamatta käyttöliittymää, mitä kartanrenderöintiteknologiaa valita, miten rakentaa roolipohjainen pääsynhallinta eri komentotasoille ja miten ylläpitää suorituskykyä kun ratamäärät saavuttavat viisi tai kuusi numeroa.

Käyttöliittymän / taustajärjestelmän jako puolustuskojetauluissa

Vallitseva kuvio modernissa C2-kojetaulukehityksessä on React- tai Vue-yksisivuinen sovellus (SPA), joka kuluttaa dataa joukosta taustamikropalveluita WebSocket-yhteyksien kautta reaaliaikaiselle datalle ja REST:lle konfiguraatio- ja historiallisille kyselyille. Tämä jako tarjoaa selkeän huolten erottamisen: käyttöliittymä vastaa tilan renderöinnistä, tausta auktoritatiivisen tilan ylläpidosta ja deltojen lähetyksestä.

Mikropalvelutausta koostuu tyypillisesti vähintään neljästä palvelusta minimaalissa tuotannossa: ratapalvelu (ylläpitää live-objektitietokantaa), viestintäpalvelu (käsittelee CoT- ja NFFI-nielua), hälytypalvelu (arvioi sääntöjä ja julkaisee ilmoituksia) ja autentikointipalvelu (validoi JWT-tunnukset ja valvoo RBAC-politiikkoja). Jokainen palvelu on konttiteistettu — tyypillisesti Docker Kubernetesilla esikuntakäyttöönotoissa tai Docker Compose karkaistulla palvelimella eteensijoitetuissa konfiguraatioissa.

Kriittinen arkkitehtuurirajoite, joka erottaa puolustuskojetaulut kaupallisesta SaaS:ista, on vaatimus toimia ilmaraon tai vakavasti kaistanleveysrajoitettujen ympäristöissä. Tämä tarkoittaa, että koko käyttöliittymäpaketti, kaikki karttalaattat ja kaikki geospatiaalikirjastot täytyy olla saatavissa paikallisesti. Käyttöliittymän rakennusputkiston täytyy tuottaa täysin itsenäinen artefakti, joka toimii ilman CDN-riippuvuuksia. Käytännössä tämä tarkoittaa Mapbox GL JS:n, Cesiumin ja kaikkien npm-riippuvuuksien vendorointia rakennustulosteeseen ja kaiken tarjoamista paikalliselta palvelimelta.

Arkkitehtuurikaavio
C2-kojetaulu — Taustapalvelut ja reaaliaikainen datavirta
CoT / NFFI-syötteet Tutka- / anturiradат Tiedustelupeitteet Logistiikkadata
Ratapalvelu
Live-objektitietokanta В· sijaintitilat В· radan elinkaari
Viestintäpalvelu
CoT / NFFI-nielu В· normalisointi В· syГ¶tteen validointi
Hälytypalvelu
SääntГ¶moottori В· R-puu-spatiaalinen indeksi В· INAKTIIVINEN → AKTIIVINEN → JÄÄHDYTYS
Autentikointipalvelu
JWT-validointi В· RBAC-politiikka В· pyyntГ¶kohtainen laajuustarkistus
Redis Pub/Sub tai NATS JetStream
WebSocket-yhdyskäytävä
Levitys todentahtuneisiin istuntoihin В· istuntokohtainen AoI-suodatin В· takaisenpaine + nopeusrajoitus В· vain delta-tapahtumat
↓ WebSocket — radat + hГ¤lytykset, <200ms paikallisesti  В·  REST — konfiguraatio, historia, logistiikka
React SPA -käyttöliittymä
WebGL-ratakerros · kartamoottori · RBAC-portattu käyttöliittymä · Web Worker -ratatila · itsenäinen paketti (ei CDN, ilmarakovalmis)
Lukupolku (WebSocket) ja kirjoituspolku (REST) on erotettu API-kerroksessa — eri infrastruktuuri, eri viiveprofiili, eri vikatilat.
C2-kojetaulun taustarkkitehtuuri — Corvus Intelligence. Docker Compose eteensijoitetuille konfiguraatioille; Kubernetes esikunnille. Kaikki neljä palvelua toimivat luokitellun verkon kehyksen sisällä.

Reaaliaikainen datan nielu: WebSocket vs kysely

Ratapäivityksille WebSocket on ainoa elinkelpoeinen valinta taktisilla viivevaatimuksilla. HTTP-kyselymenetelmä 5 sekunnin välein tuo keskimäärin 2,5 sekunnin viiveen plus palvelimen käsittelyajan, mikä on hyväksymätöntä ilmaradoille joissa 10 sekunnin vanhenemiskynnys on voimassa. WebSocket-yhteydet, asianmukaisesti hallittuna, toimittavat alle 200ms päästä päähän -viiveen paikallisverkossa ja alle 500ms taktisella radioyhteydellä.

Vakiototeuttamiskuvio on levittävä WebSocket-yhdyskäytävä. Taustajärjestelmän ratapalvelu julkaisee ratadeltoja (ei täyttä tilaa) sisäiselle viestibussille — Redis Pub/Sub tai NATS JetStream ovat yleisiä valintoja. WebSocket-yhdyskäytävä tilaa bussista, ylläpitää altaata todennettuja selaistuntoita ja levittää relevantit tapahtumat kuhunkin istuntoon istunnon roolin ja kiinnostusalueen suodattimen perusteella.

Takaisenpaine on kriittinen huolenaihe, jonka monet varhaiset C2-toteutukset jättävät huomiotta. Kun käyttöliittymä ei pysty käsittelemään tapahtumia yhtä nopeasti kuin ne saapuvat — esimerkiksi korkean intensiteetin tilanteessa kun satoja ratoja päivittyy samanaikaisesti — WebSocket-puskuri voi täyttyä ja yhteys voi katketa. Ratkaisu on asiakaspuolen tapahtumajonо konfiguroitavalla syvyydellä ja pudottamispolitiikalla (vanhin ensin on vakio ratapäivityksille, koska uusin sijainti on ainoa relevantti). Taustajärjestelmän yhdyskäytävän täytyy myös toteuttaa istuntokohtainen nopeusrajoitus estääkseen hidasta asiakasta tukkimasta viestibussia.

Logistiikkadatalle ja tiedustelupeitteiden päivityksille, jotka päivittyvät minuuttiskaalalla sekuntiskaalan sijaan, REST-kysely on hyväksyttävä ja yksinkertaisempi toteuttaa oikein. Kojetaulun ei pitäisi käyttää WebSocketia datalle, joka ei vaadi reaaliaikaista toimitusta — pysyvien yhteyksien liiallinen käyttö lisää palvelinpuolen resurssienkulutusta ilman hyötyä.

Karttakerroksen teknologiat

Karttakerros on C2-kojetaulun visuaalisesti tärkein komponentti ja se, jolla on merkittävimmät teknologiavalintaimplikaatiot. Kolme vaihtoehtoa hallitsee puolustuksen C2-kehitystä: Mapbox GL JS, Cesium.js ja mukautettu WebGL-renderöinti OpenLayers- tai Leaflet-kirjaston päällä.

Mapbox GL JS on eniten käytetty vaihtoehto 2D-operatiivisen kuvan kojetauluille. Se renderöi vektorilaattoja WebGL:llä, tukee mukautettua kerrosjärjestystä ja käsittelee dynaamisen muotoilun (ratasymboolin värin muuttaminen luokittelun perusteella) tehokkaasti. Kriittisesti luokiteltujen verkkojen tuotannoissa, Mapbox GL JS voidaan isännöidä täysin itse: tarjoile oma vektorilaattajoukko TileServer-GL- tai MapTiler Server -instanssista, eikä kirjastolla ole ulkoisia verkkoiriippuvuuksia. Suurin rajoite on vain 2D-renderöinti — Mapbox GL JS ei tue todellista 3D-maastoa tai maapalloprojektiota, mikä rajoittaa sen hyödyllisyyttä ilma- ja ohjuspuolustusssenaarioissa joissa korkeus on operatiivisesti merkittävä.

Cesium.js on standardi 3D-maapallorenderöintiin. Se tukee ellipsoidaalista maapallotilaa, tarkkaa 3D-maastoa Cesium World Terrain- tai mukautetuilla maastolaatoilla ja aikaдинaamista visualisointia — ratahistoriat voidaan renderöidä jälkeinä maapallolla tarkalla aikaetenemisellä. Suorituskykykustannus on todellinen: Cesium vaatii erillisen GPU:n ja modernin CPU:n sujuvaan renderöintiin suurilla ratamäärillä, mikä on rajoite joillekin karkaistun laitteiston profiileille. Cesiumin laattaformaatti (3D Tiles) ja maastoformaatti (quantized-mesh) ovat avoimia standardeja, ja itsехostattua Cesium ion -välityspalvelinta voidaan käyttää luokitelluissa verkoissa.

Mukautetut laattapalvelimet luokitelluille verkoille ovat vaatimus useimmissa kansallisissa puolustusohjelmissa. Luokiteltu verkkoympäristö kieltää kaikki ulkoiset datakutsut, mikä tarkoittaa, että kaikki taustakuvat, maastodata ja vektorikartadata täytyy tarjota verkon kehyksen sisältä. MapTiler Server Enterprise ja TileServer-GL ovat kaksi yleisintä vaihtoehtoa. Molemmat tukevat MBTiles-muotoa (SQLite-pohjainen laattasäilöformaatti) ja voivat tarjoilla sekä rasteri- että vektorilaattoja. Teatteritason käyttöönotoissa PostGIS-tuettu GeoServer-instanssi voi tarjoilla dynaamisia piirroskerroksia — tiet, hydrografia, hallinnolliset rajat — luokitelluista maantieteellisistä tietokannoista.

CMP — Vertailu
Karttakerroksen teknologian valitsin
Mapbox GL JS Cesium.js Mukautettu laattapalvelin
Projektio vain 2D 2D + 3D maapallo Rasteri / vektori
GPU-vaatimus Integroitu Erillinen Palvelinpuoli
Itsehostattavissa ✓ KyllГ¤ ✓ KyllГ¤ (ion-vГ¤lityspalvelin) ✓ Vaaditaan
3D-maasto ✗ Ei ✓ KyllГ¤ Vain rasteri
Suorituskyky @ 5K rataa 60 fps 30–45 fps Laatasta riippuen
Parhaiten sopii Maa- / pinta-COP Ilma- ja ohjuspuolustus Luokiteltu verkko -peruskerros
Karttakerroksen teknologioiden vertailu puolustuksen C2-kojetauluille — itsehostattavuus on neuvottelematon luokitelluissa verkoissa.

Roolipohjainen pääsynhallinta komentoтаsoille

C2-kojetaulu palvelee henkilöstöä, jolla on perustavanlaatuisesti erilaiset tietotarpeet ja valtuutustasot. Prikaatitason komentaja tarvitsee täyden operatiivisen kuvan tulenhallintavaltuuksilla. Sama-tason operaattori tarvitsee ratojen hallinnan ja raportointikyvyn, mutta ei tulikomennon aloittamista. Analyytikko tarvitsee lukuoikeuden kaikkeen ratadataan sekä tiedustelupeitteet, mutta ei kirjoitusoikeutta ratatietokantaan. Logistiikkoupseeri tarvitsee reittioverlayt ja logistiikkasolmun tilan, mutta ei pääsyä tiedusteluosastoihin.

Vakiototeuttaminen käyttää JWT-tunnuksia upotetuilla väitteillä, jotka koodaavat sekä käyttäjän roolin että luokittelutason. Taustajärjestelmän API valvoo pääsyä resurssin tasolla: pyyntö SECRET-luokitellulle tiedustelupeittelle hylätään, jos JWT-väite ei sisällä asianmukaista selvitysattribuuttia. Käyttöliittymä käyttää samoja väitteitä UI-elementtien ehdolliseen renderöintiin — "Tulikomento"-painiketta ei renderöidä käyttäjille joilla ei ole FIRE_CONTROL-roolia, ei pelkästään poisteta käytöstä.

Neljätasoinen roolihierarkia toimii hyvin prikaatille ja sen alle: KOMENTAJA (täysi pääsy, tehtävänantovelvollisuus, tulenhallinta), OPERAATTORI (ratojen hallinta, raportin lähettäminen, peitteiden muokkaus), ANALYYTIKKO (lue-kaikki, ei kirjoitusta), LOGISTIIKKA (logistiikkakerros luku/kirjoitus, ei tiedusteluoikeutta). Jokainen rooli kartoittuu joukoksi lupalaajuuksia JWT:ssä. Autentikointipalvelu validoi JWT-allekirjoituksen ja vanhentumisen jokaisella API-kutsulla; roolilaaajuuden validointi tapahtuu API-yhdyskäytävässä ennen kuin pyynnöt saavuttavat yksittäisiä mikropalveluita.

Suorituskyky skaalassa: 10 000+ samanaikaista rataa

Ratan skaalattavuus on useimmiten aliarvioitu haaste C2-kojetaulukehityksessä. Prikaatitason järjestelmällä korkean intensiteetin ympäristössä voi olla 500–2 000 samanaikaista rataa. Teatteritason järjestelmällä, joka seuraa ilma-, maa-, meri- ja avaruusobjekteja samanaikaisesti, voi ylittää 50 000. Selaimen renderöintiputkisto on pullonkaula suurilla ratamäärillä.

Keskeinen arkkitehtuuripäätös on renderöidäänkö radat DOM-elementteinä, SVG:nä, Canvas 2D:nä vai WebGL:nä. DOM- ja SVG-renderöinti epäonnistuu noin 1 000 elementin yläpuolella — selaimen asettelumoottori ei pysty ylläpitämään 30 FPS:ää, kun se laskee uudelleen sijainteja tuhansille DOM-solmuille joka sekunti. Canvas 2D skaalautuu paremmin, mutta on CPU-sidottu eikä pysty hyödyntämään GPU-kiihdytystä komposoinnissa. WebGL on ainoa vaihtoehto, joka skaalautuu 10 000+ rataan 60 FPS:llä käyttäen instanssirenderöintiä piirtääkseen tuhansia identtisiä symboligeometrioita yhdellä piirtokutsulla.

Mapbox GL JS ja Cesium käyttävät molemmat WebGL:ää sisäisesti ja tukevat mukautettuja kerroksia. Radoille suositeltu kuvio on mukautettu WebGL-kerros, joka ylläpitää Float32Array-puskuria ratapositioista, päivitettynä WebSocket-tapahtumankäsittelijän kautta. Jokainen kehys, puskuri ladataan GPU:lle vertex-puskurina ja piirretään yhdellä instanssipiirtokutsulla. Symbolin kierto (suuntaaville radoille), väri (luokittelulle) ja koko (korostukselle) on koodattu per-instanssiattribuuttina vertex-puskurissa, eikä vaadi CPU-puolen iterointia kehystä kohti.

10 000+ radalla pullonkaula siirtyy renderöinnistä JavaScript-käsittelyyn saapuvista WebSocket-tapahtumista. Ratapäivitystapahtuma täytyy deserialidoida JSON:sta, validoida, kirjoittaa muistissa olevaan ratavarастoon ja asettaa jonoon seuraavaa renderöintikehystä varten. 100 päivitystä sekunnissa 10 000 radan yli on miljoona operaatiota sekunnissa JavaScript-säikeessä. Ratkaisu on siirtää ratatilan hallinta Web Workeriin: pääsäie vastaanottaa raakoja WebSocket-kehyksiä ja siirtää ne (käyttäen siirrettäviä ArrayBuffer-objekteja, ei rakenteista kloonausta) workerille, joka käsittelee päivitykset ja siirtää päivitetyn sijaintipuskurin takaisin pääsäikeelle GPU-latausta varten. Tämä kuvio pitää pääsäikeen vapaan käyttäjäinteraktioille ja ylläpitää sujuvan renderöinnin.

MTX — Matriisi
Renderöintiteknologia vs ratamäärä
Renderöijä Max sujuvat radat FPS @ 1K Laskenta Johtopäätös
DOM < 200 12–18 CPU (asettelu) Vain prototyypit
SVG < 500 20–28 CPU (maalaaus) Pienimuotoinen COP
Canvas 2D ~3 000 55–60 CPU-sidottu Prikaatitaso
WebGL 10 000+ 60 (vakaa) GPU (instanssit) Teatteritaso
WebGL-instanssoitu renderöinti piirtää tuhansia symboleita yhdellä GPU-piirtokutsulla. Siirrä ratatilan hallinta Web Workeriin pitääksesi pääsäikeen vapaana 10K+ päivitysnopeuksilla.
RenderГ¶intiteknologiamatriisi — DOM/SVG kattavat prikaatitason alla; vain WebGL kГ¤sittelee teatteritason ratamäärГ¤t 60 fps:llГ¤.

Arkkitehtuuriperiaate: Erota lukupolut kirjoituspoluista API-kerroksessa. Rataluvut ovat suuritaajuisia ja viiveherkkiä; ratakirjoitukset (operaattorin korjaukset, tehtävänannat) ovat pienikaajuisia ja oikeellisuuskriittisiä. Näillä on erilaiset infrastruktuurivaatimukset, eivätkä ne saisi jakaa samaa palvelukerrosta.

Hälytylogiikan arkkitehtuuri

Hälytylogiikan C2-kojetaulussa täytyy olla deterministinen, tarkastettavissa oleva ja nopea. Hälytys, joka laukeaa 30 sekuntia laukaisevaa tilaa jälkeen, on operatiivisesti hyödytön; hälytys, joka laukeaa väärin, heikentää operaattorin luottamusta. Hälytypalvelu arvioi sääntöjä live-ratatilaa vasten jokaisesta viestibussin päivitystapahtumasta.

Säännöt tallennetaan jäsenneltyinä JSON-politiikka-asiakirjoina: ehto (spatiaalinen — rata saapuu määriteltyyn monikulmaan; attribuutti — radan nopeus ylittää kynnyksen; ajallinen — rataa ei ole päivitetty N sekuntiin) ja toiminto (puskee WebSocket-ilmoituksen, luo hälytystietueen, laukaisee ulkoisen integraation). Sääntömoottori arvioi spatiaalisia ehtoja käyttäen spatiaalista indeksiä (R-puu on vakio) O(log n) -monikulmaisten risteysten tarkistuksille — jokaisen radan arvioiminen kaikkia monikulmia vasten jokaisella päivityksellä on O(n·m) eikä skaalaudu muutaman sadan sääntöön.

Hälytyksen estologiikka — saman hälytyksen toistuvien laukeamisten estäminen samalle ehdolle — toteutetaan tilakoneena per (sääntö, rata) -pari. Hälytys siirtyy INAKTIIVISESTA AKTIIVISEKSI kun ehto täyttyy ensimmäisen kerran, pysyy AKTIIVISENA kunnes ehto häviää, ja siirtyy JÄÄHDYTYS-tilaan ennen paluuta INAKTIIVISEKSI. Tämä estää hälytysmyrskyt nopean ratan liikkumisen jaksoilla.