~0x44/nova/bug838466

« back to all changes in this revision

Viewing changes to docs/architecture.rst

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
..
 
2
      Copyright [2010] [Anso Labs, LLC]
 
3
 
 
4
      Licensed under the Apache License, Version 2.0 (the "License");
 
5
      you may not use this file except in compliance with the License.
 
6
      You may obtain a copy of the License at
 
7
 
 
8
          http://www.apache.org/licenses/LICENSE-2.0
 
9
 
 
10
      Unless required by applicable law or agreed to in writing, software
 
11
      distributed under the License is distributed on an "AS IS" BASIS,
 
12
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
13
      See the License for the specific language governing permissions and
 
14
      limitations under the License.
 
15
 
 
16
nova System Architecture
 
17
========================
 
18
 
 
19
Nova is built on a shared-nothing, messaging-based architecture. All of the major nova components can be run on multiple servers. This means that most component to component communication must go via message queue. In order to avoid blocking each component while waiting for a response, we use deferred objects, with a callback that gets triggered when a response is received.
 
20
 
 
21
In order to achieve shared-nothing with multiple copies of the same component (especially when the component is an API server that needs to reply with state information in a timely fashion), we need to keep all of our system state in a distributed data system. Updates to system state are written into this system, using atomic transactions when necessary. Requests for state are read out of this system. In limited cases, these read calls are memoized within controllers for short periods of time. (Such a limited case would be, for instance, the current list of system users.)
 
22
 
 
23
 
 
24
Components
 
25
----------
 
26
 
 
27
Below you will find a helpful explanation.
 
28
 
 
29
::
 
30
 
 
31
              [ User Manager ] ---- ( LDAP )
 
32
                        |  
 
33
                        |                / [ Storage ] - ( ATAoE )
 
34
  [ API server ] -> [ Cloud ]  < AMQP >   
 
35
                        |                \ [ Nodes ]   - ( libvirt/kvm )
 
36
                    < HTTP >
 
37
                        |
 
38
                     [ S3  ]
 
39
 
 
40
 
 
41
* API: receives http requests from boto, converts commands to/from API format, and sending requests to cloud controller
 
42
* Cloud Controller: global state of system, talks to ldap, s3, and node/storage workers through a queue
 
43
* Nodes: worker that spawns instances
 
44
* S3: tornado based http/s3 server
 
45
* User Manager: create/manage users, which are stored in ldap
 
46
* Network Controller: allocate and deallocate IPs and VLANs