In this article we will discuss the infrastructure and requirements that are necessary for blockchain-based products. We will also provide some possible solutions for an infrastructure as code or Devops approach using Amazon Web Services, Chef and Terraform by Hashicorp.
See the source code here:
Our use case is an application with a database, web server and miner. This will allow us to have a basic mining node, a web interface layer, api and database.
Blockchain products already run the full gamut of technologies. We will begin by examining the common use case scenario with the aim of further understanding how best to design and implement a viable solution.
Let’s consider the following general areas to be central to a successful solution:
- Backend Processing
- Front End Systems/User Interfaces
- Data Analytics
We will create a secure infrastructure as follows:
- Virtual Private Cloud
- public and private subnets and
- security rules to restrict traffic on ports
- ssh access
- AWS IAM User with ID and secret key
AWS infrastructure allows for Autoscaling groups – to be added in a later feature.
Stability & Reliability
The AWS Infrastructure is Stable and Reliable, however we will consider the following future features:
- Multi Availability Zones
- Regional failover
- Load balancing
For services like Bitcoin and other cryptocurrencies the key to successful projects is raw processing of hash algorithms and in the case of Bitcoin that is SHA256. While early miners found it sufficient to mine using GPU (Graphics Processing Units) rigs, which excel at such functions, dedicated ASIC (Application-specific integrated circuit) mining machinery has largely replaced them. It is possible however to pool commodity resources for some crypto currencies and that is an option to explore. It is also relevant that some blockchain projects are looking for alternative ways to distribute mining, again, something that we shall look at.
Front End Systems & User Interfaces
Front end user interfaces are central for the acceptance of blockchain based technologies in the mass market. These systems can be browser based web applications or native applications on smartphones and tablets. They usually connect to backend APIs (Application Programming Interfaces) to request information and to request actions. Wallets, currency exchanges and data analytics products fall into this category.
Data Analytics, Warehousing and Reporting
Such applications are transaction-based and tend to generate a large amount of data that is of interest to many stakeholders including business analysts, developers, regulators and end users.
Profitability and Return on Investment
This setup is NOT a guide to profitably mining cryptocurrencies and is for educational purposes only.
DO NOT WASTE MONEY MINING UNLESS YOU UNDERSTAND WHAT YOU ARE DOING. YOU HAVE BEEN WARNED!
We wish to leave the debate as to the role of GPU miners in certain applications to one side in favour of presenting some working infrastructure code and having a starting point which can be developed and critiqued further.
The devops solution concerns having our configuration management in code. The advantage of this is:
- Knowing what the state of our infrastructure is at any point in time
- Being able to reproduce the infrastructure in case of a disaster
- Having transparent, auditable and controlled iteration of our infrastructure
- Having a clear path forward for secure, stable and scalable infrastructure
Infrastructure as Code
In this case we will use Terraform to create the necessary Infrastructure on Amazon Web Services (AWS), the code will be versioned on a repository with security variables omitted and stored securely. Terraform will specify the network fabric and configure the following:
- Internet Gateway
- Nat Gateway
- Routing Tables
- Public & Private Subnets
- Web Server
- Database Server
- Miner Instance
Chef-client will install automatically on the required instance and bootstrap themselves pulling roles from Chef Server. Anything can be added to this bootstrap script such as NTP time server, Git version control as well as User and Group management. for more complex environments Docker and or Mesos, DC/OS or other Distributed Kernels can help elevate your product or platform to state-of-the-art systems.