【重新发现PostgreSQL之美】- 12 serverless & SaaS行业 & 多租户 & 资源隔离 & 捣蛋鬼,你揍开

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: 大家好,这里是重新发现PostgreSQL之美 - 12 serverless & SaaS行业 & 多租户 & 资源隔离 & 捣蛋鬼,你揍开

背景


场景:

  • 游戏、SaaS行业. serverless 场景: 在一个企业内部, 业务线非常多,
  • 在同一个实例中有多个业务共同使用时,
  • 分析师、DBA或者运营人员有偶尔使用数据库的需求.

挑战:

  • 为每个业务分配一个数据库实例存在的问题: 资源浪费(每个实例在内存、空间方面的浪费)、弹性较差(创建资源慢、扩容缩容慢).
  • 多个业务共享一个实例存在的问题: 资源争抢、干扰、抖动、安全风险增加,
  • DBA或分析师人为的大查询可能将资源耗光, 影响在线业

PG 方案:

  • 按来源IP、USER、DBNAME、application_name等信息来区分用户和业
  • 结合cgroup隔离业务的cpu、io、网络等资源使用率, 防止干

例子


cgroup 配置举

限制组cgroupA的任务最多可以使用8核资源

限制组cgroupB的任务最多可以使用16核资源

加载CPU子系统,创建子资源分区


         
mount -t cgroup -o cpu cpu /cgroup/cpu
cd /cgroup/cpu
mkdir cgroupA
mkdir cgroupB

配置资源配比(100为基数,核数乘以100即得到cpu.shares)


         
echo 800 > cpu.shares
echo 1000000 > cpu.cfs_period_us
echo 8000000 > cpu.cfs_quota_us

         
cd ../cgroupB
echo 1600 > cpu.shares
echo 1000000 > cpu.cfs_period_us
echo 16000000 > cpu.cfs_quota_us

将PID放入某个cgroup

创建一个shellPID放入某个cgroup


         

脚本内容略

配置允许PG进程的启动账号sudo执行该命令

202011/20201107_03.md  Linux : 使用sudoedit 配置- 普通用a以另一个用bg执行某些特定命令》

在数据库中创建plpythonu, 调用shell, 将当前会话PID放入对应cgroup


         

         

         
create or replace function exec_cmd2(cmd text) returns setof text as $$
import os
v = os.popen('/home/digoal/cpu_cgroup.sh ' + cmd)
return v
$$ language plpythonu;

以下例子, 简单粗暴的逻辑,

  • postgres 用户登陆后, 会话对应的backend PID 会塞入cgroupA
  • digoal 用户登陆后, 会话对应的backend PID 会塞入cgroupB

实际使用中可以配置一个映射表,从映射表里面获取规则.


         
declare
pid int := pg_backend_pid();
begin
case current_user
when 'postgres' then perform exec_cmd2(format('%s %s',pid, 'cgroupA'));
when 'digoal' then perform exec_cmd2(format('%s %s',pid, 'cgroupB'));
else raise notice 'not mapping users cgroup';
end case;
end;
$$ language plpgsql strict;

配置login hook, 创建会话时, 自动执行以上函


         

         
session_preload_libraries = 'session_exec'
session_exec.login_name = 'exec_cmd'

postgres 用户登陆后, 会话对应的backend PID 会塞入cgroupA
digoal
用户登陆后, 会话对应的backend PID 会塞入cgroupB

更复杂的逻

限制逻辑还可以更复杂一点, 例如, 根据:

  • 来源IP
  • 登陆的用
  • 登陆的数据
  • application_name(用户在连接URL里面可以设置, 用来区分不同的业务)
  • 登陆的时
  • 当前实例级资源使用
  • 当前各个cgroup的资源使用
  • 当前映射的cgroup的资源使用

实施动作:

  • 将当前会话的PID放入某个cgoup组进行限
  • 扩大或缩小某个cgroup的限制上限. 例如凌晨放大BI业务的限制, 白天缩小BI业务的限制.

其他cgoup可以限制的指标:

  • io, 读写吞吐, 网络流量, 内存

参考

https://github.com/okbob/session_exec

202007/20200727_02.md  PostgreSQL(新建会)hook - login "trigger"插件》
201710/20171023_01.md  《在PostgreSQL中使用plpythonu 调用系统命令》
201606/20160613_01.md  Linux cgroup - cpucpuset子系统讲解》
201606/20160611_01.md  Linux cgroup资源隔离各个击破之- io隔离》
202011/20201107_03.md  Linux : 使用sudoedit 配置- 普通用a以另一个用bg执行某些特定命令》

 

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
7月前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
3月前
|
存储 运维 安全
SaaS多租户和单租户的区别解析
SaaS多租户的系统维护成本低,多租户系统在升级时,只需要更新一次,维护人员不需要对每个用户更新,节省了很大的运维成本,这对于所有客户都在做同样事情的系统来说是很有用的。
117 3
|
7月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
7月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless技术原理解读
数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。 本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。
76366 18
PolarDB PostgreSQL版Serverless技术原理解读
|
7月前
|
关系型数据库 Serverless 分布式数据库
体验PolarDB PostgreSQL Serverless极致弹性
体验PolarDB PostgreSQL Serverless极致弹性
|
存储 SQL 数据库
典型场景 | PolarDB-X 如何支撑SaaS多租户
很多平台类应用或系统(如电商CRM平台、仓库订单平台等等),它们的服务模型是围绕用户维度(这里的用户维度可以是一个卖家或品牌,可以是一个仓库,等等)展开的。因此,这类型的平台业务,为了支持业务系统的水平扩展性,业务的数据库通常是按用户维度进行水平切分。
|
人工智能 关系型数据库 Serverless
|
人工智能 关系型数据库 Serverless
探索AI知识库问答应用:函数计算与RDS PostgreSQL的奇妙融合
随着技术的飞速发展,AI大语言模型成为了当今科技界的一颗璀璨明星。我有幸跟随老陈的引导,踏入了基于函数计算(FC)和RDS PostgreSQL的AI知识库问答应用的世界。这次的探索让我深切感受到了云计算和人工智能的结合,以及它们如何塑造着未来的技术格局。
227 0
|
关系型数据库 分布式数据库 PolarDB
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
《阿里云产品手册2022-2023 版》——PolarDB for PostgreSQL
372 0

热门文章

最新文章

相关产品

  • 函数计算