Skip to content
Open
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions rfcs/2026-09-forge-instances.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# 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 one or more regions operating FilOne appliance,
all linked to a single deployment of central components.
Comment thread
bajtos marked this conversation as resolved.
Outdated

## 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 "testest"
Comment thread
bajtos marked this conversation as resolved.
Outdated
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 resets

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?

### 1. Production

This is the instance our paying customers use.

- **Update frequency:** TBD. Once per month? When is the scheduled maintenance window for the central and individual regions?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's discuss.

@alanshaw alanshaw Sep 1, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe reword as "upgrade window"? It's not that we must update once a month, but the proposal is to have a regular window to upgrade in should we want to? Right?

I'm curious why we need to have a monthly window for this? I would prefer to release on our own schedule at least initially.

@bajtos bajtos Sep 1, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great feedback!

Yes, we typically don't have to upgrade every month.

In my experience, it's easier to upgrade on a regular cadence than to pick the upgrade window each time. With a regular cadence, we don't need to spend time deciding when to upgrade, and we get plenty of practice with the actual work because we do it often. So even if it's not necessary to upgrade in each window, I advocate that we still do it.

What are your concerns? What are the benefits of releasing on our own schedule?

I have two concerns about irregular releases:

  • Someone will need to remember to schedule the next upgrade.
  • The bigger the release, the higher the risk that something breaks. With a big delta, it's more difficult to identify the exact cause.

If you are concerned about shipping partial features, I propose using feature flags to control which feature is available where. We have had a good experience with this approach in FilOne.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm curious why we need to have a monthly window for this?

Right now, every upgrade requires a short downtime.

  • If we aim for 99.9% availability SLA, we can afford around 40-45 minutes of downtime each month.
  • Downtime is disruptive to our customers; we should handle maintenance in a predictable way that allows our customers to plan around scheduled downtimes.

- **Stability & acceptable outages:** Maximum stability, maintenance windows outside of core
business hours, minimum downtime. Full monitoring with alerts routed to the person on the pager duty.
Comment thread
bajtos marked this conversation as resolved.
Outdated
- **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.
Comment thread
bajtos marked this conversation as resolved.
Outdated
- **Real vs test money:** Real money, Filecoin mainnet.
- **Data resets:** none

Accessible from FilOne at https://app.fil.one (the main app).

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.
- **Real vs test money:** Stripe test cards, Filecoin calibnet.
- **Data rention:** Weekly network reset on Sunday morning UTC.
Comment thread
bajtos marked this conversation as resolved.
Outdated
- **Regions:** Single region (us-east-9).

@bajtos bajtos Aug 31, 2026

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may want to have at least 2 regions in dev, so that we can test multi-region support in central components. Thoughts?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not initially. There is nothing to test(?).

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ack 馃憤馃徎

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about verifying whether a single S3 access key can be scoped to buckets across multiple regions?


Accessible from all non-production FilOne deployments (e.g. https://staging.fil.one, but also PR
previews) as the region `us-east-9`.

### 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:** Every Monday morning UTC. Can be rescheduled ad-hoc in case of a customer demo planned for Monday.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have a stable network every Monday? My gut instinct is to release this whenever we believe we have a stable network, not on a weekly cadence.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see your point.

My concerns with "release whenever we believe we have a stable network":

  1. If we don't release on a regular basis, then we need someone to remember to periodically ask whether we have a stable network. In my experience, this is a slippery slope leading to no releases for weeks.
  2. IMO, we should treat the dev network the same way as CI. If it's broken, then it's the team's P0 priority to fix it ASAP. An unstable network on the day a scheduled upgrade was planned should be a rare exception, and we should iterate on improving our practices to make it less and less likely over time.

BTW, we can use feature flags to ship code for partially-implemented features before we make them available to users.

How about releasing biweekly on Mondays when a sprint ends?

  • The network should be stable by the end of the sprint; otherwise, we cannot claim our work is "done done".
  • This gives us a longer window for shipping & fixing destabilising changes, i.e. the entire sprint duration.
  • This way, Monday demos can show things that are already available for non-engineers in the staging/preview environment. Which is the way it should be in Scrum.

Essentially, I am proposing to adopt "Release trains".


On the second thought, let's move the update frequency to open questions, and scope this RFC to describe the other aspects of the Forge instances we want to run.

- **Stability & acceptable outages:** Reasonable stability and minimum unplanned downtime. Full monitoring with alerts routed to the person on the pager duty, with capped severity (no incident is critical).
- **Infrastructure:** TBD.
Comment thread
bajtos marked this conversation as resolved.
Outdated
- **Real vs test money:** Stripe test cards, Filecoin calibnet.
- **Data resets:** TBD. Monthly resets?
Comment thread
bajtos marked this conversation as resolved.
- **Regions:** TBD (Right now, we can have eu-central-3 on a powerful servers.com bare-metal box.)
Comment thread
bajtos marked this conversation as resolved.
Outdated
Comment thread
bajtos marked this conversation as resolved.
Outdated

### 4. Performance testing

This is the instance we will use for intensive load & performance testing.

- **Update frequency:** Manual, before starting a new test run.
Comment thread
bajtos marked this conversation as resolved.
Outdated
- **Stability & acceptable outages:** No stability guarantees besides minimising unplanned downtime. Full monitoring but without alerts.
- **Infrastructure:** Production-like. Can we run a perf-test appliance in each production datacenter?
- **Real vs test money:** Stripe test cards, Filecoin calibnet.
- **Data resets:** Manual, after finishing a test run.
- **Regions:** Ideally the same regions as in production.
Comment thread
bajtos marked this conversation as resolved.
Outdated