基于Golang所开发的大模型API高性能调度平台

admin 2025年3月21日00:18:42评论7 views字数 1170阅读3分54秒阅读模式
伴随着国产AI deepseek的爆火和低廉的token价格让大家已经不再满足在网页端使用,而纷纷追求 API 接入以实现更高效便捷的办公体验。基于这一趋势,我利用 Golang 开发了一款高性能调度平台,接下来给大家展示一下设计理念。

设计思路

  • 可观测性、可运维性、可拓展性

  • 优先级控制(高优队列排序)

  • qps与tpm限制

  • 账号池维护

  • 任务队列维护

    • 任务撤销,回调

    • 更多大模型的API接入

系统层级图

基于Golang所开发的大模型API高性能调度平台

架构图

基于Golang所开发的大模型API高性能调度平台
  • scheduler

    • 创建任务,插入到相应的任务队列

    • 维护任务状态,对外提供查询接口

  • worker

    • 根据 redis 中的队列优先级信息,拉取任务并执行

    • 控制 tpm(维护账号-当前 tpm 信息)

    • 从 account 中获取账号,拼接请求体

  • account

    • 维护逆向账号池

    • 提供 api,更新账号池

  • fe

    • 提供一个前端页面查看任务状态

    • 可以在前端创建任务,编辑任务(调整优先级),撤销任务

    • 简单的查看管理账号池

任务调度逻辑

  • 一个用户可以创建若干个队列,一次提交对应一个队列

  • 提交时,会生成对应的任务id,并更新优先级信息

  • 每个队列可以由多个文件扫描而来,一个队列对应一个 redis 列表

  • 调度器从队列取数据时,根据优先级信息动态判断要取哪个列表

基于Golang所开发的大模型API高性能调度平台

Q&A

  • 队列机制

    • 不维护一个总的队列,而是提交的每一个任务,单独有一个队列,任务id 作为 key

    • 单独存一份不同任务id 的优先级

    • 取数据的时候,根据优先级,动态选择当前从哪一个队列取

    • 撤销任务,只要删除对应的队列并删除优先级数据即可

    • 插队只要更新一下优先级信息即可

  • 为何不用kafka,mq等消息队列?

    • 因为消息队列实现撤销任务、灵活的多级别的优先级队列很麻烦,会导致复杂度变高,可维护性变差。不如用 redis

  • 如何实现 tpm 或者 qps 控制?

    • 每次请求完,账号作为 key,更新当前账号的 tpm、qps,这个信息由 worker 更新到 redis 中

    • 请求前,找请求对应 model且 tpm不超过该账号限制的账号来请求

    • 如果没有满足条件的账号,就 wait 一段时间

  • 如何保障在tpm限制下,当前系统达到最大吞吐?

    • 维护当前账号的可用,一个号的tpm或者rpm打满就换另一个号,直到无号可用,才等待

    • 每一个 worker 可以开多个协程,这个数量可以增加动态调整机制

  • 实时任务实现

    • 控制中心默认空出最高优先级,所有实时任务全部推入到当前优先级

  • 任务结果

    • 共享存储硬盘

    • oss、cos等存储云

    • redis

结言

整体的框架设计思路由一位golang架构师的所提供,不仅完美实现了多大模型 API 的同步接入,还针对 QPS、TPM、优先级等关键指标进行了全面优化,从而确保了整个链路运行得更加顺畅高效。
同时,我也运营了一个知识星球,里面汇聚了更多关于爬虫、后端框架调度等策略的源码分享。欢迎大家踊跃加入讨论,有任何问题都可以随时向我提问。
基于Golang所开发的大模型API高性能调度平台

原文始发于微信公众号(逆向OneByOne):基于Golang所开发的大模型API高性能调度平台

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月21日00:18:42
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   基于Golang所开发的大模型API高性能调度平台https://cn-sec.com/archives/3865272.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息