支持 redis 作为 mgmt 存储后端

https://blueprints.launchpad.net/zaqar/+spec/support-redis-as-management-storage-backend

Redis 与其他数据库解决方案在许多方面都不同,它支持两种模式:内存存储和磁盘存储。我们可以通过修改 redis.conf 选择其中一种模式。如果我们在 redis.conf 中添加 save 选项,redis 可以周期性地将数据保存到磁盘:save 900 1 save 300 10 save 60 10000

Redis 包含一个相当高性能的数据库实现。目前,zaqar 支持 redis、mongodb 和 swift 作为存储后端。经过性能测试,我们发现 redis 在这些存储后端中的性能最高。使用 Redis,我们可以提供一个非常实用、易于管理和扩展,同时提供卓越性能的系统。

问题描述

为了增强 zaqar 的性能,有必要支持 redis 作为管理数据库后端。

目前,Zaqar 已经支持 sqlalchemy 和 mongodb 作为管理存储后端,这对于 redis 来说将是一个很好的参考。

提议的变更

  1. 在 redis 存储中添加 CatalogueController

添加诸如:insert、update、delete、list、get、drop_all 等函数。

  1. 在 redis 存储中添加 FlavorsController

添加诸如:insert、update、delete、list、get、drop_all 等函数。

  1. 在 redis 存储中添加 PoolsController

添加诸如:insert、update、delete、list、get、drop_all 等函数。

缺点

备选方案

MongoDB SQL

数据模型影响

我们需要添加三个表模型,如下所示

  1. 用于 catalogue 表的 Redis 数据结构

  • 所有项目 (Redis 有序集合)

    按名称排序的所有 queue_ids 集合。用于删除 catalogue 表的所有记录。

    Key: catalogue

    Id

    name

    <project_id>.<queue_name>

  • 项目索引 (Redis 有序集合)

    按名称排序的给定项目的队列 id 集合。

    Key: <project_id>.catalogue

    Id

    name

    <project_id>.<queue_name>

  • 队列和池信息 (Redis 哈希)

    Key: <project_id>.<queue_name>.catalogue

    名称

    字段

    项目

    p

    队列

    p_q

    p_p

  1. 用于 flavor 表的 Redis 数据结构

  • 所有 flavor_ids (Redis 有序集合)

    按名称排序的所有 flavor_ids 集合。用于删除 flavor 表的所有记录。

    Key: flavors

    Id

    name

    <flavor>

  • 项目索引 (Redis 有序集合)

    按名称排序的给定项目的 flavor 集合。

    Key: <project_id>.flavors

    Id

    name

    <flavor>

  • Flavor 信息 (Redis 哈希)

    Key: <flavor_id>.flavors

    名称

    字段

    flavor

    f

    project

    p

    capabilities

    c

  1. 用于 pools 表的 Redis 数据结构

  • 所有池 (Redis 有序集合)

    按名称排序的所有 pool_ids 集合。用于删除 pools 表的所有记录。

    Key: pools

    Id

    name

    <pool>

  • Flavor 索引 (Redis 有序集合)

    按名称排序的给定 flavor 的 pool_ids 集合。

    Key: <flavor>.pools

    Id

    name

    <pool>

  • Pools 信息 (Redis 哈希)

    Key: <pool>.pools

    名称

    字段

    pool

    p

    uri

    u

    weight

    w

    options

    o

实现

负责人

主要负责人

gengchc2 <geng.changcai2@zte.com.cn>

二级分配人

gecong <ge.cong@zte.com.cn>

里程碑

完成目标里程碑

Queens-Q2

工作项

  1. 在 redis 存储中添加 CatalogueController。

  2. 在 redis 存储中添加 FlavorsController。

  3. 在 redis 存储中添加 PoolsController。

依赖项

[1]:https://review.opendev.org/#/c/345133/

测试

需要创建单元测试和 Tempest 测试来覆盖代码更改。

文档影响

  1. 添加关于 redis 配置和 HA 的文档。

参考资料

[2]:http://paste.openstack.org/show/621298/