Citus分布式方案(三)- 多租户场景的应用(企业版特性)

(三)多租户场景的应用(企业版特性)

本节内容所使用的特性仅在Citus企业版中可用。

资源的扩展

多租户数据库的设计需要适应业务增长,以便存储未来规模下更多的数据。Citus可以通过添加新机器获得轻松扩展,并且无需进行任何更改或停用应用程序。

1. 扩充新的节点

通过重新平衡Citus集群中的数据,可以增加数据大小或客户数量,并根据需要提高性能。添加新机器允许您将数据保存在内存中,即使这些数据远远大于一台机器所能存储的数据。

如果只有少数大型承租者的数据增加,那么可以将这些特定的承租者隔离为独立的节点,以获得更好的性能。

要扩展Citus集群,首先向其添加一个新的工作节点,可以使用第一节中提到的master_add_node函数手动添加节点:

SELECT * from master_add_node('192.168.1.103', 5432);

2. 平衡节点数据

添加了节点,它立即在系统中可用。由于它上没有存储租户,因此Citus还不会在那里运行任何查询。要移动现有数据到新增节点上,可以要求Citus重新平衡数据。在活动节点之间移动数据,用来均衡每个节点上的数据量:

SELECT rebalance_table_shards('companies');

重新平衡提供了协同定位的能力,帮助Citus重新平衡由company_id分布的其他表。此外,应用程序在数据重新平衡期间不需要停机,读请求可以无缝地继续,而写请求只有在影响当前正在运行的分片时才会被锁定。

大租户的处理

我们知道了如何随着租户数量的增加而扩展集群,但很多时候用户通常会遇到两个问题:第一个问题,随着时间推移,它们最大的租户变得太大;第二个问题,在单个数据节点上同时了承载大型租户和小型租户,那么此时,对性能是否构成了影响,我们需要怎么去处理这些问题。

1. ZIPF分布

关于第一个问题,通过调查来自大型SaaS站点的数据可以发现,随着租户数量的增加,租户数据的大小通常会遵循Zipfian分布。

例如,在一个包含100个租户的数据库中,最大的租户预计将占数据的20%左右。在一个大型SaaS公司的更现实的例子中,如果有一万个租户,最大的租户将占数据总量的2%左右。即使是10TB的数据,最大的租户也需要200GB,这个数据量级单个节点即可满足。

2. 混合大小型租户

关于大租户和小租户位于同一节点时的性能问题,通过标准的分片再平衡可能会改善大租户和小租户混合的整体性能,但Rebalancer只是简单地分配分片数据以均衡节点上的存储使用,而不检查每个分片上分配了哪些承租者。

为了改善资源分配,保证租户的QoS(Quality of Service,服务质量),有必要将大型租户移动到专用节点。Citus提供了实现这一点的工具,可以通过以下两个步骤来隔离这个租户的数据:

首先,将租户的数据隔离到适合移动的专用切分。CASCADE:将此更改应用到由company_id分片的其他表中。

SELECT isolate_tenant_to_new_shard(
  'companies', 5, 'CASCADE'
);

我们将得到专为保存company_id=5的分片id。

其次,我们需要将数据移动到一个新的专用节点,按照之前的介绍,创建一个新节点。使用master_move_shard_placement函数需要设置wal_level为logical。

-- find the node currently holding the new shard
SELECT nodename, nodeport
  FROM pg_dist_placement AS placement,
       pg_dist_node AS node
 WHERE placement.groupid = node.groupid
   AND node.noderole = 'primary'
   AND shardid = 102240;

-- move the shard to your choice of worker, it will also move the other shards created with the CASCADE option.
SELECT master_move_shard_placement(
  102240,
  'source_host', source_port,
  'dest_host', dest_port);

查询pg_dist_placement,即可确认分片的移动情况。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值