keda基于postgresql伸缩dify-api服务
1 概述
dify-api使用postgresql来存储数据,在dify控制台每新建一个聊天机器的聊天框,就会在conversations表里新插入一条记录,并且不断地更新字段updated_at,示例如下:
dify=# select * from conversations limit 1;
-[ RECORD 1 ]-------------+-------------------------------------
id | e880b32f-6aae-4191-890b-52f0ddbcb9b7
app_id | 7455b19d-85f2-42a0-b3cd-f1b5178ab2da
app_model_config_id | 5c1c9c78-2cd2-459d-9f77-9be329910fe0
model_provider | tongyi
override_model_configs |
model_id | qwen-vl-max-0809
mode | chat
name | Asking about the definition of k8s
summary |
inputs | {}
introduction |
system_instruction |
system_instruction_tokens | 0
status | normal
from_source | console
from_end_user_id |
from_account_id | 49de836a-9c2d-4f20-82bc-d00efd14893c
read_at |
read_account_id |
created_at | 2025-03-23 05:40:22
updated_at | 2025-03-23 12:10:44.410997
is_deleted | f
invoke_from | explore
dialogue_count | 0
因此可以依据updated_at字段来过滤最新活跃的聊天,就是一条SQL的事情,而keda具备Postgresql Scaler模块来对接Postgresql,通过SQL查询数据,将获取的数据转变成external metrics供HPA模块使用。

2 部署dify
此处省略,可以参考我的文章:
https://blog.csdn.net/nangonghen/article/details/145917819
3 部署keda
此处省略,可以参考我的文章:
https://blog.csdn.net/nangonghen/article/details/145601276
4 创建keda相关kubernetes资源
将ScaledObject和TriggerAuthentication资源提交到k8s集群可,以下示例仅供参考:
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:name: hpa-dify-apinamespace: dify
spec:scaleTargetRef: # 扩容目标对象name: dify-apikind: StatefulSetapiVersion: apps/v1minReplicaCount: 1 # 最小副本数,最小可以是0maxReplicaCount: 6 # 最大副本数pollingInterval: 10 # 轮询时间,单位是秒triggers: # 伸缩的触发规则- type: postgresqlauthenticationRef:name: keda-trigger-auth # pg密码存储在此对象,因此metadata中不必写密码参数passwordmetadata:userName: postgreshost: dify-pg-ha.difyport: "5432"dbName: difysslmode: disablequery: "select count(1) from conversations where updated_at > (NOW() - INTERVAL '1 minutes');"targetQueryValue: "3"
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:name: keda-trigger-authnamespace: dify
spec:secretTargetRef:- parameter: password # 目标参数名称(根据Scaler类型而定。对于Postgresql Scaler,密码parameter是password)name: pg-secret # Secret 名称key: PG_PASSWORD # Secret 中的键名
5 测试
在dify控制台新增创建多个活跃聊天窗口:

从k8s event事件看出,keda operator会将dify-api服务的副本从1提升至2:

