Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vi vet hvor det blir kø - Store mengder trafikk...

Vi vet hvor det blir kø - Store mengder trafikkdata med Akka, Elasticsearch og OPC-UA

Video of presentation from JavaZone 2014: https://vimeo.com/105771495 (Norsk tale).

Vegvesenet er i ferd med å bygge et nytt system for innsamling av trafikkdata i sanntid basert på Akka, Elasticsearch og OPC-UA. Her får du en gjennomgang av prosjektet, arkitekturen, erfaringer som er gjort i forhold til de valgte komponentene, clustering, skalerbarhet og ytelse og noen løsninger på utfordringer vi har møtt underveis.

Jan Fredrik Wedén

September 10, 2014
Tweet

More Decks by Jan Fredrik Wedén

Other Decks in Programming

Transcript

  1. VI VET HVOR DET BLIR KØ Store mengder trafikkdata med

    Akka og Elasticsearch (og en tysker ved navn OPC-UA) JavaZone 2014 Jan Fredrik Wedén
  2. 15 års fartstid som utvikler og konsulent Ansatt i BEKK

    Consulting Digger JVMen og Java Fan av åpenhet Liker bratt friluftsliv Glad i aktiviteter med litt fart og spenning Everything is on the one! JAN FREDRIK WEDÉN
  3. Ca 5000 trafikkmålepunkter Ca 1200 av disse er kontinuerlig operative

    Maks døgntrafikk opp mot 120 000 kjøretøy Normalen på de mer trafikkerte målepunktene ligger mellom 40 000 og 100 000 kjøretøy i døgnet DAGENS SITUASJON
  4. 4 000 sanntidsstasjoner i 2018 6 000 – 10 000

    hendelser/sekund Ca 200 sanntidsstasjoner i 2014 500 – 1 000 hendelser/sekund i 2015 DATAINN - MÅLSETNINGER
  5. Vegkantutstyr snakker OPC-UA Trafikkhendelser skal kunne prosesseres i sanntid Vegkantutstyret

    lagrer inntil tre måneder med data lokalt DATAINN - FORUTSETNINGER
  6. Vegkantutstyr snakker OPC-UA Trafikkhendelser skal kunne prosesseres i sanntid Vegkantutstyret

    lagrer inntil tre måneder med data lokalt Systemet skal hente historiske data fra vegkantutstyret ved datatap, f.eks nettverksbrudd DATAINN - FORUTSETNINGER
  7. Vegkantutstyr snakker OPC-UA Trafikkhendelser skal kunne prosesseres i sanntid Vegkantutstyret

    lagrer inntil tre måneder med data lokalt Systemet skal hente historiske data fra vegkantutstyret ved datatap, f.eks nettverksbrudd Systemet skal fortsatt kunne levere aggregerte trafikkdata og statistikk DATAINN - FORUTSETNINGER
  8. Vegkantutstyr snakker OPC-UA Trafikkhendelser skal kunne prosesseres i sanntid Vegkantutstyret

    lagrer inntil tre måneder med data lokalt Systemet skal hente historiske data fra vegkantutstyret ved datatap, f.eks nettverksbrudd Systemet skal fortsatt kunne levere aggregerte trafikkdata og statistikk Vegkantutstyret må klargjøres og startes før trafikkhendelser kan mottas DATAINN - FORUTSETNINGER
  9. Proof of Concept ble kjørt i forkant av prosjektet Trafikkdata

    ble sendt inn via HTTP og ikke OPC-UA DATAINN – PROOF OF CONCEPT
  10. Proof of Concept ble kjørt i forkant av prosjektet Trafikkdata

    ble sendt inn via HTTP og ikke OPC-UA Valgte å prøve Elasticsearch og Akka DATAINN – PROOF OF CONCEPT
  11. Proof of Concept ble kjørt i forkant av prosjektet Trafikkdata

    ble sendt inn via HTTP og ikke OPC-UA Valgte å prøve Elasticsearch og Akka Brukte Gatling til å generere last fra en laptop Laptopen måtte gi tapt ved ca 1500 trafikkhendelser/sekund Mottak av trafikkhendelser på én node hadde ennå ikke nådd taket DATAINN – PROOF OF CONCEPT
  12. Proof of Concept viste at teknologien og rammeverkene med stor

    sannsynlighet ville klare kravene Akka •  så ut til å takle nødvendig last med lite overhead •  lovet også bra i forhold til å håndtere mange samtidige sanntidshendelser Elasticsearch •  støttet kjente aggregeringskrav på daværende tidspunkt “ut av boksen” •  så ut til å takle forventet datamengde på en god måte •  god støtte for partisjonering av data DATAINN - TEKNOLOGIVALG
  13. DATAINN - ARKITEKTUR OPC-UA Frontend (web)" REST Eksport Eksport Elastic-

    search" webapp" Akka" OPC-UA SDK" Web/REST" webapp" Akka" OPC-UA SDK" Web/REST" Elastic- search" webapp" Akka" OPC-UA SDK" Web/REST" Elastic- search" Elastic- search" webapp" Akka" OPC-UA SDK" Web/REST"
  14. Programmeringsmodellen til Akka passer bra til å håndtere mange samtidige

    trafikkhendelser DATAINN – THE GOOD PARTS (OF AKKA)
  15. Programmeringsmodellen til Akka passer bra til å håndtere mange samtidige

    trafikkhendelser La-det-feile og supervisor-hierarki er behagelig å jobbe med DATAINN – THE GOOD PARTS (OF AKKA)
  16. Programmeringsmodellen til Akka passer bra til å håndtere mange samtidige

    trafikkhendelser La-det-feile og supervisor-hierarki er behagelig å jobbe med Så sant en trafikkhendelse kommer inn til clusteret i sanntid er den nyttig DATAINN – THE GOOD PARTS (OF AKKA)
  17. Programmeringsmodellen til Akka passer bra til å håndtere mange samtidige

    trafikkhendelser La-det-feile og supervisor-hierarki er behagelig å jobbe med Så sant en trafikkhendelse kommer inn til clusteret i sanntid er den nyttig Lett å legge til funksjonalitet i prosesseringen DATAINN – THE GOOD PARTS (OF AKKA)
  18. Ekstremt smidig og enkelt å komme i gang med og

    bruke DATAINN – THE GOOD PARTS (OF ELASTICSEARCH)
  19. Ekstremt smidig og enkelt å komme i gang med og

    bruke Superlett å teste spørringer direkte mot REST-grensesnittet DATAINN – THE GOOD PARTS (OF ELASTICSEARCH)
  20. Ekstremt smidig og enkelt å komme i gang med og

    bruke Superlett å teste spørringer direkte mot REST-grensesnittet “Lett” å deploye DATAINN – THE GOOD PARTS (OF ELASTICSEARCH)
  21. Ekstremt smidig og enkelt å komme i gang med og

    bruke Superlett å teste spørringer direkte mot REST-grensesnittet “Lett” å deploye Veldig kraftig analyseverktøy DATAINN – THE GOOD PARTS (OF ELASTICSEARCH)
  22. Ekstremt smidig og enkelt å komme i gang med og

    bruke Superlett å teste spørringer direkte mot REST-grensesnittet “Lett” å deploye Veldig kraftig analyseverktøy Takler datamengden godt DATAINN – THE GOOD PARTS (OF ELASTICSEARCH)
  23. Vi har vært så heldige å få deploye en lettvekts

    webapplikasjon DATAINN – THE GOOD PARTS (OF DEPLOYMENT)
  24. Vi har vært så heldige å få deploye en lettvekts

    webapplikasjon Smidig for utviklere, relativt smidig mot drift DATAINN – THE GOOD PARTS (OF DEPLOYMENT)
  25. Vi har vært så heldige å få deploye en lettvekts

    webapplikasjon Smidig for utviklere, relativt smidig mot drift Automatisert bygging og utrulling DATAINN – THE GOOD PARTS (OF DEPLOYMENT)
  26. Vi har vært så heldige å få deploye en lettvekts

    webapplikasjon Smidig for utviklere, relativt smidig mot drift Automatisert bygging og utrulling Eksponerer våre pakker til drift via Nexus DATAINN – THE GOOD PARTS (OF DEPLOYMENT)
  27. Vanskelig å “følge flyten” Akka cluster •  Distribuerte systemer er

    vanskelig •  ikke fullt ut modent nok •  vi måtte håndtere/detektere “split brain” selv •  må bruke og forholde oss til cluster singletons som kan være skumle greier •  “Heartbeat” kan risikere å ikke komme frem DATAINN – THE BAD PARTS (OF AKKA)
  28. OPC-UA SDK •  er laget for 1-1 mellom klient og

    server •  bruker tråder, mange tråder DATAINN – THE BAD PARTS (OF OPC-UA)
  29. OPC-UA SDK •  er laget for 1-1 mellom klient og

    server •  bruker tråder, mange tråder Actor for en målestasjon kan ikke tillates å starte opp mer enn én gang Spiller mindre bra sammen med tilstandsløst cluster DATAINN – THE BAD PARTS (OF OPC-UA)
  30. Elasticsearch er minneintensiv og skriveoperasjoner er krevende Prøv alt du

    kan å få egne servere til Elasticsearch DATAINN – THE BAD PARTS (OF ELASTICSEARCH)
  31. Elasticsearch er minneintensiv og skriveoperasjoner er krevende Prøv alt du

    kan å få egne servere til Elasticsearch Batch skriveoperasjoner, ikke skriv én og én melding DATAINN – THE BAD PARTS (OF ELASTICSEARCH)
  32. Elasticsearch er minneintensiv og skriveoperasjoner er krevende Prøv alt du

    kan å få egne servere til Elasticsearch Batch skriveoperasjoner, ikke skriv én og én melding Ikke gjør skriveoperasjoner med updatescript DATAINN – THE BAD PARTS (OF ELASTICSEARCH)
  33. OPC-UA og SDKen vi brukte er ressurskrevende materiale Både klient

    og server opererer med veldig mange tråder DATAINN – THE BAD PARTS (OF PERFORMANCE)
  34. OPC-UA og SDKen vi brukte er ressurskrevende materiale Både klient

    og server opererer med veldig mange tråder Ryddegutten kan generere ekstrem last på server og målestasjon DATAINN – THE BAD PARTS (OF PERFORMANCE)
  35. OPC-UA og SDKen vi brukte er ressurskrevende materiale Både klient

    og server opererer med veldig mange tråder Ryddegutten kan generere ekstrem last på server og målestasjon Elasticsearch var flaskehalsen DATAINN – THE BAD PARTS (OF PERFORMANCE)
  36. OPC-UA og SDKen vi brukte er ressurskrevende materiale Både klient

    og server opererer med veldig mange tråder Ryddegutten kan generere ekstrem last på server og målestasjon Elasticsearch var flaskehalsen Klarte bare først ca 40, så 90 målestasjoner totalt på tilgjengelig cluster Infrastrukturen hvor lasttestene kjøres er underspesifisert i forhold til produksjon DATAINN – THE BAD PARTS (OF PERFORMANCE)
  37. OPC-UA og SDKen vi brukte er ressurskrevende materiale Både klient

    og server opererer med veldig mange tråder Ryddegutten kan generere ekstrem last på server og målestasjon Elasticsearch var flaskehalsen Klarte bare først ca 40, så 90 målestasjoner totalt på tilgjengelig cluster Infrastrukturen hvor lasttestene kjøres er underspesifisert i forhold til produksjon Last kan ikke genereres/simuleres med e.g. Gatling eller lignende verktøy DATAINN – THE BAD PARTS (OF PERFORMANCE)
  38. Morsomt og veldig utfordrende å jobbe med prosjektet OPC-UA ser

    ut til å fungere bra når man først har etablert kommunikasjon mot en type leverandørboks Kjøretøy som passerer måleboksene dukker opp live i webgrensesnittet Samle metrikker om det du kan og gjør dem tilgjengelige for utviklere! Ytelsen er på vei opp J DATAINN – THE GOOD PARTS (REVISITED)
  39. UT OG KJØR! jfweden janwe Twitter, Speakerdeck, Flickr, Instagram, Spotify

    osv http://www.tu.no/it/2014/06/19/vegvesenet-skal-hoste-10.000-datameldinger-om-trafikken-hvert-sekund-hele-aret