Proposed Service Architecture for Kosmos
Change-Id: I68dc4521afe4efb520748fbc323867a045a2eb77
This commit is contained in:
parent
2e72a70820
commit
e887425fcf
@ -26,6 +26,7 @@ extensions = [
|
|||||||
#'sphinx.ext.intersphinx',
|
#'sphinx.ext.intersphinx',
|
||||||
'oslosphinx',
|
'oslosphinx',
|
||||||
'yasfb',
|
'yasfb',
|
||||||
|
'sphinx.ext.graphviz'
|
||||||
]
|
]
|
||||||
|
|
||||||
# Feed configuration for yasfb
|
# Feed configuration for yasfb
|
||||||
|
108
specs/liberty/sysarch-diagram.dot
Normal file
108
specs/liberty/sysarch-diagram.dot
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
digraph{
|
||||||
|
|
||||||
|
label="Kosmos System Overview";
|
||||||
|
overlap="ortho";
|
||||||
|
fontname="sans-serif"
|
||||||
|
|
||||||
|
subgraph cluster_api_service {
|
||||||
|
fontname="sans-serif"
|
||||||
|
label="API Service";
|
||||||
|
fontsize=12
|
||||||
|
|
||||||
|
WSGI[label="WSGI API", fontname="sans-serif", fontsize=10];
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_keystone {
|
||||||
|
fontname="sans-serif"
|
||||||
|
label="Keystone";
|
||||||
|
fontsize=12
|
||||||
|
style="dashed"
|
||||||
|
|
||||||
|
Keystone[label="Keystone API", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_conductor_service {
|
||||||
|
fontname="sans-serif"
|
||||||
|
label="Conductor Service";
|
||||||
|
fontsize=12
|
||||||
|
|
||||||
|
Conductor[label="Conductor", fontname="sans-serif", fontsize=10];
|
||||||
|
Database[label="Database", fontname="sans-serif", fontsize=10, shape="folder"];
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_engine_service {
|
||||||
|
fontname="sans-serif"
|
||||||
|
label="Engine Service";
|
||||||
|
fontsize=12
|
||||||
|
|
||||||
|
node[shape=record];
|
||||||
|
Engine[label="<f0> Engine|<f1> GSLB Plugin Interface |<f2> Status Check Consumer", fontname="sans-serif", fontsize=10];
|
||||||
|
PluginDriver[label="GSLB Plugin Driver", fontname="sans-serif", fontsize=10, shape="component"]
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_gslb_appliance {
|
||||||
|
fontname="sans-serif"
|
||||||
|
fontsize=12
|
||||||
|
label="GSLB Appliance";
|
||||||
|
style="dashed"
|
||||||
|
|
||||||
|
Applicance[label="GSLB Traffic Director", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
ApplicanceAPI[label="GSLB Appliance API", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_status_checks {
|
||||||
|
fontname="sans-serif"
|
||||||
|
fontsize=12
|
||||||
|
label="Status Check Service";
|
||||||
|
|
||||||
|
Worker[label="Status Checking Worker", fontname="sans-serif", fontsize=10];
|
||||||
|
|
||||||
|
node[shape=record];
|
||||||
|
Checks[label="<f0> Build In Checks Interface |<f1> GSLB Plugin Checks Interface", fontname="sans-serif", fontsize=10];
|
||||||
|
|
||||||
|
BuiltInChecks[label="Built In Status Checks", fontname="sans-serif", fontsize=10]
|
||||||
|
PluginChecks[label="Plugin Status Checks", fontname="sans-serif", fontsize=10, shape="component"]
|
||||||
|
}
|
||||||
|
|
||||||
|
subgraph cluster_endpoints {
|
||||||
|
fontname="sans-serif"
|
||||||
|
fontsize=12
|
||||||
|
label="Endpoints";
|
||||||
|
style="dashed"
|
||||||
|
|
||||||
|
Endpoint1[label="Endpoint", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
Endpoint2[label="Endpoint", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
Endpoint3[label="Endpoint", fontname="sans-serif", fontsize=10, style="dotted"];
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AdminUser[label="GSLB User", fontname="sans-serif", fontsize=10, style="dashed"];
|
||||||
|
|
||||||
|
AdminUser -> WSGI [dir="both"];
|
||||||
|
|
||||||
|
Keystone -> WSGI [dir="both"];
|
||||||
|
|
||||||
|
WSGI -> Conductor:f0 [dir="both"];
|
||||||
|
|
||||||
|
Conductor -> Database [dir="both"];
|
||||||
|
|
||||||
|
Engine:f0 -> Conductor [dir="both"];
|
||||||
|
|
||||||
|
Engine:f1 -> PluginDriver [dir="both"];
|
||||||
|
PluginDriver -> ApplicanceAPI [dir="both"];
|
||||||
|
|
||||||
|
Applicance -> ApplicanceAPI [dir="both"];
|
||||||
|
|
||||||
|
Worker -> Engine:f2;
|
||||||
|
Worker -> Checks [dir="both"];
|
||||||
|
Checks:f0 -> BuiltInChecks
|
||||||
|
Checks:f1 -> PluginChecks
|
||||||
|
BuiltInChecks -> {Endpoint1, Endpoint2, Endpoint3}
|
||||||
|
PluginChecks -> {Endpoint1, Endpoint2, Endpoint3}
|
||||||
|
|
||||||
|
EndUser[label="End User", fontname="sans-serif", fontsize=10, style="dashed"];
|
||||||
|
|
||||||
|
EndUser -> Applicance
|
||||||
|
Applicance -> {Endpoint1, Endpoint2, Endpoint3}
|
||||||
|
}
|
78
specs/liberty/sysarch.rst
Normal file
78
specs/liberty/sysarch.rst
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
..
|
||||||
|
|
||||||
|
This work is licensed under a Creative Commons Attribution 3.0 Unported License.
|
||||||
|
http://creativecommons.org/licenses/by/3.0/legalcode
|
||||||
|
|
||||||
|
..
|
||||||
|
This template should be in ReSTructured text. The filename in the git
|
||||||
|
repository should match the launchpad URL, for example a URL of
|
||||||
|
https://blueprints.launchpad.net/kosmos/+spec/awesome-thing should be named
|
||||||
|
awesome-thing.rst . Please do not delete any of the sections in this
|
||||||
|
template. If you have nothing to say for a whole section, just write: None
|
||||||
|
For help with syntax, see http://sphinx-doc.org/rest.html
|
||||||
|
To test out your formatting, see http://www.tele3.cz/jbar/rest/rest.html
|
||||||
|
|
||||||
|
=====================
|
||||||
|
System Architecture
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Overview
|
||||||
|
========
|
||||||
|
|
||||||
|
Services
|
||||||
|
--------
|
||||||
|
|
||||||
|
+-----------------------+--------------------------+---------------------------+-------+
|
||||||
|
| service name | deployment model | purpose | notes |
|
||||||
|
+=======================+==========================+===========================+=======+
|
||||||
|
| kosmos-api | multiple | Configuration of GSLBs | |
|
||||||
|
+-----------------------+--------------------------+---------------------------+-------+
|
||||||
|
| kosmos-conductor | multiple - single region | Database Access | |
|
||||||
|
+-----------------------+--------------------------+---------------------------+-------+
|
||||||
|
| kosmos-status-checker | multiple - global | Check status of endpoints | |
|
||||||
|
+-----------------------+--------------------------+---------------------------+-------+
|
||||||
|
| kosmos-engine | multiple - single region | Business Logic | |
|
||||||
|
+-----------------------+--------------------------+---------------------------+-------+
|
||||||
|
|
||||||
|
kosmos-api
|
||||||
|
^^^^^^^^^^
|
||||||
|
|
||||||
|
The API would be a WSGI service that implements the API Spec previously approved.
|
||||||
|
|
||||||
|
kosmos-conductor
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This will act as a single point of access to the DB, allowing for consistent data validation.
|
||||||
|
|
||||||
|
kosmos-status-checker
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This is a worker style service that will run recurring tasks - i.e. status checks on the defined endpoints
|
||||||
|
|
||||||
|
This will have a plugin interface to allow for more checks to the loaded by different plugins, or for custom checks to be written by the deployer
|
||||||
|
|
||||||
|
kosmos-engine
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This is where all the business logic resides. This service will consume status results and decide if an endpoint should be removed / added.
|
||||||
|
This service will then use the plugin loaded for the GSLB backend to orchestrate this.
|
||||||
|
|
||||||
|
Diagram
|
||||||
|
-------
|
||||||
|
|
||||||
|
.. graphviz:: sysarch-diagram.dot
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Assignee(s)
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Primary assignee:
|
||||||
|
kosmos-drivers
|
||||||
|
|
||||||
|
Milestones
|
||||||
|
----------
|
||||||
|
|
||||||
|
Target Milestone for completion:
|
||||||
|
M-1
|
Loading…
Reference in New Issue
Block a user