This is a mock sales application based on purchasing supplies for a battle.
The goal is to create a mircoservice oriented web application using the latest technologies.
Immutability, type safety, and unit testing are paramount to the success of this project.
- Source Code
- Report an Issue (the Issues page on this site will automatically update).
- initial-release
- Contains the creation of the main design and infrastructure. Also contains the initial website design.
- service-release
- Contains the implementation of the service infrastructure, service management, and continuous deployment.
- named-service-releases
- These releases will add service specific functionality that target technology like .Net Core, Node.js, and Elasticsearch.
When it comes down to it, nothing beats a nice object oriented and type safe language. This will be used to create services in this project.
This is used to allow the deployment of multiple microservices on the same VM. It does not hurt that it also allows more predictable deployments.
The search engine that will eventually be utilized for querying products on the website.
This is the latest version of JavaScript and is usable thanks to Babel.
This is the server for the development and production builds of the website. It provides quick response times with little setup. Minimal routing is done by Express (as routing is also done by the client).
Used for type checking JavaScript. TypeScript was seriously considered, but I wanted to stay with fundamental JavaScript for learning purposes.
Used to version the software that is remotely stored on GitHub.
Used to track visitors and hold metric data for the site.
Used to host the VMs that run the microservices. AWS was considered, but I was already using a lot of other Google services.
Used to route requests from the domain to the VM instance hosting the Proxy Service.
Used to hold static content that needs to be delivered reliably and fast. Content that goes here will not be versioned in Git.
The JavaScript testing tool for the website.
This was the primary development environment. This was chosen as it provided easy access to Unix features.
Used as the primary development language (mostly for ease of use and Isomorphic possibilities). Knowing code on the client and server execute in the same way is highly desirable. NPM is currently being used, but I also considered Yarn for its versioning capabilities.
Used to provide complex and dynamic web pages in a scalable way. This was chosen instead of Angular (as it made more sense to create static content dynamically).
This will help with adding consistency and predictability to the website when communication occurs between services.
The relational database that will be used to store information accessible to services.
Provides continuous integration for the project. I considered Jenkins, but it was too cost prohibitive to host it on a separate VM.
Ubuntu 16.04 LTS is the operating system that all VMs use. CoreOS and a container optimized OS were considered, but they took up too many resources. A custom image was created using Ubuntu and Docker.
Chose this editor as it was one of the lightest available and had direct support for Node.js. This editor also allows for C# development with a plugin.
Used to process and bundle the website. Webpack creates a complete bundle, rather than using a task runner and expecting everything to link together properly. Combining Webpack with Babel allows the React and ES6 syntax to be used freely in this project.