Meeting the Challenge
DataArt was chosen as a trusted development partner with strong M2M / IoT experience. The solution design was created based on the client’s feedback and requirements.
We proposed building the platform based on microservice architecture that would structure the application as a set of coupled, collaborating services. Each would encapsulate specific business logic.
A simplified diagram of the platform is shown below.

From the user perspective, an entry point to the application will be an API Gateway, which will handle requests in one of two ways. Some of the requests will be simply proxies to the appropriate service and others will reach out to multiple services to manage complex requests. The load balancer will be used to distribute incoming traffic across multiple targets automatically. It is necessary to access horizontally scalable and highly available services effectively.
Kubernetes will be used as a container management system. It will manage containerized applications across multiple hosts as well as provide necessary mechanisms for deployment, maintenance, and scaling of applications. Microservices will run in an environment in which the number of instances of a service and the locations can be changed dynamically. To address this, a DNS-based Kubernetes service discovery mechanism will be used.
Inter-service communications will utilize a mixed approach comprising asynchronous messaging and direct API calls. Apache Kafka will be used as a message bus. It is horizontally scalable, fault-tolerant and allows persisting data safely.
The system will operate with different types of data including air quality, riding, routing and user-specific data. The combination of an RDBMS database and NoSQL data store will be most efficient in this case. Logging all the details of how a distributed system operates is another essential task. Elasticsearch is best suited for storing and accessing this type of data. It is a distributed, RESTful search and analytics engine based on Apache Lucene.
The solution is designed to support cloud-based development and deployment. An AWS cloud platform will be used for infrastructure deployment. It provides commodity hardware and a wide choice of applications as a service. Infrastructure as a code approach will be applied for working with the infrastructure as with source code. An automation tool like Terraform supports the AWS cloud provider and makes it possible to script the entire infrastructure including virtual private networks, security settings, containers configurations and other components.
Continuous Integration and Continuous Delivery are two important practices. They affect both the engineering side and the business side and bring value to the team and product owner. Jenkins will be used as a CI/CD tool. It will bring automation into the routine development, deployment and testing processes.
The platform will seamlessly integrate multiple external services (mapping, routing, hailing, payments and air quality provider). Each integration will have a dedicated microservice implementing specific business logic.
