docker資源隔離,PostgreSQL 會話級資源隔離探索

 2023-10-08 阅读 28 评论 0

摘要:背景 如果一個數據庫對外提供的服務,或者承載的業務很多時,你首先想到的肯定是拆分數據庫。 但是,拆分畢竟是有成本的,而且有時并不是所有的場景都適合拆分來解決。 如果多個業務混合在一起使用一個數據庫,就容易造成資源的爭搶。 那么不

背景

如果一個數據庫對外提供的服務,或者承載的業務很多時,你首先想到的肯定是拆分數據庫。

但是,拆分畢竟是有成本的,而且有時并不是所有的場景都適合拆分來解決。

如果多個業務混合在一起使用一個數據庫,就容易造成資源的爭搶。

那么不拆分的情況下,控制每個業務或者每個會話的資源使用呢?

如何區分來源應用

docker資源隔離?要隔離應用使用數據庫的資源,首先要區分應用。

通常如果一個數據庫提供了多個業務服務時,會給每個業務創建不同的庫或者分配不同的用戶。
screenshot

當然,如果你用了同一個庫,或者同一個數據庫,就分不清業務了嗎?
當然不是,你還可以從業務的來源IP區分。
screenshot

如果業務部署在同一個IP上,就沒有辦法區分業務了吧?
當然也不是,你還可以通過application_name來區分業務。
screenshot

用什么手段隔離資源

PostgreSQL 是進程模式的,如果結合cgroup,就可以做到會話級別的資源隔離。

k8s資源隔離,客戶端向postmaster發起連接請求,postmaster fork一個backend process處理該連接請求,以及將來改客戶端的SQL請求。

根據前面區分來源應用的方法,找到對應的應用。(這個區分方法應該首先要存儲在數據庫的表中,或者使用函數的手段獲得)

根據應用于cgroup的映射關系,找到對應的cgroup,然后將這個PID寫入對應cgroup的tasks文件即可。
screenshot

screenshot

步驟

  • 創建cgroup,包括mem, net, cpu, iops
  • 在每個cgroup中為每個業務創建對應的subcgroup,并配置對應的資源限制。
    例如(內存,網絡包轉發限制,網絡帶寬限制,CPU時間片分配限制,塊設備的讀寫IOPS和讀寫帶寬限制)
  • 修改內核,在fork后,需要處理將pid寫入cgroup的動作。
  • 創建對應的函數,將指定的PID放到指定的CGROUP中。

小結

  • PostgreSQL的進程模式,為會話級資源隔離提供了便利。
  • 即使不改內核,你也可以通過在操作系統層部署程序的方式,做到對PostgreSQL會話級的資源隔離管理。
    pg_stat_activity中有你需要的用來區分客戶端應用的信息(包括客戶端IP, username, dbname, pid, application_name)。

傳統應用資源隔離?祝大家玩得開心,歡迎隨時來 阿里云促膝長談 業務需求 ,恭候光臨。

阿里云的小伙伴們加油,努力做 最貼地氣的云數據庫

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/131706.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息