当前位置: 首页 > article >正文

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-api
  namespace: dify
spec:
  scaleTargetRef:                           # 扩容目标对象
    name: dify-api
    kind: StatefulSet
    apiVersion: apps/v1
  minReplicaCount: 1                        # 最小副本数,最小可以是0
  maxReplicaCount: 6                        # 最大副本数
  pollingInterval: 10                    # 轮询时间,单位是秒
  triggers:                                 # 伸缩的触发规则
  - type: postgresql
    authenticationRef:
      name: keda-trigger-auth               # pg密码存储在此对象,因此metadata中不必写密码参数password
    metadata:
      userName: postgres
      host: dify-pg-ha.dify
      port: "5432"
      dbName: dify
      sslmode: disable
      query: "select count(1) from conversations where updated_at > (NOW() - INTERVAL '1 minutes');"
      targetQueryValue: "3"
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
  name: keda-trigger-auth
  namespace: 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的副本数量不会成为瓶颈。


http://www.kler.cn/a/598138.html

相关文章:

  • 十亿级流量削峰实战:LinkedBlockingQueue缓冲池的工程化实现
  • 查看自己的公有ip
  • .NET 9 彻底改变了 API 文档:从 Swashbuckle(Swagger) 到 Scalar
  • 力扣55.跳跃游戏
  • FPT+SMB共享文件夹快速访问
  • 使用__attribute__((at(addr))) 固定变量到指定 Flash 地址
  • Scikit-learn 学习思维导图
  • 深度解析 Android Matrix 变换(二):组合变换 pre、post
  • 资金管理策略思路
  • 数据结构之双链表
  • 解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革
  • 高项第十四章——项目沟通管理
  • SAP SD学习笔记35 - ATP(可用性检查)的各种Pattern
  • 基于springboot的“衣依”服装销售平台(043)
  • 第43章:企业级密钥管理:Vault与Kubernetes集成
  • 运行时智控:PanLang 开发者指南(一)运行时系统核心模块实现——PanLang 原型全栈设计方案与实验性探索5
  • 使用OpenCV进行图像处理:边界填充、阈值处理
  • 第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略
  • Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础04
  • 【第13届蓝桥杯】软件赛CB组省赛