support redis as mgmt storage backend

Change-Id: Ia4f3a87dc699585bdaae6c25c7491551df81e478
Implements: blueprint support-redis-as-management-storage-backend
This commit is contained in:
gengchc2 2017-09-15 02:14:29 -07:00
parent 9dbe2ebe9c
commit 91514b5e1c
2 changed files with 252 additions and 1 deletions

View File

@ -4,4 +4,6 @@
.. toctree::
:glob:
:maxdepth: 2
:maxdepth: 2
support-redis-as-mgmt-storage-backend

View File

@ -0,0 +1,249 @@
..
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/zaqar/+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
======================================
Support redis as mgmt storage backend
======================================
https://blueprints.launchpad.net/zaqar/+spec/support-redis-as-management-storage-backend
Redis is different than other database solutions in many ways, it support
two modes: memory storage and disk storage, We can select one of the two modes
by modifying redis.conf. If we add save options in redis.conf, redis can
cyclically save the data into disk:
save 900 1
save 300 10
save 60 10000
Redis includes a fairly high performance implementation of database.
Currently, zaqar supports redis, mongodb and swift as the storage backend.
After performance testing, we find that the performance of redis
is the highest among these storage-backend. Using Redis, we may provide a
system which is very practical to use, easy to administer and scale, while
providing excellent performances.
Problem description
===================
In order to enhance the performance of zaqar, it is necessary to support
redis as a management database backend.
At present, Zaqar has supported sqlalchemy and mongodb as management storage
backend, that would be a good reference for redis.
Proposed change
===============
1. Add CatalogueController in redis storage:
Add such functions: insert, update, delete, list, get, drop_all etc.
2. Add FlavorsController in redis storage:
Add such functions: insert, update, delete, list, get, drop_all etc.
3. Add PoolsController in redis storage:
Add such functions: insert, update, delete, list, get, drop_all etc.
Drawbacks
---------
None
Alternatives
------------
MongoDB SQL
Data model impact
-----------------
We need to add three table models, as follows:
1. Redis Data Structures for table catalogue:
* All Project (Redis sorted set):
Set of all queue_ids, ordered by name. Used to delete the all
records of table catalogue.
Key: catalogue
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <project_id>.<queue_name> |
+--------+-----------------------------+
* Project Index (Redis sorted set):
Set of all queue_ids for the given project, ordered by name.
Key: <project_id>.catalogue
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <project_id>.<queue_name> |
+--------+-----------------------------+
* Queue and pool Information (Redis hash):
Key: <project_id>.<queue_name>.catalogue
+----------------------+---------+
| Name | Field |
+======================+=========+
| Project | p |
+----------------------+---------+
| Queue | p_q |
+----------------------+---------+
| Pool | p_p |
+----------------------+---------+
2. Redis Data Structures for table flavor:
* All flavor_ids (Redis sorted set):
Set of all flavor_ids, ordered by name. Used to delete the all
records of table flavors.
Key: flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
* Project Index (Redis sorted set):
Set of all flavors for the given project, ordered by name.
Key: <project_id>.flavors
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <flavor> |
+--------+-----------------------------+
* Flavor Information (Redis hash):
Key: <flavor_id>.flavors
+----------------------+---------+
| Name | Field |
+======================+=========+
| flavor | f |
+----------------------+---------+
| project | p |
+----------------------+---------+
| capabilities | c |
+----------------------+---------+
3. Redis Data Structures for table pools:
* All pool (Redis sorted set):
Set of all pool_ids, ordered by name. Used to delete the all
records of table pools.
Key: pools
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <pool> |
+--------+-----------------------------+
* Flavor Index (Redis sorted set):
Set of all pool_ids for the given flavor, ordered by name.
Key: <flavor>.pools
+--------+-----------------------------+
| Id | Value |
+========+=============================+
| name | <pool> |
+--------+-----------------------------+
* Pools Information (Redis hash):
Key: <pool>.pools
+----------------------+---------+
| Name | Field |
+======================+=========+
| pool | p |
+----------------------+---------+
| uri | u |
+----------------------+---------+
| weight | w |
+----------------------+---------+
| options | o |
+----------------------+---------+
Implementation
==============
Assignee(s)
-----------
Primary assignee:
gengchc2 <geng.changcai2@zte.com.cn>
Secondary assignee:
gecong <ge.cong@zte.com.cn>
Milestones
----------
Target Milestone for completion:
Queens-Q2
Work Items
----------
#. Add CatalogueController in redis storage.
#. Add FlavorsController in redis storage.
#. Add PoolsController in redis storage.
Dependencies
============
[1]:https://review.openstack.org/#/c/345133/
Testing
=======
Both unit and Tempest tests need to be created to cover the code change.
Documentation Impact
====================
#. Add docs about the configuration of redis and HA.
References
==========
None
[2]:http://paste.openstack.org/show/621298/