Sfondodecodifica efficiente di strutture di testo e binari (pacchetti)
V'è uno strumento ben noto chiamato Wireshark. Lo sto usando da anni. È grandioso, ma le prestazioni sono il problema. Lo scenario di utilizzo comune include diverse fasi di preparazione dei dati al fine di estrarre un sottoinsieme di dati da analizzare in seguito. Senza quel passo ci vogliono pochi minuti per filtrare (con grandi tracce Wireshark è quasi inutilizzabile).
L'idea attuale è quella di creare una soluzione migliore, veloce, parallela ed efficiente, da utilizzare come dati aggregatore/memorizzazione.
Requisiti
Il requisito reale è quello di utilizzare tutta la potenza fornita da hardware moderno. Dovrei dire che c'è una stanza per diversi tipi di ottimizzazione e spero di aver fatto un buon lavoro negli strati superiori, ma la tecnologia è la domanda principale in questo momento. Secondo il disegno attuale ci sono vari gusti di decodificatori a pacchetto (dissettori):
- decoder interattivi: logica di decodifica può essere facilmente modificata in runtime. Tale approccio può essere piuttosto utile per gli sviluppatori di protocolli: la velocità di decodifica non è così importante, ma la flessibilità e risultati rapidi sono più importanti
- decodificatori incorporabili: può essere utilizzato come libreria. Questo tipo dovrebbe avere buone prestazioni e essere abbastanza flessibile da utilizzare tutte le CPU e i core disponibili
- decodificatori come servizio: è possibile accedere tramite un'API pulita. Questo tipo dovrebbe fornire la migliore delle prestazioni e dell'efficienza razza
Risultati
mia soluzione attuale è decoder JVM-based. L'idea reale è di riutilizzare il codice, eliminare il porting, ecc., Ma avere comunque una buona efficienza.
- decoder interattivi: attuate in Groovy
- decoder Embeddabili: implementato su Java
- decodificatori come servizio: Tomcat + ottimizzazioni + decoder embeddable avvolti in un servlet (binari in XML out)
Problemi da risolvere
- Groovy offre modo di tanto potere e tutto, ma Lucks espressività in questo caso particolare
- protocollo di decodifica in una struttura ad albero è un vicolo cieco - troppe risorse sono semplicemente sprecati
- Il consumo di memoria è un po ' difficile da controllare.Ho fatto ottimizzazioni diverse, ma ancora non è felice con profilatura risultati
- Tomcat con varie campane e fischietti ancora presenta molto luminosa (soprattutto la gestione di connessione)
sto facendo destra con JVM ovunque? Vedi qualche altro modo valido ed elegante per raggiungere l'obiettivo iniziale: ottenere decodificatori di protocollo altamente scalabili ed efficienti facili da scrivere?
Il protocollo, il formato dei risultati, ecc. Non sono corretti.
Puoi restringere la tua domanda? Questo è incredibilmente aperto. Non so davvero che tipo di risposte stai cercando. –
Sono d'accordo con @JohnKugelman, questa potrebbe essere una bella domanda, ma come affermato è troppo ampia. Vorrei provare a rimuovere il più possibile e cercare di mantenere le informazioni pertinenti a ciò che stai veramente chiedendo (sui frame del protocollo di decodifica). Trascorri 4 paragaphs e 2 elenchi puntati parlando di cose extra e solo 1 frase con la tua vera domanda. – durron597
Ho modificato la domanda fornendo dettagli preziosi e rimuovendo alcune altre cose. Non esiste una sola soluzione. Potrebbero essere proposte molte o forse molte risposte preziose, fornendo spunti interessanti, descrivendo tecniche inusuali e mettendo in luce buone soluzioni architettoniche. –