Architectural principles provide guidelines when making architecture decisions. The principles are not requirements (functional or non-functional), nor should they specify the design of the system.
Flexibility in component deployment is important to ONAP functionality. All components in ONAP should be virtualized, preferably with support for both virtual machines and containers. All components should be software-based with no dependency on hardware platform. However, where hardware capabilities can enhance an ONAP component, those capabilities can be used if not required for the component to function.
All components in ONAP should avoid tight coupling between other components. Components should be service-based with clear, concise function addressed by each service, following principles of microservices.
All components in ONAP should be able to run on a shared standards-based cloud platform. Ideally, the cloud platform implementation should be pluggable and transparent to the ONAP components.
Code within ONAP should be designed in a modular fashion & reusability is highly encouraged across components. Where applicable, reusable components can be provided as shared services across ONAP components.
An open, standards-based architecture with well-defined APIs fosters interoperability both within ONAP and across complementary projects and applications.
The ability for ONAP to be used by various users worldwide dictates the need to avoid dependency on any single supplier(s). All efforts within ONAP should be agnostic to a supplier’s function, application, or code.
All aspects of a network service design in ONAP should be model-driven, avoiding, where possible, programming code. This allows for a catalog-based reusable repository for a network service lifecycle.
Embedding intelligence in the system rather than relying on expert resources fosters improved self-service with higher degrees of automation. When at all possible, actions within ONAP should be automated with minimal to no manual intervention required by operators.
The ONAP platform should support the complete lifecycle of network services.
ONAP is predicated on an accelerated lifecycle for network services. As such, agility is key in all aspects of ONAP: development of ONAP, designing of network services, and operation of both ONAP and network services. Principles of continuous integration and deployment should be followed by the ONAP platform.
The ONAP platform should allow for users (such as vendors, product designers, operations, etc.) to perform functions within ONAP without the need to depend on code written by developers. Self-service is also enabled with user-focused design.
High availability and geographic redundancy are of key importance to many network services planned for ONAP. As such all ONAP components should be designed for high availability, resiliency, and geographic redundancy, including during upgrades.
All ONAP components should keep security considerations at the fore-front of all architectural decisions. Security should be a pervasive underlying theme in all aspects of ONAP.
When any ONAP component relies on software outside of the ONAP project, the dependency on that external software should be designed to pluggable, API-oriented, supporting multiple possible implementations of that dependency.
Many ONAP implementations will require integration with a variety of OSS/BSS systems. ONAP components should strive to provide clearly defined APIs for OSS/BSS integration, including standards-based interfaces where possible.
ONAP components should strive to externalize any operational decisions into policies, allowing for dynamic definition of controls/behaviors and analytics.
Because of the variety of potential services and monetization models, ONAP component implementations should be careful to avoid assumptions about how a service might be used, the underlying resource or function, or the encompassing business model.
The needs of the users of ONAP (operators, developers, service designers, and more) should be central to the design of all user-facing components.
ONAP components and platform should work with a uniform data layer which minimizes the number of data handling technologies. A consistent information model is desirable.
ONAP modules and platform should be scalable (both scaling up and scaling down). Modules should avoid using infrastructure resources when not providing work.
The ONAP platform should support the ability manage multiple tenants and provide isolation for those tenants.
All artifacts required for ONAP components should be able to be designed from a central design component.
Backwards compatibility from release-to-release is essential to allow operators to take advantage of the features in a new release without the risk of breaking existing functionality. As such, all ONAP components should strive to ensure backward compatibility in their releases.