Skip to content

Technology used

EdwinVW edited this page Feb 16, 2023 · 7 revisions

This describes the technology and libraries used to build this application. I'm not going to describe in detail how the different components work. For that I refer you to the documentation of each component on the Internet.

.NET & ASP.NET Core
The application is built completely using .NET 7 and ASP.NET Core 7. See https://dot.net for more info.

Entity Framework Core
For the CustomerManagementAPI and the VehicleManagementAPI database-access is implemented using Entity Framework Core 7 code-first. See https://docs.microsoft.com/en-us/ef/core/index for more info.

Docker
Every service within the system and all infrastructural components (database, message-broker, mail-server) are run in a Docker container. In this solution, only Linux based containers are used. Docker Compose is used to compose the application and connect all the components. See https://www.docker.com/ for more info.

Kubernetes
Kubernetes is an alternative to Docker-Compose. It is a container orchestrator that can be used to deploy the containers on a (multi-machine) cluster and manage the entire solution. See https://kubernetes.io/ for more info.

Istio
Istio is used to build a service-mesh for the entire Pitstop application. It is an add-on for Kubernetes to handle all kinds of deployment scenario's (canary releasing, A/B testing, zero downtime deployments, etcetera) See https://istio.io/ for more info.

RabbitMQ
RabbitMQ is used as message-broker. I use a default RabbitMQ Docker image (including management) from Docker Hub (rabbitmq:3-management). See https://www.rabbitmq.com/ for more info.

Azure SQL Edge
The database server used to host all databases is Azure SQL Edge. In this sample application, I chose to use a single SQL Server instance for hosting all databases. In a production environment you could choose for a setup with multiple instances to enable fail-over scenarios in case of an emergency.

MailDev
To simulate sending emails, I use MailDev. This test-server acts as both an SMTP Server as a POP3 server and offers a website to see the mails that were sent. No emails are actually sent when using this test-server. I use the default MailDev Docker image from Docker Hub (djfarrelly/maildev). See https://github.com/djfarrelly/MailDev for more info.

Serilog
Serilog an open-source logging framework for .NET (Core). It supports semantic/structured logging. All components within the solution use Serilog for logging information and errors. Log information is sent to the Console and to a Seq server (described below). See https://serilog.net/ for more info.

Seq
Seq is a central log server that can aggregate logging from several different logging-frameworks (including Serilog). It supports structured logging and offers rich searching and filtering capabilities. All logging within the PitStop solution is sent to Seq. See https://getseq.net/ for more info.

AutoMapper
AutoMapper is used (only where it adds value) to map between POCOs. This is primarily handy when mapping commands to events, events to events or events to models. See http://automapper.org/ for more info.

Polly
Polly is used to make sure the services are resilient to outages of other services. It offers automatic retry or circuit-breaker logic that is used at every interaction with resources that could be down (database, message-broker, other services). It is used in the web application for retrying calls to the Web APIs and falling back to an off-line page when a call fails after a certain amount of retries. See https://github.com/App-vNext/Polly for more info.

Refit
Refit is used to simplify calling REST APis. See https://github.com/paulcbetts/refit for more info.

SwashBuckle
Swashbuckle is used for auto-generating Swagger documentation and a test-ui for the ASP.NET Web APIs. See https://github.com/domaindrivendev/Swashbuckle for more info.

Dapper
Dapper is used in several services as lightweight ORM layer. See https://github.com/StackExchange/Dapper for more info.

XUnit
XUnit is a unit-testing framework. It is used in the WorkshopManagementAPI.UnitTests project. See https://xunit.github.io for more info.

Moq
Moq is a mocking framework. It is used in the WorkshopManagementAPI.UnitTests project. See https://github.com/Moq/moq4/wiki/Quickstart for more info.

Selenium
Selenium is a UI testing framework for driving a browser or application in an automated test. It is used in the UITest project. See https://www.seleniumhq.org/ for more info.