Limitless Scaling

From Internet Computer Wiki
Jump to: navigation, search

The Internet Computer (IC) can scale its capacity without limit, simply by adding additional nodes to fuel new subnets. Nodes are added via the Network Nervous System (NNS) which forms new subnets almost on a weekly basis since genesis. In contrast, most other blockchains have transaction limits baked into the protocol (e.g. adding more servers to Bitcoin does not increase the throughput) and need cumbersome layers to address scaling.

See Internet Computer Dashboard for current scale and performance numbers:

Subnet Architecture

The Internet Computer's scalability is enabled by sharding canisters and their state into subnets. Each subnet runs its own instance of state machine replication and can therefore process update and query calls independently from other subnets. While running independently, it is still possible for canister on different subnetworks to communicate by sending messages to each other.

It's therefore possible to scale out by adding more IC nodes to the Internet Computer.

  • If new nodes are added as *new subnetworks*, more update calls can be executed per time unit since the new subnetwork can process update calls independently from the rest of the system.
  • If new nodes are added to *existing subnetworks*, more queries can be executed per time unit. That is because query calls, in contrast to update calls, are executed on individual machines, rather than replicated on all nodes of a subnetwork as for update calls.

However, the finalization rate of the consensus layer and therefore the rate of update calls per second, might be negatively affected by a larger number of nodes in a subnetwork. That is because more data has to be exchanged between the larger number of nodes before consensus on the order of the input messages can be reached.

Further, having more subnetworks tends to decrease locality: the probability of needing to communicate across subnetworks increases.

Consequently, the IC also must scale up by increasing performance on individual IC node machines. Example are scaling the IC runtime to efficiently utilize resources such as CPU and memory and achieving highly concurrent execution of independent canister calls.

See Also