Jump to: navigation, search

Difference between revisions of "Neutron/LBaaS/Architecture"

< Neutron‎ | LBaaS
 
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
= Scope =  
+
= Scope =
  
 
This document describes the architecture of LBaaS and introduces internal APIs
 
This document describes the architecture of LBaaS and introduces internal APIs
  
== High-level Decomposition ==
+
== Modules Decomposition ==
  
 
LBaaS architecture is based on advanced services introduced into Quantum. The structure is following:
 
LBaaS architecture is based on advanced services introduced into Quantum. The structure is following:
 +
 +
[[Image:Quantum$$LBaaS$$Architecture$lbaas_architecture_new.png]]
  
 
* LBaaS Quantum Extension - is responsible for handling REST API calls
 
* LBaaS Quantum Extension - is responsible for handling REST API calls
Line 15: Line 17:
 
* LBaaS Agent - is stand-alone service that provides API for driver developers
 
* LBaaS Agent - is stand-alone service that provides API for driver developers
 
* Driver - is a module that transforms LBaaS object model into vendor-specific model and deploys configuration onto load-balancing device
 
* Driver - is a module that transforms LBaaS object model into vendor-specific model and deploys configuration onto load-balancing device
 +
 +
== Sequence Diagram ==
  
 
LBaaS management is performed via REST API. Calls that perform read operations (involving DB only) are done in synchronous manner, all other calls (status retrieval, write operations) are done asynchronously. See [[Quantum/LBaaS/REST API]] for more details.
 
LBaaS management is performed via REST API. Calls that perform read operations (involving DB only) are done in synchronous manner, all other calls (status retrieval, write operations) are done asynchronously. See [[Quantum/LBaaS/REST API]] for more details.
Line 22: Line 26:
 
The diagram (#1) for update operation is following:
 
The diagram (#1) for update operation is following:
  
 +
[[Image:Quantum$$LBaaS$$Architecture$lbaas_update_sequence.png]]
 +
 +
== Driver API ==
 +
 +
----
 
== Appendix ==
 
== Appendix ==
  
Diagram #1 is created using [http://www.websequencediagrams.com], source code:
+
Diagram #1 is created using http://www.websequencediagrams.com, source code:
  
 
<pre><nowiki>
 
<pre><nowiki>
Line 36: Line 45:
 
     Plugin --> Extension: Accepted
 
     Plugin --> Extension: Accepted
 
     Extension -> User: HTTP 202
 
     Extension -> User: HTTP 202
else Error
+
else Invalid
 
     Plugin --> Extension: Error Message
 
     Plugin --> Extension: Error Message
 
     Extension -> -User: HTTP 40x
 
     Extension -> -User: HTTP 40x
Line 50: Line 59:
 
Driver --> -Agent: Status
 
Driver --> -Agent: Status
 
Agent -> -Plugin: AMQP Response  
 
Agent -> -Plugin: AMQP Response  
Plugin --> DB: Update DB
+
 
Plugin --> DB: Clear W-Lock
+
alt Success
 +
    Plugin --> DB: Update DB
 +
else Failure
 +
    Plugin --> DB: Store Last Error
 +
end
 +
Plugin --> DB: Clear W-Lock  
 
deactivate Plugin
 
deactivate Plugin
 
deactivate DB
 
deactivate DB
 
</nowiki></pre>
 
</nowiki></pre>

Revision as of 13:48, 26 October 2012

Scope

This document describes the architecture of LBaaS and introduces internal APIs

Modules Decomposition

LBaaS architecture is based on advanced services introduced into Quantum. The structure is following:

File:Quantum$$LBaaS$$Architecture$lbaas architecture new.png

  • LBaaS Quantum Extension - is responsible for handling REST API calls
  • LBaaS Quantum AdvSvc Plugin - is a core of service, it is responsible for:
    • DB storage
    • Request validation
    • Scheduling of load balancing services (deployment to LB devices)
  • LBaaS Agent - is stand-alone service that provides API for driver developers
  • Driver - is a module that transforms LBaaS object model into vendor-specific model and deploys configuration onto load-balancing device

Sequence Diagram

LBaaS management is performed via REST API. Calls that perform read operations (involving DB only) are done in synchronous manner, all other calls (status retrieval, write operations) are done asynchronously. See Quantum/LBaaS/REST API for more details.

Communicaion between AdvSvc Plugin and Agent is done via AMQP.

The diagram (#1) for update operation is following:

File:Quantum$$LBaaS$$Architecture$lbaas update sequence.png

Driver API


Appendix

Diagram #1 is created using http://www.websequencediagrams.com, source code:

title Update Request

User -> +Extension: REST API Request 
activate User
Extension --> +Plugin: Core API Request

alt Valid
    Plugin --> Extension: Accepted
    Extension -> User: HTTP 202
else Invalid
    Plugin --> Extension: Error Message
    Extension -> -User: HTTP 40x
end

deactivate User

Plugin --> +DB: Set W-Lock
Plugin -> +Agent: AMQP Request
Agent --> +Driver: Driver API call
Driver -> +Device: Apply Change
Device -> -Driver: Status
Driver --> -Agent: Status
Agent -> -Plugin: AMQP Response 

alt Success
    Plugin --> DB: Update DB
else Failure
    Plugin --> DB: Store Last Error
end
Plugin --> DB: Clear W-Lock 
deactivate Plugin
deactivate DB