Components for a cloud-based Courier Management System

A mid to large Courier (Last Mile) transportation company requires a high performing Software as a Service (SaaS) application in order to handle the intensive day to day demand of customer shipments.

Modern day SaaS applications require a highly available and scalable architecture as well as an elastic cloud infrastructure. It should be built using modern programming languages, the latest database technologies, and an efficient micro-service software model.

For this use case we are recommending the following technologies and architectural considerations be deployed when building such a system:

Front End Layer

A modern Javascript framework such as Angular or React should be used to develop the customer facing web client part of the application. For the presentation layer standard HTM5 and Bootstrap templates would be used to provide a rich user interface.

Service Layer

A micro-service architecture should use either Python or Java Spring frameworks to build a collection of REST APIs to service any application requests.

Some type of Message Queueing (MSMQ) infrastructure should be implemented as it enables web apps to run at different times and to communicate with various 3rd party integrations / APIs / and other services asynchronously.

RabbitMQ is a great open source queuing system running on all major operating systems and can offer replication and failover mechanisms.

Python with the open source celery task-management library is the perfect fit to get the most out of RabbitMQ.

Data Layer

We recommend making use of a “NoSQL” document-oriented database to store the application’s metadata structures. Document databases are quite different to the traditional concept of relational databases.

Document databases get their type information from the data itself. This technology allows more flexibility, especially when dealing with changes and it often reduces database sizes.

MongoDB is a document-oriented database that provides high performance, high availability, and easy scalability. MongoDB’s automatic sharding can distribute data across various machines. Sharding is a method for storing your data across multiple machines. And MongoDB uses sharding to support deployment with large datasets.

Historical data should be archived to a Reporting Layer using a database technology such as Elasticsearch for ease of querying.

Elasticsearch is an open-source, RESTful, distributed search and analytics engine that is commonly used for log analytics, full-text search, security intelligence, business analytics, and operational intelligence use cases.

Kibana can be used to build visualizations and dashboards for this archived data.

Infrastructure Hosting

To keep hosting costs low as well as to provide a base for scalable architecture we are recommending to implement Amazon Web Services (AWS) for all infrastructure needs.

A mixture of Elastic Compute (EC2) instances for the web, microservice, and database servers as well as some of the AWS core services like ElasticSearch for AWS, AWS API Gateway, AWS Lamba will ensure high availability at lower prices.