Dear ICP Community, we would like to introduce DevOps infrastructure project MulticanisterOps, that aims to help to build, test, deploy and scale multi-subnet complex applications.
Project is in development phase and we are introducing main goals of the project to get community feedback and feature requests to add to roadmap.
Motivation
We are building complex application that uses nearly all IC specific features combining onchain and offchain functionality. And far before release on the step of architecturing the app we want to solve future scaling bottlenecks.
According to story of IC app with a lot of users described here, we see that it is not so easy to scale on IC, but certainly possible. And it could be thorny path to evolve from single-canister architecture to multi-canister and multi-subnet systems. And a lot of mistakes could be done on this path.
Also it is crucial to have clean and easy development flow, when developer can develop and test multi-subnet system locally, push it to development branch and test it with other team developer’s modules in the cloud, and then push to test branch where system will be automatically deployed and ready for testing (all without submitting to mainnet). After tests are complete, release could be created and github workflow will push it to mainnet where it should be approven by DAO to make updates decentralized.
All of it certainly could be done, but there is no any step by step best practice guide to acheave it.
So we start thinking on infrastructure project that would help to acheave our internal goals and could help other teams to build more complex apps on IC easier.
Overview
ICR (Internet Computer Registry) is an infrastructure platform for orchestrating and managing the application lifecycle, acting as something like a Kubernetes for multi-canister environments on IC. The project aims to radically simplify and automate the CI/CD processes, deployments for tests, log-tracing, versioning, shipping to mainnet and scaling processes for complex multicanister IC applications. It also provides a unified test environment for onchain (possible multisubnet) and offchain components that use http-outcall functionality.
It can and will provide an easy way for developers to build scalable complex IC solutions with combination with offchain functionality.
How It Works (should work)
Development Workflow
-
Mono-repository Structure: Developers create a mono-repository that contains canister modules and backend offchain modules
-
Declarative Configuration: Using declarations, these modules are combined into an application that can be built and deployed to cloud-based development environments
-
Cloud Infrastructure: GitHub workflows help create Kubernetes clusters in the cloud (AWS, GCS, etc.) where Pocket IC, offchain modules, and logging/monitoring tooling are installed
-
Orchestration Core: At Pocket IC, orchestration core canisters are automatically installed
Deployment Process
-
CLI Tools: Built application modules and canister WASMs are uploaded to the orchestration core
-
Registry Management: Canisters are added to the registry with branch and tag metadata and created in Pocket IC
-
Service Discovery: Orchestration helps discover application canisters and offchain modules as services, enabling multiple non-conflicting versions of the same application in a cluster for testing and development purposes
-
Mainnet Deployment: After testing, applications can be released to mainnet with project GitHub workflows
-
Auto-scaling: Orchestration helps autoscale canisters (replicate and shard) across subnets
CI/CD Scheme
Roadmap
We’ve added BUIDL to WHCL25 hackaton (upvote the project if you like) and want till October implement main functionality and are going to provide an example and describe the development and configuration of an application that has:
-
Multiple canisters communicating via service discovery
-
Offchain module integration via http-outcalls (also connected via service discovery)
-
Complete build and deployment workflow using GitHub workflows
-
Multi-version deployment for different test environments
-
Mainnet deployment with DAO-governed updates
-
As a bonus github workflows to create dev/test clusters in Google cloud or AWS
Github link
Will be updated significantly in a few days:
https://github.com/akup/multicanister
Feedback
Looking forward for community feedback on project goals, and feature requests
