如何让工作人员在Openstack Nova中共享一个通用的DB连接池



正如我所知,在openstack nova系统中,DB连接由Oslo_DB管理,其后端是SqlAlchemy

让我们以nova-api为例:每个工作进程都将打开自己的专属数据库连接池。其中,max_pool_size(or api_max_pool_size)决定持久连接的数量max_overflow(or api_max_overflow)规则工作人员可以请求的最大瞬时连接。

在大规模的senario中,我们可以增加worker的#或nova-api的#,以提高最大请求处理能力。它可能会导致持久连接的浪费(在稳定状态下,我们可能会有很多未使用的持久连接,其他组件(如nova导体(也会受到影响(。我认为max_pool_size# of worker之间的平衡可能是解决这个问题的一种可能方法。但是,我想知道有没有任何可能的方法让所有的工作人员共享一个通用的DB连接池,但启动他们自己的专用连接池?通过这种方式,我们可以显著提高DB连接的使用率,并为其他组件留出连接空间

示例:独占连接池(当前secnario(:

# of nova-api = 10
# of worker worker = 6
max_pool_size = 5
api_max_pool_size = 5
# of steady connection we may occupy from DB = 10 * 6 * (5+5) = 600
Suppose that DB would allow 1000 connections in the same time, 600 idle conn would be horrible for the whole system. 

公用连接池

# of nova-api = 10
# of worker worker = 6
max_pool_size = 5
api_max_pool_size = 5
Since in this ideally senario, workers share a common conn pool, so we pop off the workers number and would get: 
number of steady connection we may occupy from DB = 10 * (5+5) = 100

同样,我不希望通过调整workers或max_pool_size的数量来提高连接的使用率。有没有可能让工人共享一个共同的连接池

非常感谢那些世界卫生组织在这里分享任何实践或想法!

每个工作程序都是一个单独地址空间中的单独python进程。因此,它们无法共享数据库连接。

此外:

  1. 600(或者是80?(不是数据库连接数的问题。我的猜测是,它只是几个MB的RAM
  2. 您需要相当大的Nova请求工作量,才能使10个Nova API实例和5个工作人员完全填充其连接池

因此,除非你有明确的证据表明你在实践中确实有大约600个DB连接,并且它们实际上消耗了大量资源,否则这听起来像是一个不必要的优化。

最新更新