使用 AWS ECS 和 EFS 扩展有状态 Streamlit 聊天机器人

wufei123 2025-01-26 阅读:10 评论:0
您开发了一个出色的streamlit应用程序,但将其部署到公司内部却遇到了服务器过载和数据丢失的问题。本文将指导您如何在aws上部署一个可扩展且具有状态保持功能的streamlit应用,避免类似问题。 引言 Streamlit是Python...

您开发了一个出色的streamlit应用程序,但将其部署到公司内部却遇到了服务器过载和数据丢失的问题。本文将指导您如何在aws上部署一个可扩展且具有状态保持功能的streamlit应用,避免类似问题。

引言

Streamlit是Python开发者构建交互式Web应用的优秀框架。随着生成式AI的兴起,Streamlit的流行度也显著提升:

使用 AWS ECS 和 EFS 扩展有状态 Streamlit 聊天机器人

Streamlit简化了前端开发,让您专注于应用的核心功能。然而,云端部署则需要解决状态保持和可扩展性问题。Streamlit默认情况下使用内存状态,页面刷新或服务器重启会导致状态丢失。本文将提供在AWS上部署一个可扩展且具有状态保持功能的Streamlit聊天机器人的详细指南。

Streamlit的状态性和可扩展性

将Streamlit应用从本地环境迁移到云端,主要挑战在于状态保持和可扩展性。Streamlit的内存中状态机制在多实例扩展或服务器重启时会丢失数据。本文将提供一种解决方案,解决在将本地POC GenAI应用共享给同事时遇到的问题。

架构

本文介绍的架构利用以下AWS服务:

  • 应用程序负载均衡器 (ALB): 均衡分配传入流量到多个目标实例。
  • Fargate上的弹性容器服务 (ECS): 简化Docker容器管理,实现轻松扩展,无需管理服务器。使用arm64和0.25vcpu/0.5gb ram ECS任务以优化成本效益。
  • 弹性文件系统 (EFS): 提供可扩展的文件系统,可挂载到多个ECS节点,确保跨可用区的数据持久性和冗余。
  • CloudFront (可选): 作为CDN,提升性能并减少延迟,并提供HTTPS支持。

使用 AWS ECS 和 EFS 扩展有状态 Streamlit 聊天机器人

为什么不使用Lambda?

Lambda最初被考虑用于Python或Docker执行环境。然而,Streamlit依赖websocket资源/_stcore/stream,而Amazon API Gateway虽然支持websocket,但需要为连接/数据/断开事件定义多个Lambda处理程序,这与传统HTTP端点使用Lambda Web Adaptor的方式不同。更重要的是,Streamlit客户端将数据作为二进制帧发送到websocket API,而Amazon API Gateway仅支持文本帧,因此无法使用Lambda作为Streamlit后端。

为什么选择EFS而不是其他?

RDS、DynamoDB、ElasticCache和S3等服务也用于状态管理,但各有其复杂性和成本:

选项 优点 缺点 RDS 可靠,健壮 设置复杂,成本高,项目限制 DynamoDB 可扩展,快速 设置复杂,成本高,项目限制,需要手动二进制序列化 ElasticCache 高效缓存 设置复杂,重启时状态丢失,需要本地隧道 S3 成本效益高 网络延迟(除非付费使用S3 VPC网关端点) EFS 易于设置,可扩展,持久,成本效益高 大规模扩展时成本/延迟会成为问题

EFS提供更简单且更具成本效益的解决方案。它易于设置且相对便宜,适合持久化状态存储。

负载均衡器并非免费的

ALB确实会产生固定成本,但其提供的可扩展性和可靠性对于生产环境至关重要,其优势超过了成本。

为什么选择这种方法?

部署Streamlit应用到云端需要考虑可扩展性和状态性。Streamlit的内存状态管理不适用于生产环境的多用户场景。仅仅扩展虚拟机是不够的,需要一个能够在刷新和服务器重启时保持用户会话的解决方案。

