记一次基于 2009 年老古董笔记本的极限部署尝试
1. 项目背景
我在以往学习过Python和Java的后端服务,虽然这两种语言在后端开发上十分的便利与高效,拥有大量的开源库可以实现日常应用开发,但是由于这两种语言本身的原因(如 Python 的 GIL 全局解释器锁,以及 JVM 庞大的内存开销),运行起来极其笨重,十分消耗计算机资源。对于大型的项目追求于性能稳定的要求我们倒也无可厚非,但是我们还有一部分是小规模的模块添加以及小规模的数据计算,或是在一些小型机等(或是一些古老的旧设备,如我此次项目实验的设备)的运行,因此使得我对高效高性能的Web服务十分感兴趣。
与此同时我也十分感兴趣于高性能计算。
2. 设备参数
- 设备型号:Lenovo IdeaPad V450(2009年上市)
- 操作系统:Ubuntu 18.04.6 LTS (内核 4.15.0-213-generic)
- CPU:Intel Core 2 Duo T6600 (双核双线程,2.20GHz)
- 内存:3GiB DDR2 667MHz(1GiB + 2GiB 组合)
- 硬盘:WDC WD3200BEVT (西部数据 320GB 5400转 2.5寸 SATA 机械硬盘)
- 显卡:NVIDIA GeForce G 105M (使用nouveau开源驱动)
- 有线网卡:Broadcom NetLink BCM5906M (100Mbps)
- 无线网卡:Intel PRO/Wireless 5100 AGN
3. 技术选型
- 前端 :直接使用的Go(html/template)的页面渲染。(并未使用Vue/React前端)
- 原生JavaScript 交互逻辑 (无框架、无打包工具)
- 原生CSS 样式实现(JS与CSS都是Go内部路径注册,在template的html中引用实现)
- 后端 :基于Go语言的Gin Web框架,用来实现路由的管理
- 以 GORM作为中间件实现逻辑计算与数据库之间的调度
- 数据库:此次项目以SQLite作为数据库,拓展升级也可更换MySql以及PgSql。
4. 目录结构
text
gin/
├── main.go
├── controllers/ # 路由处理
├── models/ # 数据模型
├── views/ # HTML 模板
├── sqlconfig/ # 数据库配置
├── static/ # CSS / JS
└── app.db # SQLite 数据库
5. 专项计算
- 语言:Python 3.10
- HTTP框架:FastAPI
- ASGI 服务器:uvicorn
- 五运六气计算:WYLQ 库
- 历法底层(WYLQ 依赖) :sxtwl
- 天文计算(WYLQ 依赖) :ephem
6. 部署
- 服务器操作系统:Ubuntu 18.04.6 LTS (内核 4.15.0-213-generic)
- 网络实现:Cloudflare Tunnel(内网穿透至公网访问)
7. 开发环境
- 操作系统:Windows
- CPU:12th Gen Intel(R) Core(TM) i9-12900H(2.50 GHz)
- 内存:16GB DDR5 4800MHz (8GB+8GB)
8. 最终展示结果
edt-clearing-arrive-convicted.trycloudflare.com
注:当前使用 Cloudflare 临时隧道,重启服务后链接会变动,后续计划绑自定义域名。