-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #94 from ceramicnetwork/add-hardware-reqs
Add technical requirements
- Loading branch information
Showing
5 changed files
with
137 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,136 @@ | ||
# Technical requirements to run Ceramic | ||
|
||
To understand the expected costs to integrate Ceramic into your architecture, it is helpful to first understand where Ceramic lives in the application architecture stack. | ||
|
||
Ceramic is a decentralized data storage network made up of different components, and can replace or augment existing storage solutions. | ||
|
||
![Architecture](/img/app-architecture-overview.png) | ||
|
||
|
||
To make it easier to grasp, you can think about implementing Ceramic just like you might think about implementing a traditional SQL or PostgreSQL database. | ||
|
||
When integrating with Ceramic, you will be running three pieces of server software: | ||
|
||
- Ceramic node | ||
- PostgreSQL | ||
- IPFS node | ||
|
||
Ceramic and IPFS nodes are simply pieces of software than run on a server. PostgreSQL is a type of traditional database. | ||
|
||
## Hardware requirements | ||
|
||
For most projects, all three components of Ceramic can be run on the same server. Thus the main consideration impacting costs are the hardware requirements of your server. | ||
|
||
Depending on the expected throughput of your project, the suggested hardware requirements will differ. Below, you can find the estimated hardware requirements based on a different levels of expected throughput. | ||
|
||
### Minimum (light throughput) | ||
|
||
| Resource | Size | | ||
| --- | --- | | ||
| CPU | 2 CPU Cores | | ||
| RAM | 4GB | | ||
| Storage | 110GB | | ||
|
||
|
||
|
||
### Recommended | ||
|
||
As your project scales, you may need to expand your storage beyond 180GB. | ||
|
||
| Resource | Size | | ||
| --- | --- | | ||
| CPU | 4 CPU cores | | ||
| RAM | 8 GB | | ||
| Storage | 180GB | | ||
|
||
|
||
### Advanced (heavy throughput) | ||
|
||
Advanced users may want to consider running the PostgreSQL database on a different server than the Ceramic node + IPFS node. If you choose to run them on different servers, a VPC can be used to establish the communication between them. | ||
|
||
|
||
|
||
<div style={{ display: "flex", justifyContent: "flex-start" }}> | ||
<div style={{ marginRight: "100px" }}> | ||
<div style={{ fontWeight: "bold", marginBottom: "8px" }}>Ceramic node + IPFS node</div> | ||
<table style={{ borderCollapse: "collapse", width: "100%" }}> | ||
<thead> | ||
<tr> | ||
<th style={{ textAlign: "left", padding: "8px" }}>Resource</th> | ||
<th style={{ textAlign: "left", padding: "8px" }}>Size</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>CPU</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>2 4CPU Cores</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>RAM</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>8 GB</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>Storage</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>180GB</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
</div> | ||
|
||
<div> | ||
<div style={{ fontWeight: "bold", marginBottom: "8px" }}>PostgreSQL DB</div> | ||
<table style={{ borderCollapse: "collapse", width: "100%" }}> | ||
<thead> | ||
<tr> | ||
<th style={{ textAlign: "left", padding: "8px" }}>Resource</th> | ||
<th style={{ textAlign: "left", padding: "8px" }}>Size</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>CPU</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>1 2CPU Cores</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>RAM</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>4 GB</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", padding: "8px" }}>Storage</td> | ||
<td style={{ textAlign: "left", padding: "8px" }}>110GB</td> | ||
</tr> | ||
</tbody> | ||
</table> | ||
</div> | ||
</div> | ||
|
||
|
||
|
||
## Hosting solutions and costs | ||
|
||
One of the key factors impacting costs is how you choose to host your Ceramic node. A few options are shown below. Monthly server costs are **estimated** based on the hardware requirements above. | ||
|
||
<table style={{ width: "100%", borderCollapse: "collapse" }}> | ||
<tr> | ||
<th style={{ width: "33%", textAlign: "left", verticalAlign: "top" }}>Locally hosted</th> | ||
<th style={{ width: "33%", textAlign: "left", verticalAlign: "top" }}>Cloud hosted</th> | ||
<th style={{ width: "33%", textAlign: "left", verticalAlign: "top" }}>Managed node service</th> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- No new incremental costs</td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- $25 - $250 per node per month</td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- $50 - $500 per node per month</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- Not recommended for production environments</td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- Dependent on cloud provider (e.g., AWS vs GCP vs Azure)</td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- Managed backups</td> | ||
</tr> | ||
<tr> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}></td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- Infrastructure professionals who manage their own servers should have lower costs than using a cloud provider</td> | ||
<td style={{ textAlign: "left", verticalAlign: "top" }}>- Application developers who prefer to use third party managed node services can offload node management responsibilities to dedicated professionals</td> | ||
</tr> | ||
</table> | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.