本方案使用streamlit-local-storage包将会话密钥存储在本地存储中,每个会话的数据保存到已安装的EFS存储中的一个文件夹中,文件夹路径由会话密钥构建。本地存储不适合存储大量二进制数据。这确保会话数据在多个ECS节点之间持久且同步。

无需使用复杂且昂贵的数据库解决方案,EFS提供了一种简单高效的替代方案。其易于设置、可扩展且成本效益高。最重要的是,代码在云端和本地环境中的运行方式相同,无需费力设置本地数据库。

可扩展有状态Streamlit应用程序的项目模板

这是一个基于Amazon Bedrock的LLM聊天机器人,提供基本的模型切换和对话重置。左侧面板显示服务的ECS任务主机名和会话ID。

使用 AWS ECS 和 EFS 扩展有状态 Streamlit 聊天机器人

Streamlit Python脚本伪代码

以下是管理会话数据的Streamlit Python脚本简化伪代码:

import uuid
import pickle
import streamlit as st
from streamlit_local_storage import LocalStorage
... other imports ...

session_data = {}
session_id = local_storage.getItem('session_id') or str(uuid.uuid4())
if session_id:
    with open(f'/session_data/{session_id}.json', 'r') as f:
        for key, value in pickle.load(f):
            session_data[key] = value

session_data['some-key'] = st.some_input(label='Enter some input here')
... main chatbot logic here ...

with open(f'/session_data/{session_id}.json', 'w') as f:
    pickle.dump(session_data, f)

此脚本使用本地单例字典session_data存储会话数据,session_id从本地存储生成或检索。会话数据在脚本初始化时加载,并在脚本结束时保存。由于EFS已安装到所有ECS节点,会话数据在所有ECS任务实例之间共享。Streamlit的原生session_state未使用,因为它存储在内存中,不跨多个ECS节点共享。

在您的组织中部署

在AWS上部署此可扩展且具有状态保持功能的Streamlit聊天机器人,请按照以下步骤操作:

  1. 克隆仓库: 克隆仓库https://github.com/gabrielkoo/scalable-stateful-streamlit-chatbot-on-aws/tree/main。
  2. 部署CloudFormation堆栈: 使用template.yml文件部署AWS基础设施。建议使用AWS管理控制台。
  3. 构建并部署Docker镜像: 运行./deployment.sh:构建Docker镜像,推送到Amazon ECR,并使用新镜像扩展ECS服务。
  4. 访问聊天机器人: 通过ALB提供的URL或CloudFront URL访问聊天机器人。
  5. 启用自动扩展: 为ECS服务配置自动扩展,以有效处理不同负载。(此步骤未在仓库中涵盖)

通过这些步骤,您可以在AWS上部署一个强大、可扩展且具有状态保持功能的Streamlit应用,即使在高负载下也能确保无缝的用户体验。 这比简单的虚拟机扩展更经济高效。 您可以专注于本地开发,然后轻松扩展到AWS!

以上就是使用 AWS ECS 和 EFS 扩展有状态 Streamlit 聊天机器人的详细内容,更多请关注知识资源分享宝库其它相关文章!

版权声明

本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com

分享:

扫一扫在手机阅读、分享本文

