One problem that arises in the context of subnet splitting is that of collocation of canisters. The concept of canister groups should help. Some details are below.
Problem
Subnetwork collocation of canisters (henceforth, collocation) offers important advantages to canisters/dapps:
i) collocated canisters benefit from fast intercanister communication that does not go through consensus (within the cycles limit of a round). In turn, collocation enables multi-canister architectures which can take advantage of parallel execution of canisters & fast messages.
ii) canisters collocated on verified subnetworks can use intercanister query calls (ICQC): the current implementation is a PoC which is limited to canisters that are collocated. A feature which had been recently prioritized aims to offer ICQC to general subnets.
Canister migration between subnets (as envisioned, for example, by subnet splitting) may break the collocation assumption, an assumption which based on the above may be factored into dapps architecture.
This is an issue for subnet splitting and in general for moving canisters between subnetworks. Moving sets of canisters between subnetworks (per whatever load balancing policy we may use) may break the collocation assumption since we have no mechanism in place for the IC to learn which dapps/sets of canisters rely on collocation.
Canister groups
The notion of canister groups should help to solve this problem is. This concept would allow a dapp developer to designate (programatically) that a certain set of canisters form a group.
The IC would need to provide system support for group management and ensure that canisters in a group are permanently collocated (even if various forms of load balancing would require some canisters to move between subnetworks.)
Proposed design
The current design can be found in this document. Feedback, in particular on its limitations, would be highly appreciated.