Skip to content

Design for moving the app graph to actual graph storage #97

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’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 20 commits into
base: main
Choose a base branch
from

Conversation

sylvainsf
Copy link

@sylvainsf sylvainsf commented Jun 5, 2025

This design adds a new component to Radius, the graph abstraction layer, and allows for app graph functionality to leverage the performance and simplicity of a graph db rather than the imperative graph traversal logic currently implemented in CoreRP.

@sylvainsf sylvainsf requested review from a team as code owners June 5, 2025 17:42
Copy link
Member

@brooke-hamilton brooke-hamilton left a comment

Choose a reason for hiding this comment

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

📈 🚀

Copy link
Contributor

@ytimocin ytimocin left a comment

Choose a reason for hiding this comment

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

I will need to do another round of review for this doc.

@ytimocin
Copy link
Contributor

Do we need to write all the resources to Kuzu too? Are we using Kuzu as the main data store now?

@sylvainsf sylvainsf changed the title Design for moving the app graph to actual graph storage, decoupling it from K8s Design for moving the app graph to actual graph storage Jun 17, 2025
sylvainsf added 11 commits June 17, 2025 12:23
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
…fic radius scenarios

Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
…clearly, made migration tool a requirement.

Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
…oing all data storage via graph today with multiple RPs writing to the same data store.

Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
Signed-off-by: Sylvain Niles <sylvain.niles@gmail.com>
@@ -1,6 +1,6 @@
# Handling Non-Idempotent AWS Resources in UCP

**Note: This design doc has been ported over from an old design doc and might not match the template completely**
**Note: This design doc has been ported over from an old design doc and might not match Note that here we are using the Radius resource group to construct the key of the tracking entry instead of the AWS `resourceID`. The deployment engine provides the resource group information from the deployment's resource group during the POST call that it makes to UCP to create/update the resource. This will associate the AWS resource with the Radius resource group, and thus allow the user to list AWS resources deployed within a Radius resource group.he template completely**

* **Author**: Vinaya Damle (vinayada)

Copy link
Contributor

@nithyatsu nithyatsu Jun 25, 2025

Choose a reason for hiding this comment

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

I think this doc was added by mistake?

Copy link
Author

Choose a reason for hiding this comment

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

Yes sorry I said that at the beginning of the meeting my copilot accidentally modified, will remove changes :)


### User Scenarios (optional)

* **Scenario 1 (Developer):** A Radius developer needs to address performance issues for application graphs containing many resources. Retrieving all resources connected to a specific environment, which is a very expensive operation. Using Cypher through the GAL would be more expressive and orders of magnitude faster than multiple etcd calls and client-side filtering.
Copy link
Contributor

Choose a reason for hiding this comment

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

We would still take care to support only the read operations correct?

```bash
rad resource inspect gateway api-gateway --show-dependencies --type secret
```

Copy link
Contributor

Choose a reason for hiding this comment

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

--show-dependencies is awesome :)

4. **Schema Definition:** A formal schema for application graph entities (Applications, Environments, Resources as nodes) and their relationships (as edges with types and properties) will be defined and enforced in PostgreSQL + AGE.
5. **Component Updates:** Radius components that currently perform application graph operations (traversals, relationship queries) will be updated to use the GAL for graph queries while maintaining existing functionality through current storage mechanisms during the transition period.

**Architecture Rationale:** PostgreSQL with Apache AGE provides a strategic foundation that can serve both immediate graph database needs and future storage consolidation. Unlike embedded solutions, a containerized PostgreSQL deployment offers: (1) Production-ready operational patterns familiar to most teams; (2) Native support for both relational and graph data models; (3) Established ecosystem of monitoring, backup, and scaling tools; (4) The flexibility to migrate additional Radius storage needs to the same technology stack over time, reducing operational complexity. **Note: This proposal is scoped specifically to graph operations via the GAL. Future work would involve migrating key-value operations from etcd to PostgreSQL and renaming the GAL to DAL (Data Access Layer) to reflect its expanded role as the unified data access interface for all Radius storage operations.**
Copy link
Contributor

Choose a reason for hiding this comment

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

Note: This proposal is scoped specifically to graph operations via the GAL. Future work would involve migrating key-value operations from etcd to PostgreSQL and renaming the GAL to DAL (Data Access Layer) to reflect its expanded role as the unified data access interface for all Radius storage operations.

Will data be duplicated across both etcd and the graph database in the meantime?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants