Streamlit适配GaussDB验证任务心得

举报
sean0918 发表于 2024/11/13 16:41:21 2024/11/13
【摘要】 Streamlit 是一个开源的 Python 库,专为数据科学家和机器学习开发者设计,旨在快速构建数据应用。通过简单的 Python 脚本,开发者无需掌握前端技术,即可将数据分析和模型结果转化为直观、交互式的 Web 应用。开源兼容性先验证,并且要基于最新版本进行验证。

1. 背景介绍

开源for Huawei(参考:https://developer.huaweicloud.com/programs/opensource/contributing/)  通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣Huawei的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。

2. 任务分析与验证

对任务书的内容阅读,初步理解适配思路如下:

  • 需要去streamlit的官网了解其架构,找出与GaussDB的连接方式及相关代码;
  • 基于streamlit的功能开发Demo应用进行GaussDB的增删改查,验证兼容性;
  • 根据兼容性情况决定是否修改streamlit源码和如何修改;(可选)
  • 如果修改代码重复第二步的验证。(可选)

2.1 分析Streamlit

官网地址: Streamlit • A faster way to build and share data apps

代码仓地址:https://github.com/streamlit/streamlit

Streamlit 是一个用于创建数据应用和机器学习模型界面的开源 Python 库。它简单易用,允许开发者快速构建交互式 Web 应用,而无需深入了解前端开发技术。

关键特点

  • 简单易用:

   只需几行代码即可创建基本的应用。

   不需要编写 HTMLCSS JavaScript

  • 快速迭代:

   支持热重载,修改代码后自动刷新应用。

   适合快速原型设计和实验。

  • 丰富的组件:

   提供多种内置组件,如按钮、滑块、输入框等。

   支持图表和图像的显示,包括 MatplotlibPlotlyAltair 等。

  • 数据处理:

   轻松集成 Pandas NumPy,方便数据处理和分析。

   支持缓存机制,提高应用性能。

  • 部署简单:

   可以轻松地将应用部署到 HerokuAWSGCP 等云平台。

   提供 Streamlit Cloud 服务,一键部署应用。

竞品分析:

  gradio 是功能与streamlit相似,也是科学计算使用比较多的开源软件。

2.2 streamlit 连接GaussDB 

streamlit支持多种数据源,采用通用的python库或数据源的官方驱动对数据源的连接方式进行连接。

对PostgrepSQL的连接是通过psycopg2来实现,数据库配置信息保存在.streamlit/secrets.toml中。

[postgres]

dbname = "streamlitDB"

user = ""

password = ""

host = ""

port = "8000"


2.2.1 采用开源的psycopg2连接GaussDB数据库

pip install psycopg2-binary==2.9.10

2.2.2 采用GaussDB的商业驱动psycopg2连接数据库

从官网下载驱动,注意版本要与开发环境严格一致, HCE与Eluer是两个系统版本。

https://support.huaweicloud.com/qs-gaussdb/gaussdb_01_623.html#section4

参考下面步骤进行安装:

Psycopg包_云数据库 GaussDB_华为云

2.3 准备环境

2.3.1 购买GaussDB服务

  • 服务规格:

  • 购买并且绑定EIP

为了保证数据库服务能够被streamlit访问,主节点需要绑定EIP。

  • 创建Demo连接的数据库streamlitDB
  • 在数据库streamlitDB创建schema为rxl

注意:

如果采用GaussDB的商业驱动(psycopg2)进行数据库连接,则跳过下面的数据库修改。

如果要基于开源的psycopg2进行数据库连接,服务购买后需要参考下面连接进行配置修改,基于已有经验。

https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/issues/15

2.3.2 购买Euler OS的ECS来运行Demo

  • 服务规格:

  • 购买并且绑定EIP

为了保证Demo服务能够被浏览器访问,需要绑定EIP,并且在安全组中开启streamlit的服务端口8501。

2.3.3 购买Windows的ECS用来访问Demo

  • 服务规格:

2.4 开发Demo应用进行

2.4.1 安装streamlit

  • 确定兼容性:

查看 Euler OS的ECS 的python版本为 3.9.9;去streamlit的GitHub仓查看最新版本1.40.1,此版本支持python3.9.9。

  • 配置python的华为镜像源

~/.pip/pip.conf配置如下内容:
[global] 
index-url = https://mirrors.huaweicloud.com/repository/pypi/simple 
trusted-host = mirrors.huaweicloud.com 
timeout = 120

  • 安装streamlit

  pip install streamlit==1.40.1

  • 安装psycopg2

   采用开源驱动参考2.2.1;

   采用GaussDB驱动参考2.2.2;

2.4.2 运行Demo应用

在 Euler OS的ECS 的 参考 https://gitcode.com/SeanRR705/opensource-demo-streamlit-241113/blob/main/streamlitdemo/ReadMe 进行部署。

2.5 验证Demo功能

2.5.1 通过浏览器访问Demo

2.5.2 验证创建删除表格

2.5.3 验证数据的增删改查功能

2.5.4 通过GaussDB的客户端工具查看结果

也许你对结果有怀疑,没有问题,请找个客户端工具Navicat/DBeaver同步查看每步操作后数据库的变化。

2.5.5 下一步计划

结论:

  • 经过前面的验证,发现基于streamlit最新版1.40.1和 psycopg2最新版2.9.10,对GaussDB是兼容的。
  • 暂时不需要对streamlit进行代码修改。

3 验证CCE集群中兼容性

思路:

  • 基于ECS的验证环境,制作Docker镜像
  • 将镜像上传到SWR
  • 购买CCE环境,部署镜像
  • 进行功能验证,验证过程类似 2.5 章

3.1 制作Docker镜像

ECS规格为鲲鹏的HCE系统,需要找到Docker对应的安装方式。

Docker安装步骤如下:

1. 设置yum源安装docker
   https://support.huaweicloud.com/ecs_faq/zh-cn_topic_0118948562.html

2. 安装docker
    https://support.huaweicloud.com/usermanual-swr/swr_01_0006.html#swr_01_0006__li1756716406122

3. 设置docker的镜像源加速器
   https://support.huaweicloud.com/usermanual-swr/swr_01_0045.html

4. 编写Dockerfile

  OpenSourceForHuaweiDemoPython:开源软件Streamlit适配GaussDB的Demo - GitCode

5. 编译运行镜像进行功能验证,注意开放端口否则访问不通

docker build -t streamlitdemo:v1 .
docker run -p 8501:8501 streamlitdemo:v1

  • 制作基于开源psycopg2的镜像参考

OpenSourceForHuaweiDemoPython:开源软件Streamlit适配GaussDB的Demo - GitCode

  • 制作基于GaussDB驱动的镜像参考

OpenSourceForHuaweiDemoPython:开源软件Streamlit适配GaussDB的Demo - GitCode

3.2 购买SWR服务,上传制作好的镜像

参照指导在ECS上直接上传,速度要比网页上传快N倍。

在ECS服务器上执行命令行如下:

docker login -u cn-north-4@4ZRGF -p 4a8db1b swr.cn-north-4.myhuaweicloud.com
docker tag streamlitdemo:v1 swr.cn-north-4.myhuaweicloud.com/sean0918/streamlitdemo:v1
docker push swr.cn-north-4.myhuaweicloud.com/sean0918/streamlitdemo:v1

上传后可以在SWR中看到上传的镜像

3.3 购买CCE进行验证

3.3.1 购买CCE集群

3.3.2 购买节点

  • 制作镜像是鲲鹏HCE的ECS服务器,购买节点必须选择同样规格,保证CPU和系统的一致,否则莫名错误。

  • 同步绑定EIP,这样保证集群里面的服务能够被客户端访问。

  • 安全组开放streamlit服务需要的8501端口。

3.3.3 部署CCE工作负载

选择无状态负载就可以满足要求,镜像选择个人上传的镜像。

部署成功如下,失败了请自行查看日志进行定位分析。

3.3.4 部署CCE服务

创建Nodeport类型的服务,同步配置容器、服务、节点的端口影视,关联已经部署的工作负载。

节点端口可以选择自动分配,减少失败几率。

部署成功如下,失败则自行查看日志分析解决。

通过下图中的公网IP加上节点端口就可以访问Streamlit的服务。

3.4 启动浏览器验证功能

新建删除表格,数据的增删改查验证OK,不再赘述。

4 总结

验证环境:

  • ECS + 鲲鹏 + HCE
  • CCE + 鲲鹏 + 镜像

streamlit连接GaussDB进行新建删除表格,数据增删改查正常。

结论: streamlit适配GaussDB无需修改开源软件代码。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。