-
Notifications
You must be signed in to change notification settings - Fork 1
rfc: Forge Instances #28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
bajtos
wants to merge
4
commits into
main
Choose a base branch
from
forge-instances
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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,180 @@ | ||
| # RFC: Forge Instances | ||
|
|
||
| **Status:** Proposal | ||
|
|
||
| ## Authors | ||
|
|
||
| - [Miroslav Bajto拧](https://github.com/bajtos) | ||
|
|
||
| ## Introduction | ||
|
|
||
| We want to operate multiple Forge network instances to serve conflicting needs like continuous | ||
| deployment vs stability. This document collects different criteria we have for each instance and | ||
| proposes a set of instances to stand up and operate. | ||
|
|
||
| The term "Forge network instance" means a collection of one or more regions operating FilOne | ||
| appliance, all linked to a single deployment of central components. | ||
|
|
||
| ## Criteria | ||
|
|
||
| ### Update frequency | ||
|
|
||
| At the moment, we support two options: | ||
|
|
||
| 1. Fully automated continuous deployment - every commit landed in Forge repositories is deployed in | ||
| minutes. | ||
|
|
||
| - Pros: latest & greatest features & bugfixes. | ||
| - Cons: less stable with potential outages at unexpected times | ||
|
|
||
| 2. Scheduled upgrades - at regular intervals, we deploy the latest known-good version. | ||
|
|
||
| - Pros: maximum stability, predictable maintenance windows. | ||
| - Cons: bugfixes & new features arrive with delay, require regular manual engineering work. | ||
|
|
||
| ### Stability & acceptable outages | ||
|
|
||
| The dev instance provides no guarantees at all. | ||
|
|
||
| The production instance must minimise outages. | ||
|
|
||
| However, we need also instances on the spectrum between those two options - e.g. an instance running | ||
| the latest known-good version where we can perform extensive load testing, an instance running the | ||
| latest known-good version which we use for customer demos. | ||
|
|
||
| ### Infrastructure | ||
|
|
||
| Where do the appliances run - Tier 1 providers like AWS, Tier 2 providers, bare-metal? | ||
|
|
||
| The dev instance does not need to run on as powerful hardware as we use in production. | ||
|
|
||
| On the other hand, performance tests must target an instance that's as close to production infra as | ||
| feasible. | ||
|
|
||
| ### Real vs test money | ||
|
|
||
| Forge is integrated with Filecoin Pay, nodes report inclusion proofs to the PDP contract, and the | ||
| contract automatically credits node operators for utilised storage space. | ||
|
|
||
| Each Forge instance is tied to one Filecoin chain (mainnet or calibration). Instances tied to the | ||
| mainnet must deal with real funds - periodically top up the wallets paying for storage and for gas, | ||
| using real FIL. | ||
|
|
||
| On the FilOne side, we use Stripe sandbox in non-production environments, which gives use "test" | ||
| money and test credit card numbers we can use to pay for storage. This makes it easy to test FilOne | ||
| & Forge for free, with no real credit card needed. | ||
|
|
||
| ### Data retention | ||
|
|
||
| Non-production instances should have limited data retention period and we should implement regular | ||
| resets. This is needed to keep the used storage reasonable and prevent abuse. | ||
|
|
||
| However, data resets will break demos and long-term performance tests, therefore the schedule must | ||
| be based on other criteria like stability. | ||
|
|
||
| ### Regions | ||
|
|
||
| How many regions and in which geographic location? | ||
|
|
||
| ## Proposal | ||
|
|
||
| Provision the following four Forge instances: | ||
|
|
||
| - production | ||
| - dev | ||
| - staging | ||
| - pilot | ||
|
|
||
| ### 1. Production | ||
|
|
||
| This is the instance our paying customers use. | ||
|
|
||
| - **Update frequency:** Manually triggered updates. Schedule will be determined later (see open | ||
| questions below). | ||
| - **Stability & acceptable outages:** Maximum stability, maintenance windows outside of core | ||
| business hours, minimum downtime. Full monitoring with alerts routed to the person on pager duty. | ||
| - **Infrastructure:** The central components running on AWS ECS must have enough capacity to handle | ||
| the entire production workload. Regional appliances run in node operators' datacenters and must | ||
| have enough power to administer their storage capacity. | ||
| - **FilOne integration**: Available via the production console at https://app.fil.one. Available to | ||
| all users. | ||
| - **Real vs test money:** Real money, Filecoin mainnet. | ||
| - **Data resets:** none | ||
| - **RPC API:** Lotus node running in each region. | ||
|
|
||
| Note: we need to define the process for shipping hotfixes outside of the regular update schedule. | ||
| The longer the interval between regular updates, the higher the chance that we need a hotfix. | ||
|
|
||
| ### 2. Dev | ||
|
|
||
| This is the instance where we continuously ship all changes. | ||
|
|
||
| - **Update frequency:** Every change is deployed as soon as feasible. | ||
| - **Stability & acceptable outages:** No stability guarantees. | ||
| - **Infrastructure:** The Appliance is running on a relatively small AWS EC2 instance. We support | ||
| light testing, but not performance/load testing. Light monitoring if any at all. | ||
| - **FilOne integration**: Available via the staging console at https://staging.fil.one as the region | ||
| `us-east-9`. Available to all users. | ||
| - **Real vs test money:** Stripe test cards, Filecoin calibnet. | ||
| - **Data retention:** Weekly network reset on Sunday morning UTC. | ||
| - **Regions:** Single region (`us-east-9`). | ||
| - **RPC API:** Chain.Love. | ||
|
|
||
| ### 3. Staging | ||
|
|
||
| This is a stable "preview" instance showing the latest & greatest features, suitable for customer | ||
| demos. Not used for load/performance testing to avoid degraded performance during demos. | ||
|
|
||
| - **Update frequency:** Manually triggered updates. Schedule will be determined later (see open | ||
| questions below). | ||
| - **Stability & acceptable outages:** Reasonable stability and minimum unplanned downtime. Full | ||
| monitoring with alerts routed to the person on pager duty, with capped severity (no incident is | ||
| critical). | ||
| - **Infrastructure:** The servers.com baremetal box in Amsterdam where Filecoin Foundation operates | ||
| a Calibnet SP. | ||
| - **FilOne integration**: Available via the staging console at https://staging.fil.one as the region | ||
| `eu-central-3`. Available to all users. | ||
| - **Real vs test money:** Stripe test cards, Filecoin calibnet. | ||
| - **Data resets:** TBD. Monthly resets? | ||
| - **Regions:** eu-central-3, potentially more in the future. | ||
| - **RPC API:** Local Lotus node in `eu-central-3`. To be determined for future regions. | ||
|
|
||
| Important: S3 access keys are scoped to a single Forge instance. It won't be possible to create one | ||
| S3 access key with access to both dev & staging regions. | ||
|
|
||
| ### 4. Pilot | ||
|
|
||
| This is the instance we will use for "proof of concept" and "pilot" evaluations performed by | ||
| potential FilOne customers. This must be production-grade deployment matching the real production | ||
| nodes as much as possible. | ||
|
|
||
| Typically, we will need to quickly stand up a new pilot region within 72 hours, keep it running & | ||
| meeting SLAs for 90 days, and decommission it after that. | ||
|
|
||
| We will _not_ offer data migration from pilot regions to production. | ||
|
|
||
| - **Update frequency:** Manually triggered updates. Typically once before the pilot starts and then | ||
| when the customer requests new features or we need to fix bugs. | ||
| - **Stability & acceptable outages:** Same guarantees as in production. Full monitoring but alerts & | ||
| pager duty. | ||
| - **Infrastructure:** Production-like. Nodes will run in Tier-2 infra providers like Vulture, Akamai | ||
| or servers.com. | ||
| - **FilOne integration**: Available via the production console at https://app.fil.one, with region | ||
| names suffixed with `-pilot`, e.g. `uk-1-pilot`. Available only to selected users via a feature | ||
| flag. | ||
| - **Real vs test money:** Real money, Filecoin mainnet. | ||
| - **Data resets:** None during the pilot duration. Data will removed after the pilot has finished. | ||
| - **Regions:** Created on demand. | ||
| - **RPC API:** TBD. Ideally, each region should run a local Lotus node instance. Can we afford the | ||
| cost and maintenance overhead of that? | ||
|
|
||
| Important: S3 access keys are scoped to a single Forge instance. It won't be possible to create one | ||
| S3 access key with access to both dev & staging regions. | ||
|
|
||
| ## Open questions | ||
|
|
||
| - Update frequency for production and staging environments. Do we upgrade regularly (e.g. every | ||
| week, biweekly on sprint end, monthly), more often or less frequently? | ||
| - How often we reset data & state in the staging environment. | ||
| - How many Lotus nodes we want to run (per-region vs one central instance)? Where can we outsource | ||
| this to Chain.Love/Protofire? | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.