Closed shahinism closed 3 weeks ago
After further discussion and analysis, we've refined our understanding of how the proposed changes align with and enhance the ARC (Application Resource Controller) design. This section elaborates on the architectural layers and their roles in the Damavand ecosystem.
Layer 0: Landing Zone
Layer 1: Infrastructure (Resource Layer in ARC)
Layer 2: Control (Controller Layer in ARC)
Layer 3: Application
The proposed contract-based approach enhances the ARC design by providing clearer boundaries between system components while maintaining the core ARC principles:
A key feature of this architecture is its modularity and flexibility:
Component Interchangeability:
Customization Options:
Mix and Match:
Gradual Adoption:
Extension Points:
This extension to the RFC clarifies how the proposed contract-based approach aligns with and enhances the ARC design. By providing clear architectural layers and emphasizing interchangeability and customization, Damavand offers a flexible, powerful framework for cloud-native development that can adapt to a wide range of organizational needs and preferences.
- Damavand deploys the application based on defined requirements
@shahinism How Damavand is going to specify and deploy the resources described in the contract?
Assume we are talking about a Spark application. In the contract, application mentions that, I want:
Now Damavand is going to:
If second, how we are going to map that contract to the explicit code written by the developer?
Thank you, @shahinism. This is much clearer now. I think we should adding a section on the extraction of the ARC design pattern from Damavand. This addition is important because, in scenarios like mix and match or gradual adoption, users or organizations might choose to partially use a subset of the frameworks or none at all, while still independently following the ARC design pattern.
@farbodahm the answer to your question, comes down to the contract design itself, and the level of abstraction we consider. Currently for the control layer, as mentioned in the RFC, the intention is to limit the optins as much as possible, and only provide the developer, with what they need, a data frame. any extra information like the storage layer, will be abstracted in the control layer (in Spark example it'd be Sparkle).
The final outcome would be very opinionated, but the goals are clear:
I am closing this for main two reasons:
RFC: Contract-Based Decoupling for Damavand
1. Abstract
This RFC proposes an evolution of Damavand's architecture to implement a contract-based approach for decoupling application and infrastructure. This proposal aims to enhance Damavand's core promises while simplifying the developer experience and maintaining its cloud-agnostic nature.
2. Background
Damavand is a Python framework implementing the Application Resource Controller (ARC) pattern, designed to simplify cloud development and increase developer productivity. The current implementation tightly couples application and infrastructure code, which, while powerful, can present challenges in terms of complexity and learning curve.
3. Proposal
We propose to evolve Damavand's architecture by moving the abstraction layer (controller) out of the application and introducing a contract-based approach. This new architecture will consist of:
4. Detailed Design
4.1 Contract Data Structure
4.2 Application Input
4.3 Deployment Process
4.4 Runtime Configuration
4.5 Configuration Contexts
4.6 Damavand Abstraction Layers
5. Alignment with Damavand's Promises
6. Benefits
7. Challenges and Considerations
8. Implementation Plan
9. Backwards Compatibility
10. Security Considerations
11. Multi-cloud Enhancement
12. Future Work
13. Conclusion
This proposal evolves Damavand into a more flexible and developer-friendly framework while maintaining its core benefits of cloud abstraction and best practice implementation. It upholds Damavand's original promises while addressing challenges in the current implementation.