Yesterday, late afternoon I got the confirmation from one of our developers that we made the transition to Linux. What he really meant to say, was that for the first time we were able to automatically deploy our new software in Docker containers on Linux hosts. Big deal? For us it is! Our software uses a lot of new concepts, and the combination of things made it quite a challenge.
Let me explain the challenge: Our software is now based on Command Query Responsibility Segregation (CQRS) and uses Event Sourcing. For our command servers, we use Event Store, and for our Query servers, we use MongoDB. All of these servers exchange information using a message queue (RabbitMQ).
Our first application using this approach is a tool for companies supporting their expense management. We designed the application using Domain Driven Design. This resulted in the following subdomains and corresponding bounded contexts:
· Identity Management (based on IdentityServer4)
· Authentication (command server)
· Expenses (command server)
· Configuration (command server)
· Employee Self Service (query server)
· Admin Self Service (query server)
Our client software (desktop and mobile) executes commands and queries using REST-API’s. These API’s are accessed using an API-gateway (nginx). To complicate matters further we implemented a DMZ using a reverse proxy server.
All of the above concepts are not unique when building modern SaaS-applications. So why am I so excited? This software is built by a development team that one year ago was working on “traditional” .NET web applications using SQL-server. What a steep learning curve for these guys! I am so proud of them.
Well done, guys!