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
| Layer | What runs it |
|---|---|
| Version controlling | Bitbucket |
| Continuous deployment | Azure DevOps Pipeline |
| Containerization | Docker |
| Container management | Azure Kubernetes Service (AKS) |
| Load balancer | Azure Load Balancer |
| HTTP cache | Nginx |
| Data processing | Kafka, 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.
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.
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.