From e887425fcf92368c4d85db6972b81f43f9ad8c03 Mon Sep 17 00:00:00 2001 From: Graham Hayes Date: Tue, 15 Sep 2015 16:57:54 +0100 Subject: [PATCH] Proposed Service Architecture for Kosmos Change-Id: I68dc4521afe4efb520748fbc323867a045a2eb77 --- doc/source/conf.py | 1 + specs/liberty/sysarch-diagram.dot | 108 ++++++++++++++++++++++++++++++ specs/liberty/sysarch.rst | 78 +++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 specs/liberty/sysarch-diagram.dot create mode 100644 specs/liberty/sysarch.rst diff --git a/doc/source/conf.py b/doc/source/conf.py index 6c63134..039770d 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -26,6 +26,7 @@ extensions = [ #'sphinx.ext.intersphinx', 'oslosphinx', 'yasfb', + 'sphinx.ext.graphviz' ] # Feed configuration for yasfb diff --git a/specs/liberty/sysarch-diagram.dot b/specs/liberty/sysarch-diagram.dot new file mode 100644 index 0000000..04f75bf --- /dev/null +++ b/specs/liberty/sysarch-diagram.dot @@ -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=" Engine| GSLB Plugin Interface | 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=" Build In Checks Interface | 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} +} \ No newline at end of file diff --git a/specs/liberty/sysarch.rst b/specs/liberty/sysarch.rst new file mode 100644 index 0000000..648739f --- /dev/null +++ b/specs/liberty/sysarch.rst @@ -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