OASIS has completed its public review of TOSCA Simple Profile in YAML Version 1.3, which means that this specification is close to being approved as an official OASIS standard. In anticipation of its formal publication, I’d like to offer a preview of the main new features introduced in TOSCA Version 1.3. Hopefully you’ll notice the common theme behind many of the Version 1.3 enhancements: this release is primarily focused on making it easier for orchestrators to track run-time state of deployed service components and to automatically respond to such changes. These improvements will enable you to use TOSCA not just for initial service deployment, but for ongoing service lifecycle management as well, which will tremendously increase the value of TOSCA.
Of course, v1.3 includes many other new features as well that improve the quality and usability of the specification. For a complete list, please refer to this presentation.
Service Instance Model
Before I delve into the details of the new TOSCA features,
I’d like to provide additional context about the need for run-time state in
TOSCA. TOSCA uses a model-driven orchestration paradigm, which means that a TOSCA
orchestrator is expected to maintain a run-time model of each deployed service
(the service instance model) and then use this model for on-going automated
management of the service. This service instance model is created from the
service template and expresses the complete structure and state of a deployed
service. Run-time state of individual service components is stored in attributes
of the corresponding nodes and relationships in the service topology. Template
designers use the TOSCA intrinsic get_attribute function to retrieve attribute
values from nodes or relationships in the instance model and then use these values
as inputs to workflows, or to evaluate condition clauses in policies.
Unfortunately, while the instance model is critical to
TOSCA, previous versions of the TOSCA specification offered no language support
for allowing TOSCA orchestrators to keep attribute values up-to-date. This has
led to incomplete, non-portable, or incorrect implementations. TOSCA Version
1.3 fixes this.
Operation Outputs and Output Mappings
TOSCA orchestrators interact with external systems by
invoking interface operations on nodes and relationships as defined in service
templates. Operations typically define input parameters for the specific state
variables to be changed. However, many interactions also have side effects that
affect the state of external systems beyond what is defined by operation inputs.
For example, when an orchestrator interacts with a cloud system to orchestrate
a compute node, that compute node may obtain an IP address through DHCP. While
the IP address allocation is not under control of the orchestrator, the
orchestrator must still be informed of the allocated address since that address
will be required for future interactions with the compute node. This means that
the operation for creating a compute node must include a mechanism to
communicate the allocated IP address for that compute node back to the orchestrator.
TOSCA Version 1.3 supports this as follows:
- It introduces language support for defining output parameters for each interface operation that specify named and typed values that must be returned by the external system when the orchestrator invokes an interface operation.
- In addition, the output assignment syntax for these outputs consists of attribute mappings that specify the attributes on nodes or relationships into which output values must be stored when they are received by the orchestrator.
By defining output parameters and corresponding attribute
mappings, orchestrators now close the loop between the orchestrator and the
external systems, and they enable the instance model to accurately reflect the
state of the external systems in service instance model attributes at all times.
Notifications in Interface Definitions
Of course, not all run time state attributes reflect
side-effects that are the result of orchestrator-initiated operations. For
example, orchestrators may simply want to monitor certain service performance
or load indicators—such as system load, utilization percentages, throughput
values, error rates, etc.—and track these indicators as service instance model
attributes. In addition, there are situations where external systems can change
independently as a result of external events such as failures or external
configuration changes.
To support these scenarios, version 1.3 introduces support for
notifications that represent external events that can be
received by the orchestrator asynchronously. Notifications are similar to
operations, except for the fact that notifications are sent by the external
systems to the orchestrator rather than the other way around. Like operations, notifications
can include outputs that define the information carried in those notifications.
For each notification output, service templates must specify output mappings
that define the attributes into which these output values are stored. This enables
the instance model to accurately reflect the state of the external systems as
well as any number of service indicators.
Event-Driven Life-cycle Management
So far, we have explained how operation outputs and
notifications make it possible for orchestrators to accurately reflect external
system state in the service instance model. This is only valuable if the
orchestrator can do something useful with these attribute values. For example, can
a service designer define service logic that allows an orchestrator to respond
autonomously to changes in external state? Can an orchestrator take corrective
action in response to a component failure? Can it scale out a service component when
certain load thresholds are exceeded?
TOSCA has been designed to support this type of closed-loop automation through language support
for event/condition/action policies. However, previous versions of the TOSCA
language did not formally define events, let alone how orchestrators were
expected to receive those events. This made it impossible to create portable
implementations of TOSCA policies. The introduction of notifications in Version 1.3 of the
language fixes this problem. Each policy trigger definition uses the
notification name as the event that triggers the policy. As a result, notifications
provide the glue that link policies to the rest of the instance model and
enable true event-driven operations.
By enabling up-to-date service instance models, Version 1.3
is a significant step forward towards true model-driven service lifecycle management.
No comments:
Post a Comment