-
Notifications
You must be signed in to change notification settings - Fork 247
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
Updates to the conceptual model to separate app operator and developer roles #185
Open
dumbnose
wants to merge
11
commits into
oam-dev:master
Choose a base branch
from
dumbnose:jsheehan-model-updates
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
a62652b
Initial model changes.
dumbnose a52f873
Merge branch 'master' into jsheehan-model-updates
dumbnose 6f61f2b
Added Applications and made some small adjustments to account for the…
dumbnose f1af1b0
First cut at a conceptual model diagram.
dumbnose f6d1c6f
Small updates to the conceptual model and incorporated it into Section 1
dumbnose 290c01d
Small phrase update. Checking in so it isn't lost.
dumbnose 9c2896d
Merge branch 'master' into jsheehan-model-updates
dumbnose c0c8c89
More terminology updates, including changing 'Container' to
dumbnose b39d5f9
Merge branch 'master' into jsheehan-model-updates
dumbnose 99c6383
Merge branch 'jsheehan-model-updates' of github.com:dumbnose/hydra-sp…
dumbnose 39b14d3
Small change from Container to Workload
dumbnose File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -6,12 +6,15 @@ For example, a contemporary cloud application may be composed of dozens of micro | |||||
|
||||||
This specification provides a description of such applications, where the description is aimed at separating the concerns of developers from the concerns of operators. Furthermore, it suggests patterns and processes for managing such applications. The specification describes a model for cloud native (i.e. highly distributed) cloud applications, encompassing public cloud technologies, on-prem solutions, and IoT/edge technologies. By specifying a common model, this specification provides a foundation for multiple implementations of a shared description of cloud native applications. | ||||||
|
||||||
This open specification defines: | ||||||
This open specification defines the following model: | ||||||
|
||||||
- __Component schematics__, where developers declare the operational characteristics of the code they deliver _in infrastructure neutral terms_. | ||||||
- __Application scopes__, a way to group components into loosely coupled applications with common characteristics. | ||||||
![Conceptual Model Diagram](./assets/conceptual-model-diagram.png) | ||||||
|
||||||
- __Component__, where developers declare the operational characteristics of the code they deliver _in infrastructure neutral terms_. | ||||||
- __Scopes__, a way to loosely couple components into groups with common characteristics. | ||||||
- __Applications__, where developers group components together into a single, deployable unit and specifies cross-component info, such as health scopes. | ||||||
- __Traits__ for assigning operational features to instances of components. | ||||||
- __Application configuration__, defines a deployment of components, their traits, and application scopes. | ||||||
- __Application configuration__, defines a configuration of an application, its traits, and additional scopes, such as network scopes. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
- __Workload types and configurations__, which describe the underlying runtime for a particular workload, as well as exposing per-application configuration. | ||||||
|
||||||
Additional goals of the specification are to: | ||||||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -6,9 +6,9 @@ This section provides an overview of the specification and the terminology. It b | |||||
|
||||||
As a foundation for the specification, the following roles are defined. These are extracted from a combination of user stories, research, and user input. While this is not an exhaustive list of possible roles, these are the roles identified as the primary targets for this specification. | ||||||
|
||||||
- __Developers__ deliver business value in the form of code. While they should understand the operational characteristics of the code they deliver, they are unconcerned with _how_ operational requirements are fulfilled. For instance, a developer may be aware that their code writes data to a specific path on a file system, but need not concern themselves with what kind of volume (disk) is mounted to that path or how that dependency is fulfilled. | ||||||
- __Developers__ deliver business value in the form of code. While they should understand the operational characteristics of the code they deliver, they are unconcerned with _how_ operational requirements are fulfilled. For instance, a developer may be aware that their code writes data to a specific path on a file system, but need not concern themselves with what kind of volume (disk) is mounted to that path or how that dependency is fulfilled. This role includes the responsibilities of application architect. | ||||||
|
||||||
- __Application operators__ deliver business value by configuring, installing, and managing components and/or applications such as updating, scaling, auto recovery, etc. Unlike developers and application composers, operators are concerned with _how_ a component or application's operational requirements are fulfilled. For instance, if a developer has declared that a component writes data to a specific path on a file system, an operator may concern themselves with mounting an appropriate volume to that path. | ||||||
- __Application operators__ deliver business value by configuring, installing, and managing components and/or applications such as updating, scaling, auto recovery, etc. Unlike developers, operators are concerned with _how_ a component or application's operational requirements are fulfilled. For instance, if a developer has declared that a component writes data to a specific path on a file system, an operator may concern themselves with mounting an appropriate volume to that path. | ||||||
|
||||||
- __Infrastructure operators__ deliver value by managing low-level infrastructural components. This may range from managing the physical hardware in an on-premises network to directly managing cloud service offerings in a public cloud. Infrastructure operators are less concerned with the particular configuration needs of _an application_, focusing instead on the big picture of how an enterprise's overall infrastructure is managed. For example, an infrastructure operator may manage the underlying storage offerings that are used for provisioning persistent storage. | ||||||
|
||||||
|
@@ -18,15 +18,18 @@ In many organizations, some individuals may fulfill more than one of the above r | |||||
|
||||||
This specification proposes a model that defines cloud native applications as follows: | ||||||
|
||||||
> A cloud native application is a collection of interrelated, but discrete _components_ (services, tasks, workers) that, when coupled with configuration and instantiated in a suitable runtime, together accomplish a unified functional purpose. | ||||||
> A cloud native application is a collection of interrelated, but discrete _components_ (services, tasks, workers) that are grouped as an _application_. This _application_ is combined with a configuration and instantiated in a suitable runtime to accomplish a unified functional purpose. | ||||||
|
||||||
The application model defines the following: | ||||||
|
||||||
- _Components_ represents a runnable unit, together with a description (schematic). | ||||||
![Conceptual Model Diagram](./assets/conceptual-model-diagram.png) | ||||||
|
||||||
- _Components_ represent runnable units, together with a description (schematic). | ||||||
- _Workload types_ identify the different workloads that a component can execute. | ||||||
- An _application_ is a group of _Components_ that represents a deployable unit of functionality. | ||||||
- _Traits_ are overlays that augment a component with additional operations-specific features. Traits represent operator concerns, not developer concerns. | ||||||
- _Application scopes_ represent application boundaries by grouping components with common properties or dependencies. | ||||||
- An _application configuration_ describes a set of component instances, their traits, and the application scopes in which they are placed, combined with configuration parameters and metadata. | ||||||
- _Scopes_ represent application boundaries by grouping components with common properties or dependencies. | ||||||
- An _application configuration_ describes an application's traits, and the application scopes in which they are placed, combined with configuration parameters and metadata. | ||||||
|
||||||
Thus, an _application_ is a collection of _components_ with a set of operational traits and scoped together into one or more application boundaries. | ||||||
|
||||||
|
@@ -122,7 +125,7 @@ A component schematic is composed of the following pieces of information: | |||||
- Metadata: Information _about_ the component, primarily directed toward the user | ||||||
- Resource requirements: The additional minimum needs that must be satisfied in order for the component to be executed. For example, minimum memory, CPU, and filesystem mounts | ||||||
- Parameters: The parameters that can be adjusted for specific runtime configuration | ||||||
- Containers: A list of the runnable pieces (OCI images, functions, etc.) used by this component. All built-in component workload types have at least one associated container | ||||||
- Workload: A list of the runnable pieces (OCI images, functions, etc.) used by this component. The initial version will only support container workloads. | ||||||
|
||||||
### Workloads and Workload Types | ||||||
|
||||||
|
@@ -143,7 +146,7 @@ A trait is described as: | |||||
|
||||||
### Application Configuration | ||||||
|
||||||
An application configuration is a resource that declares how an application (described as an application schematic and component schematics) can be instantiated and configured, including which parameter overrides and add-on traits. | ||||||
An application configuration is a resource that declares how an application can be instantiated and configured, including which parameter overrides and add-on traits. | ||||||
|
||||||
An application configuration has the following parts: | ||||||
|
||||||
|
@@ -154,7 +157,7 @@ An application configuration has the following parts: | |||||
|
||||||
## Representing Hydra Objects as Schematics | ||||||
|
||||||
The Hydra specification represents Hydra schematics (components, trait definitions, application configurations, etc.) as _schematics_. A schematic is a structured document that provides a declaration of an object or an object's desired state. Throughout this specification, schematics are represented in [YAML]() formatting. However, nothing in this specification forecloses the possibility of representing schematics as JSON documents or other similarly structured textual or binary representations. | ||||||
The Hydra specification represents Hydra schematics (components, applications, trait definitions, application configurations, etc.) as _schematics_. A schematic is a structured document that provides a declaration of an object or an object's desired state. Throughout this specification, schematics are represented in [YAML]() formatting. However, nothing in this specification forecloses the possibility of representing schematics as JSON documents or other similarly structured textual or binary representations. | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
|
||||||
### The Structure of a Schematic | ||||||
|
||||||
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This point of Applications concept does not exist yet.
It is related to #148, but for now we might want to hold or modify this PR.