Proposed Service Architecture for Kosmos

Change-Id: I68dc4521afe4efb520748fbc323867a045a2eb77
This commit is contained in:
Graham Hayes 2015-09-15 16:57:54 +01:00
parent 2e72a70820
commit e887425fcf
3 changed files with 187 additions and 0 deletions

View File

@ -26,6 +26,7 @@ extensions = [
#'sphinx.ext.intersphinx',
'oslosphinx',
'yasfb',
'sphinx.ext.graphviz'
]
# Feed configuration for yasfb

View 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
View 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