【重新发现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组

创建一个shell将PID放入某个cgroup组


         

脚本内容略

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

202011/20201107_03.md  《Linux : 使用sudoedit 配置- 允许普通用户a以另一个用户b或组g执行某些特定命令》

在数据库中创建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 - cpu与cpuset子系统讲解》
201606/20160611_01.md  《Linux cgroup资源隔离各个击破之- io隔离》
202011/20201107_03.md  《Linux : 使用sudoedit 配置- 允许普通用户a以另一个用户b或组g执行某些特定命令》

 

相关实践学习
【玩转ComfyUI】基于函数计算一键部署AI生图平台ComfyUI
本次实验将带大家通过使用阿里云产品函数计算FC,快速使用ComfyUI实现更高质量的图像生成。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
关系型数据库 MySQL Linux
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
本文介绍了在openSUSE系统上通过SUSE资源库安装MySQL 8.0和8.4版本的完整步骤,包括配置国内镜像源、安装MySQL服务、启动并验证运行状态,以及修改初始密码等操作,适用于希望在SUSE系列系统中快速部署MySQL的用户。
1107 3
MySQL包安装 -- SUSE系列(SUSE资源库安装MySQL)
|
运维 Ubuntu 关系型数据库
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
本文介绍了在Debian系列系统(如Ubuntu、Debian 11/12)中通过APT仓库安装MySQL 8.0和8.4版本的完整步骤,涵盖添加官方源、配置国内镜像、安装服务及初始化设置,并验证运行状态,适用于各类Linux运维场景。
3040 0
MySQL包安装 -- Debian系列(Apt资源库安装MySQL)
|
存储 关系型数据库 MySQL
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
MySQL是一款开源关系型数据库,高性能、易用、跨平台,支持多种存储引擎,广泛应用于Web开发、企业级应用等领域。本教程介绍其特点、架构及在主流Linux系统中的安装配置方法。
1609 0
MySQL介绍和MySQL包安装 -- RHEL系列(Yum资源库安装MySQL)
|
存储 运维 安全
SaaS多租户和单租户的区别解析
SaaS多租户的系统维护成本低,多租户系统在升级时,只需要更新一次,维护人员不需要对每个用户更新,节省了很大的运维成本,这对于所有客户都在做同样事情的系统来说是很有用的。
1093 3
|
供应链 JavaScript 前端开发
Java基于SaaS模式多租户ERP系统源码
ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业的运营效率和管理水平,它是一种先进的企业管理理念和信息化管理系统。 适用于小微企业的 SaaS模式多租户ERP管理系统, 采用最新的技术栈开发, 让企业简单上云。专注于小微企业的应用需求,如企业基本的进销存、询价,报价, 采购、销售、MRP生产制造、品质管理、仓库库存管理、财务应收付款, OA办公单据、CRM等。
1105 23
|
关系型数据库 Serverless 分布式数据库
PolarDB PostgreSQL版Serverless技术原理解读
数据库是现代企业IT系统中非常重要的一部分。在创建数据库时,客户往往需要比较保守地去配置数据库集群的资源,包括CPU、内存、存储以及连接数等多种参数配置,以确保业务能够在波峰和波谷都能平稳运行。在这种情况下,客户购买的集群资源在业务波谷时期会被闲置,导致整体成本偏高;而在业务压力增长阶段,集群资源又应对不足。Serverless数据库可以很好地解决这个问题。它能够让数据库集群资源随客户业务负载动态弹性扩缩,将客户从复杂的业务资源评估和运维工作中解放出来。 本文描述PolarDB PostgreSQL版Serverless的构建中, 如何实现弹得快、弹得准、弹得稳、弹得广的几个关键技术点。
77313 18
PolarDB PostgreSQL版Serverless技术原理解读
|
Oracle 关系型数据库 MySQL
实时计算 Flink版产品使用问题之整库从mysql同步到StarRocks里面,首次全量是否会对mysql造成大量资源消耗,导致影响业务服务
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
关系型数据库 Serverless 分布式数据库
体验PolarDB PostgreSQL Serverless极致弹性
体验PolarDB PostgreSQL Serverless极致弹性
|
存储 SQL 关系型数据库
MySQL数据库学习指南与学习资源推荐
MySQL数据库学习指南与学习资源推荐

热门文章

最新文章

相关产品

  • 函数计算
  • 推荐镜像

    更多