apeunit / LaunchControlD

LaunchControl orchestration and deployment service
MIT License
1 stars 0 forks source link

Tech stack #5

Open noandrea opened 4 years ago

noandrea commented 4 years ago

For the implementation of the server side blockchain + infrastructure deployment the tech stack is the following:

Implementation language: Golang version >= 1.14

Go is a statically typed, compiled programming language with memory safety, garbage collection, structural typing, and CSP-style concurrency. Go has been chosen due to it's simplicity to learn and understand, making the project accessible and easily maintenable. Due to it's accessibility, safety and popularity Go has been used in popular projects like Docker, Kubernets, Hashicorp Terraform, CockroachDB and therefore it has been considered the best language to implement the infrastructure component for the project.

Metadata storage: CockroachDB

Due to the nature of the orchestration of the project, it is necessary to store some metadata about the deployed infrastructure and the status of the nodes of the infrastructure. One of the most popular and well know approach for data persistence is using a RDBMS and one of the most popular open source implementation for RDBMBS is PostrgreSQL. One issue relative to the project is the centralized nature of PostgreSQL, that doesn't have a native distributed capabilities. CockroachDB is a distributed RDBMS that implements the same SQL dialect of PostgreSQL making it the perfect choice for the project. A user can decide both to run the project as standalone (using PostgreSQL or a single node CockroachDB) or scale out using a distributed approach.

Docker: for nodes distribution

Docker is OS-level virtualization software that allows to deliver software in packages called containers. Each container bundles it's software and it can be easily distributed via public and private registries accessible via http protocol. Containers are a very popular technology and the most efficient way to bundle and distribute software application, especially in an automated scenario. With Docker an automated process only needs to know how to run a generic container and doesn't need to know the details of each container. Since the project requirements is to be able to deploy software on provisioned infrastructure, Docker is the natural choice for the task.

Docker-Machine: for infrastructure provisioning

There are many technologies that can be used to provision digital infrastructure (eg Terraform+Nomad, docker-machine, ... ), in this case the project requirement is to be able to provision infrastructure to multiple providers to avoid vendor lock-in and to provision the infrastructure physically closer to the end users. Since Docker has been chosen as the container technology for the project a logical continuation is to use docker-machine to provision the infrastructure.

emil-apeunit commented 4 years ago

Could you add a few sentences of reasoning for each choice, e.g. "Docker machine allows deployment independent from specific cloud providers and offers support for the most common platforms, like digital ocean, aws while allowing the users to also use regions and independent specific providers like hetzner in europe."

noandrea commented 4 years ago

done