Our Work / Case Study · Aventi

Live Road Hazard Tracking For Norway

3 min read Architecture

The Outcome

System integration at Aventi's office in Oslo, then factory testing, then a pilot deployment and user acceptance testing with the Norwegian Public Road Administration. The platform runs at a thousand events per second across three Kafka clusters and ten or more Kubernetes clusters, serving more than a thousand mobile devices.

Client
Aventi Technologies AS
Sector
Smart transportation
Region
Norway
Engagement
Ongoing

Built with

  • Kafka
  • Elasticsearch
  • Docker
  • Azure Kubernetes Service
  • Azure DevOps
  • Bitbucket
  • Nginx

Client Requirement

Aventi embarked on a multitude of requirements to implement in the project. One of the critical needs is to develop a solution creating a smart transportation system to monitor all vehicles (including vehicle details), establish and communicate all obstacles such as oncoming vehicles, accidents, roadblocks, and road signs. Another requisite is to manifest wrong-way drivers, poor road conditions, and traffic. All these data were required to send out to 3rd parties upon request as a public API.

Challenges in the Business Process

Certain initial challenges were to work with multiple teams in multiple time zones. There were Norwegians, Sri Lankans, French, Swedes, and other nationals working together. Although it was challenging, the conditions made the project more exciting, fun, and worthwhile. We traveled abroad to research and learn more from each other to better our games.

Challenges in Technology

Thorough research was conducted on multiple new technologies and methodologies to select the most viable database. These researches spanned over various teams across different nations. We tested the systems and structures on archiving historical data, using threads and queues to handle enormous amounts of data (millions of records even) per sec. We needed a scalable system to capture the vast inflow of data that comes from multiple device vendors such as onboard units and roadside units. To enhance the system security, we experimented with various measures, which included TLS  for the database and running a virtual road site unit. Furthermore, the mode of communications was thoroughly encrypted, which required a username and password, including authentication to carry out information from the Database server.

Scale of the Platform

The system reports road incidents in real time, both to a central system and to the vehicles and devices near each incident.

  • 1,000 events per second
  • 3 Kafka clusters
  • 10+ Kubernetes clusters
  • A centralised web application serving 1,000+ mobile devices

Technologies and Tools

LayerWhat runs it
Version controllingBitbucket
Continuous deploymentAzure DevOps Pipeline
ContainerizationDocker
Container managementAzure Kubernetes Service (AKS)
Load balancerAzure Load Balancer
HTTP cacheNginx
Data processingKafka, Elasticsearch

CI/CD for the Web Application

The centralised web application is managed on Bitbucket under a clean Git Flow pattern. The developers' IDE is wired directly into Bitbucket and configured with Azure DevOps Pipeline to build, test and deploy to Azure Web Apps without a manual step in between. Autoscaling is handled by the Azure Web App service itself.

The platform pipeline: Visual Studio and Bitbucket into Azure DevOps Pipeline, deploying to Azure Web Apps
Build, test and deploy, with no manual step between the IDE and the running app.

Automated Incident Routing

The application is built on a publish and subscribe model running on Apache Kafka. Real-time road incident data is pushed into Kafka streaming APIs, where different brokers handle different incident types, and broker topics are created dynamically from the geocode of each incident. That is what lets a report reach the vehicles near it rather than everyone at once.

Incident routing: real-time incidents into Kafka streaming APIs, brokers per incident type, topics created from the incident geocode
Topics are created from the geocode, so proximity decides who hears about an incident.

Beyond the DevOps Role

The DevOps team set up Apache Kafka on Azure Kubernetes clusters, with one cluster assigned to staging and the rest to the live environment. Kafka connectors for MQTT Paho Server, MSSQL and Elasticsearch consume the real-time data and feed it to the relevant devices. Logstash and Kibana sit alongside the Elastic engine so logs and message data can actually be watched rather than guessed at.

Final Outcome

The next step in moving forward was system integration. For this, we flew to Oslo and conducted the procedure at the Aventi’s office, followed by a factory test right across the street.  Following several successful factory testing, it was time for a pilot deployment to be conducted in the Norwegian Public Road Administration (NPRA) presence. With clearances from the NPRA, the next hurdle was to conduct user acceptance testing, which was successfully carried out at the pilot-test site. To conclude, we find this ongoing amazing journey as one of a kind, and to date, we are experimenting, working, and developing this system with Aventi Technology AS.

The Outcome

Yours Could Be Next

What Are You
Shipping?

Every project on this shelf started as a conversation about a problem someone already had.