发表评论
热门文章
  • 闪耀暖暖靡城永恒怎么样-闪耀暖暖靡城永恒套装介绍(闪耀.暖暖.套装.介绍.....)

    闪耀暖暖靡城永恒怎么样-闪耀暖暖靡城永恒套装介绍(闪耀.暖暖.套装.介绍.....)
    闪耀暖暖钻石竞技场第十七赛季“华梦泡影”即将开启!全新闪耀性感套装【靡城永恒】震撼来袭!想知道如何获得这套精美套装吗?快来看看吧! 【靡城永恒】套装设计理念抢先看: 设计灵感源于夜色中的孤星,象征着淡然、漠视一切的灰色瞳眸。设计师希望通过这套服装,展现出在虚幻与真实交织的夜幕下,一种独特的魅力。 服装细节考究,从面料的光泽、鞋跟声响到裙摆的弧度,都力求完美还原设计初衷。 【靡城永恒】套装设计亮点: 闪耀的绸缎与金丝交织,轻盈的羽毛增添华贵感。 这套服装仿佛是从无尽的黑...
  • BioWare埃德蒙顿工作室面临关闭危机,龙腾世纪制作总监辞职引关注(龙腾.总监.辞职.危机.面临.....)

    BioWare埃德蒙顿工作室面临关闭危机,龙腾世纪制作总监辞职引关注(龙腾.总监.辞职.危机.面临.....)
    知名变性人制作总监corrine busche离职bioware,引发业界震荡!外媒“smash jt”独家报道称,《龙腾世纪:影幢守护者》制作总监corrine busche已离开bioware,此举不仅引发了关于个人职业发展方向的讨论,更因其可能预示着bioware埃德蒙顿工作室即将关闭而备受关注。本文将深入分析busche离职的原因及其对bioware及游戏行业的影响。 Busche的告别信:挑战与感激并存 据“Smash JT”获得的内部邮件显示,Busche离职原...
  • 奇迹暖暖诸星梦眠怎么样-奇迹暖暖诸星梦眠套装介绍(星梦.暖暖.奇迹.套装.介绍.....)

    奇迹暖暖诸星梦眠怎么样-奇迹暖暖诸星梦眠套装介绍(星梦.暖暖.奇迹.套装.介绍.....)
    奇迹暖暖全新活动“失序之圜”即将开启,参与活动即可获得精美套装——诸星梦眠!想知道这套套装的细节吗?一起来看看吧! 奇迹暖暖诸星梦眠套装详解 “失序之圜”活动主打套装——诸星梦眠,高清海报震撼公开!少女在无垠梦境中,接受星辰的邀请,馥郁芬芳,预示着命运之花即将绽放。 诸星梦眠套装包含:全新妆容“隽永之梦”、星光面饰“熠烁星光”、动态特姿连衣裙“诸星梦眠”、动态特姿发型“金色绮想”、精美特效皇冠“繁星加冕”,以及动态摆件“芳馨酣眠”、“沉云余音”、“流星低语”、“葳蕤诗篇”。...
  • 龙族卡塞尔之门昂热角色详解-龙族卡塞尔之门昂热全面介绍(之门.龙族.卡塞尔.详解.角色.....)

    龙族卡塞尔之门昂热角色详解-龙族卡塞尔之门昂热全面介绍(之门.龙族.卡塞尔.详解.角色.....)
    龙族卡塞尔之门:昂热角色深度解析 在策略手游《龙族卡塞尔之门》中,卡塞尔学院校长昂热凭借其传奇背景和强大技能,成为玩家们竞相选择的热门角色。作为初代狮心会的最后一人,他拥有超过130岁的阅历,沉稳成熟的外表下,藏着一颗爽朗豁达的心。游戏中,昂热不仅具备出色的单体输出,更擅长通过控制和辅助技能,为团队创造优势。 技能机制详解 昂热的技能组合灵活多变,包含普通攻击、言灵·时零以及随星级提升解锁的被动技能。虽然普通攻击仅针对单体目标,但言灵·时零却能对全体敌人造成物理伤害,并有几率...
  • 斗魔骑士哪个角色强势-斗魔骑士角色推荐与实力解析(骑士.角色.强势.解析.实力.....)

    斗魔骑士哪个角色强势-斗魔骑士角色推荐与实力解析(骑士.角色.强势.解析.实力.....)
    斗魔骑士角色选择及战斗策略指南 斗魔骑士游戏中,众多角色各具特色,选择适合自己的角色才能在战斗中占据优势。本文将为您详细解读如何选择强力角色,并提供团队协作及角色培养策略。 如何选择强力角色? 斗魔骑士的角色大致分为近战和远程两种类型。近战角色通常拥有高攻击力和防御力,适合冲锋陷阵;远程角色则擅长后方输出,并依靠灵活走位躲避攻击。 选择角色时,需根据个人游戏风格和喜好决定。喜欢正面硬刚的玩家可以选择战士型角色,其高生命值和防御力能承受更多伤害;偏好策略性玩法的玩家则可以选择法...