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

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的副本数量不会成为瓶颈。

相关文章:

  • Vite 创建 Vue3 项目指定 Package name 问题:Invalid package. json name
  • list的模拟实现和学习
  • 基于Matlab的大气湍流光束传输特性的研究
  • 基于springboot的古典舞在线交流平台(046)
  • 使用 Node.js 从零搭建 Kafka 生产消费系统
  • 数组作为哈希表的妙用:寻找缺失的第一个正数
  • 【NR NTN 3GPP协议】非地面网络(NR NTN)3GPP协议简介
  • Java-01-源码篇-并发编程-多线程常见接口讲解
  • 04_Linux驱动_06_GPIO子系统总结
  • 护网期间监测工作全解析:内容与应对策略
  • 强化学习的常用策略浅析
  • 【嵌入式学习2】函数
  • 【MySQL】字符集与排序规则
  • unsloth微调QwQ32B(4bit)
  • PyTorch 深度学习实战(22):多智能体强化学习(MARL)
  • QT5.14.2 gradle 构建安卓失败的处理方法
  • [RoarCTF 2019]Easy Calc-3.23BUUCTF练习day5(2)
  • 大语言模型-2.2/3-主流模型架构与新型架构
  • CH32V208蓝牙内部带运放32位RISC-V工业级微控制器CH32V208CBU6、CH32V208GBU6开发板原理图和PCB
  • 【Linux文件IO】Linux中标准IO的API的描述和基本用法
  • 泽连斯基启程前往土耳其
  • 印称印巴军事行动总指挥同意将局势降级
  • 商务部召开外贸企业圆桌会:全力为外贸企业纾困解难,提供更多支持
  • 美国三大指数全线高开:纳指涨逾4%,大型科技股、中概股大涨
  • 珠峰窗口期5月开启 普通人登一次有多烧钱?
  • 中国潜水救捞行业协会发布《呵护潜水员职业健康安全宣言》