不知道看到这篇文章的小伙伴,有多少听说过或者用过风语。
春节之后,这个项目本来已经结束了生命周期,应该停止维护了,但现在我又回来升级了一下。
主要是前段时间维护其它项目的时候,发现这个项目的内存占用有点大,打开项目文件夹看一眼,使用的技术也(相对)比较老了,当时开发时间紧张,里面也有很多冗余的代码。
这次更新就不列具体变动了,大家能感受到的简单说几点。
最明显的是我们更换了图表库,和小工具集一样,从 Plotly 换成了 PyEcharts。
顺便干掉了 Plotly 依赖,第三方库体积又小了点。
具体原因和选型过程,大家可以去看小工具集的那篇更新日志。
在风语访问量最大的时候,我们几乎每天都能接到关于图表问题的反馈,大部分是由于图表相关资源文件不能正常加载导致的。
之后图表展示就变成了静态的,生成 HTML 之后存成图片,传递给前端,但是这样只能保证加载成功率,速度还是一样慢。
这次换成 PyEcharts 后彻底解决了这个问题。
先上效果图:
[图片上传失败...(image-6eddf2-1654614975069)]
过程中还是有一些坑的,主要是代码比较乱,不太好维护,需要打断点看数据格式,然后针对性做处理。
另外,PyEcharts 里折线图的 xy 轴都需要是文本类型,这个坑卡了我二十分钟。
这玩意对开发者非常不友好,封装还行,但数据直接转换格式扔到 Echarts 里面,如果有错误,图表会只有坐标轴或者干脆一片空白,根本没有任何错误提示。
另外有人好奇图表的平滑是怎么做的,其实是 Echarts 的自带功能,改个参数就可以了,感兴趣的可以看看风语的源码。
之前版本的风语在数据获取逻辑上有点问题,经常会卡死,所以我写了个状态监控模块,把告警信息用飞书推送到手机上,后来数据获取模块的稳定性有了大幅提升,但这个模块一直没有删掉。
考虑到这玩意写的比数据获取模块本身还烂,新版本直接删除了这个模块。
配置文件小修小补了一下,主要是删掉状态监控相关的配置,以及单例模式相关的一些修改。
然后是近期的主要方向,容器化。
经过一番修改,风语现在也支持 Docker Compose 一键部署了。
其实就是在 .dockerignore
文件里排除掉配置文件和封禁列表,然后把这两个文件映射到容器里面。
之后在配置文件里加一个文件存储路径的配置项,然后更改所有涉及到文件操作的位置。
技术细节:配置文件和封禁列表是目录映射,用户数据库、日志数据库和用户数据文件夹用的是 Volume
。
我对容器化技术不太了解,不知道这样是不是最佳实践,如果有小伙伴对这方面比较了解,欢迎提出建议。
其实我也想干掉 WordCloud 库,像小工具集那样用 PyEcharts 画交互式词云图的,但可惜设计的时候,词云图是在数据获取过程中生成,然后以图片形式保存的,并没有保留词频数据,所以没办法改了。
这属于架构设计问题,数据获取与展示分离,当时没想清楚。
另外,这次更新还修复了一个可能导致页面无法正常跳转的问题。
更新日志的部分就到这里。
大家知道,风语是一个年度总结的项目,有固定的生命周期。
其它互联网平台一般会在除夕后一周到一个月下线年度总结入口。
风语直到现在依然没有下线,服务也能正常使用。
但考虑到这个服务已经完成了它的使命,我们还是决定停止维护。
在这之前,我们对其进行了一系列升级,包括适配了最新的 JRT 版本,支持容器部署,完善 README 文档。
之后,它将不会继续发布功能性更新,不会升级依赖库版本,不再修复主流程与安全以外的问题。
但风语不会下线,它对服务器的资源使用优先级,与其它正常维护的项目无异。
风语在 GitHub 开源:https://github.com/FHU-yezi/WindWith2021/
你也可以下载代码,在自己的设备上运行服务端。
很简单,如果你有 Docker,只需要三步:
- 从 GitHub 上下载源代码
- 解压并进入项目目录
docker compose up -d
不需要配置 Python 环境,不需要关心依赖,不需要买服务器,在自己的设备上就可以运行完全一样的服务。
如果你有技术,风语的开源协议是 MIT,允许你在署名的情况下随意修改,包括将其用于商业用途。
我们把风语变成容器化的服务,不只是为了简化部署和维护流程,更是为了让私有部署的难度尽可能降低。
我们不喜欢 GitHub 上的某些开源服务端程序,需要繁琐的配置才能启动,即使有技术能力,也需要学习大量的知识,只为把一个服务跑起来。
我们坚决维护每个人使用我们服务的权利,无论其是否是用户,无论该服务是否付费,无论他能否对项目发展做出贡献。
非常感谢大家对风语的支持,后会有期。
风语开发组
2022 年 6 月 7 日