There are many references to review.openstack.org, and while the redirect should work, we can also go ahead and fix them. Change-Id: I397b58c562079444553d393387d7c6323b06fba4
6.8 KiB
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
- Add CatalogueController in redis storage:
Add such functions: insert, update, delete, list, get, drop_all etc.
- Add FlavorsController in redis storage:
Add such functions: insert, update, delete, list, get, drop_all etc.
- 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:
- 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
- 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
- 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.opendev.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