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

本文涉及的产品
简介: 大家好,这里是重新发现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执行某些特定命令》

 

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
1月前
|
关系型数据库 Serverless 分布式数据库
【公测】PolarDB PostgreSQL版Serverless功能免费使用​!
【公测】PolarDB PostgreSQL版Serverless功能免费使用​,公测于2024年3月28日开始,持续三个月,公测期间可以免费使用!
|
2月前
|
运维 Serverless 调度
Serverless 应用引擎常见问题之资源使用完影响服务使用如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
24 0
|
4月前
|
关系型数据库 MySQL Serverless
高顿教育:大数据抽数分析业务引入polardb mysql serverless
高顿教育通过使用polardb serverless形态进行数据汇总,然后统一进行数据同步到数仓,业务有明显高低峰期,灵活的弹性伸缩能力,大大降低了客户使用成本。
|
2月前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless功能上线公测啦,公测期间免费使用!
Serverless数据库能够使得数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。PolarDB PostgreSQL版 Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的 PolarDB PostgreSQL版产品新形态。
|
20小时前
|
关系型数据库 Serverless 分布式数据库
PolarDB Serverless
【5月更文挑战第12天】PolarDB Serverless
11 4
|
2天前
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless技术原理解读
数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。 本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。
38 0
PolarDB PostgreSQL版Serverless技术原理解读
|
4天前
|
关系型数据库 Serverless 分布式数据库
高峰无忧,探索PolarDB PG版Serverless的弹性魅力
在数字经济时代,数据库成为企业命脉,面对爆炸式增长的数据,企业面临管理挑战。云原生和Serverless技术革新数据库领域,PolarDB PG Serverless作为阿里云的云原生数据库解决方案,融合Serverless与PostgreSQL,实现自动弹性扩展,按需计费,降低运维成本。它通过计算与存储分离技术,提供高可用性、灾备策略和简化运维。PolarDB PG Serverless智能应变业务峰值,实时监控与调整资源,确保性能稳定。通过免费体验,用户可观察其弹性性能和价格力,感受技术优势。
|
4天前
|
关系型数据库 测试技术 Serverless
5分钟免费体验PolarDB PG版Serverless的极致弹性!
基于阿里云瑶池数据库解决方案体验馆,带你体验PolarDB PG版 Serverless形态下的性能压测环境,基于可选择的标准压测工具进行压测,构造弹性场景进行压测,实时动态展示弹性能力、价格和性价比结果,压测环境可开放定制修改、可重复验证。参与活动即有机会获得小爱随身音响、体脂秤、极客时间VIP月卡、鼠标垫等精美礼品。
|
2月前
|
存储 关系型数据库 Serverless
PolarDB常见问题之serverless试用时无法选择已有的 vpc如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。
|
2月前
|
关系型数据库 Serverless 分布式数据库
PolarDB的Serverless能力与同类型产品的对比
【2月更文挑战第21天】PolarDB的Serverless能力与同类型产品的对比
21 2

热门文章

最新文章

相关产品

  • 函数计算