6 小结
本文介绍通过keda的pg scaler模块从数据库获取活跃的聊天窗口的记录数,基于此来伸缩dify api服务,如此一来在chat机器人聊天频繁的情况下,dify api的副本数量不会成为瓶颈。
相关文章:
keda基于postgresql伸缩dify-api服务
1 概述 dify-api使用postgresql来存储数据,在dify控制台每新建一个聊天机器的聊天框,就会在conversations表里新插入一条记录,并且不断地更新字段updated_at,示例如下: dify# select * from conversations limit 1; …...
趣味极简品牌海报艺术贴纸设计圆润边缘无衬线粗体装饰字体 Chunko Bold - Sans Serif Font
Chunko Bold 是一种功能强大的显示字体,体现了大胆极简主义的原则 – 当代设计的主流趋势。这种自信的字体将粗犷的几何形状与现代的趣味性相结合,具有圆润的边缘和强烈的存在感,与当今的极简主义设计方法完美契合。无论是用于鲜明的构图还是…...
VoLTE(Voice over Long-Term Evolution)
VoLTE,即Voice over Long-Term Evolution,是一种基于4G LTE网络的高质量语音通话技术。与传统的2G和3G网络中的语音通话不同,VoLTE将语音信号转换为数据包,通过LTE网络进行传输,从而实现了更快的连接速度和更高的通话质…...
指针,数组 易混题解析(一)
目录 一.相关知识点 1.数组名是什么? 两个例外: 2.strlen 3.sizeof 4. * ( ) 与 [ ] 的互换 二.一维数组 三.字符数组 1. 字符 (1)sizeof (2)strlen 2.字符串 (1)si…...
Java 基础篇:数组
前言 数组(Array)是 Java 中最基本的数据结构之一,它用于存储相同类型的元素,并且在内存中是连续存储的。数组具有高效的索引访问特点,但长度固定,不能动态调整。 本文将介绍数组的基本概念、声明和初始化方…...
从汽车 BCM 方案看国产 MCU 芯片的突围与挑战
摘要 :汽车车身控制模块(BCM)作为汽车电子系统的核心控制单元,其性能高度依赖于微控制单元(MCU)芯片。随着汽车智能化与电动化的发展,国产 MCU 芯片在 BCM 领域的应用逐渐扩大。本文结合行业数据…...
深入理解 Spring 框架中的 IOC 容器
一、Spring 框架概述 Spring 框架是一个轻量级的 Java 开发框架,由 Rod Johnson 在 2003 年创建。它的诞生旨在简化企业级应用开发的复杂性。Spring 框架提供了诸如 IoC(控制反转)和 AOP(面向切面编程)等核心功能&…...
深入理解 Java 中 instanceof 操作符
目录 1. instanceof 的基本用法 1.1 语法 1.2 示例 2. instanceof 的用途 2.1 类型检查 2.2 类型转换 2.3 多态编程 3. instanceof 的注意事项 3.1 null 检查 3.2 接口检查 3.3 继承关系 3.4 性能问题 4. instanceof 代码示例 4.1 多态处理 4.2 接口检查 4.3 n…...
2025前端面试题记录
vue项目目录的执行顺序是怎么样的? 1、package.json 在执行npm run dev时,会在当前目录寻找package.json文件,此文件包含了项目的名称版本、项目依赖等相关信息。 2、webpack.config.js(会被vue-cli脚手架隐藏) 3、vue.config.js 对…...
复变函数摘记2
复变函数摘记2 3. 级数3.1 复数项级数3.2 复变幂级数3.3 泰勒级数3.4 洛朗级数 3. 级数 \quad 复数项级数的一般项 α n a n i b n \alpha_na_n\text{i}b_n αnanibn 为复数,与高等数学中无穷级数的分析方式类似,也是通过和函数来研究级数的收敛…...
光纤的频率和带宽
光纤通信中的频率和带宽涉及光波的物理特性以及通信系统的设计,以下是详细解释: 1. 光纤的工作频率 光纤通信利用光波作为载波,工作频率主要在近红外波段,具体频段和对应的波长如下: C波段(Conve…...
高频面试题(含笔试高频算法整理)基本总结回顾67
干货分享,感谢您的阅读! (暂存篇---后续会删除,完整版和持续更新见高频面试题基本总结回顾(含笔试高频算法整理)) 备注:引用请标注出处,同时存在的问题请在相关博客留言…...
Kafka--常见问题
1.为什么要使用 Kafka,起到什么作用 Kafka是一个高吞吐量、分布式、基于发布订阅的消息系统,它主要用于处理实时数据流 Kafka 设计上支持高吞吐量的消息传输,每秒可以处理数百万条消息。它能够在处理大量并发请求时,保持低延迟和…...
优选算法的睿智之林:前缀和专题(一)
专栏:算法的魔法世界 个人主页:手握风云 目录 一、前缀和 二、例题讲解 2.1. 一维前缀和 2.2. 二维前缀和 2.3. 寻找数组的中心下标 2.4. 除自身以外数组的乘积 一、前缀和 前缀和算法是一种用于处理数组或序列数据的算法,其核心思想是…...
嵌入式八股文学习——STL相关内容学习
文章目录 map和set的区别与实现1. map和set的区别2. 为什么set的元素和map的key不可修改? map和set的实现1. map的实现原理map的操作:map的特点: 2. set的实现原理set的操作:set的特点: map和set的底层原理(…...
【清华大学】AIGC发展研究(3.0版)
目录 AIGC发展研究报告核心内容一、团队简介二、AI哲学三、国内外大模型四、生成式内容(一)文本生成(二)图像生成(三)音乐生成(四)视频生成 五、各行业应用六、未来展望 AIGC发展研究…...
JavaSE1.0(基础语法之运算符)
算术运算符 基础运算之加 减 乘 除 取余( - * / %) 运算符之相加( ) public static void main(String[] args) {System.out.println("Hello world!");int a 10;int b 20;int c a b;System.out.println(c);//…...
二十五、实战开发 uni-app x 项目(仿京东)- 前后端轮播图
定义了一个名为 Swiper 的Java类,用于表示一个轮播图实体。它使用了 Jakarta Persistence API (JPA) 来映射数据库表,并使用了 Lombok 库来简化代码。以下是对代码的详细讲解: 1. 包声明 package com.jd.jdmall.model; 这行代码声明了该类所在的包路径为 com.jd.jdmall.mode…...
ubuntu设置开机自动运行应用
系统版本:Ubuntu 24.04.1 LTS桌面版 按招网上的资料显示,当前版本主要的实现方式有以下两种, 方式1:通过图形界面的【启动应用程序】设置开机自启动;方式2:配置为服务实现开机自启动。 但是在我的电脑上方…...
蓝桥与力扣刷题(蓝桥 数的分解)
题目:把 2019分解成 3个各不相同的正整数之和,并且要求每个正整数都不包含数字 2 和 4,一共有多少种不同的分解方法? 注意交换 3 个整数的顺序被视为同一种方法,例如 1000100118和 1001100018 被视为同一种。 解题思…...
用ACM模式模板刷hot100
面试手撕给的模板基础上写 给的模板一般是下面这样 把while内容删除(一般刷hot100题目输入不需要同时输入几组) 第一个方法里写处理输入输出 自己再写一个方法,就是力扣里的核心代码(加上static) 第一个处理输入输…...
Java IO 流:从字节到字符再到Java 装饰者模式(Decorator Pattern),解析与应用掌握数据流动的艺术
在 Java 编程中,IO(输入输出)流是处理数据输入输出的核心工具。无论是读取文件、网络通信,还是处理用户输入,IO 流都扮演着重要角色。本文将深入探讨 Java IO 流的核心概念、分类、经典代码实例及其应用场景࿰…...
爬虫案例-爬取某站视频
文章目录 1、下载FFmpeg2、爬取代码3、效果图 1、下载FFmpeg FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 点击下载: ffmpeg 安装并配置 FFmpeg 步骤: 1.下载 FFmpeg: 2.访问 FFmpeg 官网。 3.选择 Wi…...
nacos-未经授权创建用户漏洞
1、修改配置文件 vim application.properties# 修改配置项 nacos.core.auth.enabledtrue nacos.core.auth.enable.userAgentAuthWhitefalse2、重启nacos systemctl restart nacos3、验证 打开nacos部署服务器输入命令 curl -XPOST -d “usernametest123&passwordtest!123…...
C++:IO库
一、C IO库的架构 C标准库中的IO系统基于流(Stream)的概念,分为三层结构: 流对象(如cin, cout, fstream)流缓冲区(streambuf,负责底层数据处理)数据源/目的…...
企业级前端架构设计与实战
一、架构设计核心原则 1.1 模块化分层架构 典型目录结构: src/├── assets/ # 静态资源├── components/ # 通用组件├── pages/ # 页面模块├── services/ # API服务层├── store/ # 全局状态管理├── uti…...
从入门到精通【MySQL】 CRUD
文章目录 📕1. Create 新增✏️1.1 单行数据全列插入✏️1.2 单行数据指定列插入✏️1.3 多行数据指定列插入 📕2. Retrieve 检索✏️2.1 全列查询✏️2.2 指定列查询✏️2.3 查询字段为表达式✏️2.4 为查询结果指定别名✏️2.5 结果去重查询 …...
08_双向循环神经网络
双向网络 概念 双向循环神经网络(Bidirectional Recurrent Neural Network, BiRNN)通过同时捕捉序列的正向和反向依赖关系,增强模型对上下文的理解能力。与传统的单向网络不同,BIRNN 能够同时从过去和未来的上下文信息中学习,从而提升模型的…...
JSON数据修改的实现
JSON数据的修改 示例代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; //C#命名空间(以System开头) using System.IO; using LitJson; public class JsonChange : MonoBehaviour {// Start is called befor…...
2025年Postman的五大替代工具
虽然Postman是一个广泛使用的API测试工具,但许多用户在使用过程中会遇到各种限制和不便。因此,可能需要探索替代解决方案。本文介绍了10款强大的替代工具,它们能够有效替代Postman,成为你API测试工具箱的一部分。 什么是Postman&…...
