.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. http://creativecommons.org/licenses/by/4.0
.. Copyright 2018 Huawei Technologies Co., Ltd.

SO - Architecture
===============

SO Functional View
--------------------

.. image:: ../images/SO_Architecture_1.png

SO Deployment View
--------------------

.. image:: ../images/SO_Architecture_Internal.png

SO Sub-Components
------------------

**API Handler**

  RESTful interface to northbound clients
      
	* Handle service-level and infrastructure (VNF & network) requests
	
  Service-agnostic APIs
    * “Service Instantiation API”

  Model-driven recipe selection
    * Use SO Catalog to map input requests to BPMN flows
    * Dynamic lookup based on service-model + action
    * Input data forwarded to BPMN flow
	
  Track open and completed requests via SO Request DB

  Multiple API-H modules may support different APIs

**BPMN Execution Engine**

  Open-source Camunda platform
    * Support BPMN 2.0 service recipes

  Expose RESTful interface to API-H (unique path per recipe)

  Make use of common “building block” sub-flows

  Sequence orchestration steps for each Resource in the recipe
    * Request and configure network resources via SDN-C
    * Manage cloud resources via PO (OpenStack)
    * Update inventory via A&AI
  
  Perform error handling/rollback

**Resource Adapters**

  Interfaces to lower level controllers and other ONAP components
   * Platform Orchestrator, SDN-Controller, APP-Controller, VFC-Controllers, Multi-Cloud
   * Hides the details of complex interfaces (e.g. OpenStack APIs)
   * Expose interfaces to BPMN flows as SOAP or REST APIs
   * Support synchronous and asynchronous operations
   
  Provided as part of SO platform for use by all BPMN flows

  Use SO Catalog to map resource requests to a recipe/template

  Data-driven design
   * Catalog templates may be updated via self-service (outside of release cycles)
   * Merge input parameters with templates at run-time

**Data Stores**
   
  Request DB
   * Tracks open and completed requests
  
  SO Catalog
   * SO view of the SDC Catalog
      * service and resource models, recipes, and templates
   * Populated via SDC distribution service from TOSCA models

  Camunda DB
   * Maintain state for BPMN flows
   * Supports multiple active engines
   
**SDC Distribution Client**

  Receive updated service models from SDC
   * Event-bus notifications when new models available
   * HTTP retrieval of models (TOSCA) and artifacts (Heat)
   
  Receive distributions as TOSCA models

  Populate SO Catalog

  Support self-service updates to models and artifacts

**SO Monitoring**

  Monitor BPMN Workflow execution by providing
   * Service list search based on search criteria
   * Service statistic
   * Service Process Instance Rendering and Detail

**SO VNFM Adapter**

  Support external SVNFMs through SOL003 APIs
   * Create, Instantiate, Terminate and Delete VNF, including Granting, Subscription and Lifecycle Notifications
   * Tracking capability which VNFM instance has handled with which VNF instance
   * BPMN Building Block workflows and Java-based recipes for VNF LCM
   * VNFM Simulator for validating SO VNFM Adapter NBI and SBI for integration testing

Third Party and Open Source
---------------------------

**BPMN Engine**
  Camunda (open source)

**Other Open Source Components of Note:**
  Tomcat
  MySQL/MariaDB
  Openstack Java SDK (“woorea”)





  
 

