从零写一个轻量论坛,记录几个设计决策

自己写论坛和用现成程序,各有取舍,记录一下我的思路。

为什么自己写

现成程序功能全,但:

  • 想改个样式要翻三层模板
  • 数据库表几百列,实际用到的不到一半
  • 想要的功能没有,不想要的关不掉

技术选型

  • 数据库:MySQL,够用且运维成本最低
  • 后端:不引入重型框架,手写路由 + 预处理语句
  • 前端:服务端渲染 + 少量原生 JS,不引前端框架
  • 缓存:暂时不做,数据量小的时候缓存是负优化

几个决策

1. 时间统一存 UTC

DB 里全存 UTC,展示时再转 +8。避免了时区带来的各种诡异 bug。

2. 热度算法带时间衰减

分数 = log10(票数) - 已过小时数 × log10(30) / 12

也就是大约每 12 小时热度折半,保证首页热门不会被老帖长期占住。

3. Markdown 先转义再解析

而不是「先解析再过滤」。转义在前,XSS 从原理上就不可能发生。

4. 软删除

is_deleted 标记,不做物理删除。删错了还能捞回来。

教训

写了大约 6000 行,最大的体会是:能简单就别复杂。

一开始想上 Redis 做缓存,后来发现 1000 条数据根本没有缓存的必要,反而多了一个故障点。

RSS

全部回复 46

软路由党 萌新 #18

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

退休码农 萌新 回复 @软路由党

从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。

域名收藏家 萌新 回复 @软路由党

楼主是不是漏了 IPv6 的测试?

admin 小玩具 #17

看完就下单了,希望能稳定。

老张的机房 萌新 回复 @admin

这个方案我用了半年,稳定。

白嫖艺术家 小玩具 #16

这个价格不如上隔壁那家,配置还高一点。

建站小白 萌新 回复 @白嫖艺术家

感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。

运维新兵 小玩具 回复 @白嫖艺术家

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

前端打工人 萌新 回复 @白嫖艺术家

大佬,有推荐的便宜机器吗?预算 50 以内。

AI炼丹师 萌新 #15

从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。

懒人运维 小玩具 回复 @AI炼丹师

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

独服玩家 萌新 回复 @AI炼丹师

这个方案我用了半年,稳定。

测速狂人 小玩具 #14

数据很有参考价值,已经转给朋友看了。

香港机房代购 萌新 回复 @测速狂人

这个思路不错,我之前是用另一种方式实现的,大概是:先在同城做一份冷备,再同步到异地。缺点是占用双倍空间,优点是恢复快。各有取舍吧。

退休码农 萌新 回复 @测速狂人

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

admin 小玩具 #13

看完就下单了,希望能稳定。

香港机房代购 萌新 #12

这价格可以啊,去看看还有没有货。

IPv6传教士 小玩具 #11

补充一点:他们家退款要发工单申请,不是自动退。

测速狂人 小玩具 #10

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

CDN党 萌新 回复 @测速狂人

楼主用的什么系统?Debian 还是 Ubuntu?

摸鱼站长 小玩具 回复 @测速狂人

硬件看起来还行,就是不知道超售严重不严重。

懒人运维 小玩具 回复 @测速狂人

感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。

夜猫子 小玩具 #9

写得很详细,比那种一句话测评强太多了。

白嫖艺术家 小玩具 回复 @夜猫子

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

折腾大王 小玩具 回复 @夜猫子

感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。

备案困难户 萌新 回复 @夜猫子

这价格可以啊,去看看还有没有货。

二手贩子 萌新 #8

图片挂了,看不到。

测速狂人 小玩具 #7

补充一点:他们家退款要发工单申请,不是自动退。

折腾大王 小玩具 回复 @测速狂人

补充一点:他们家退款要发工单申请,不是自动退。

前端打工人 萌新 回复 @测速狂人

从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。

NAS爱好者 萌新 #6

认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。

后端老鸟 萌新 回复 @NAS爱好者

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

懒人运维 小玩具 回复 @NAS爱好者

数据很有参考价值,已经转给朋友看了。

游戏加速党 小玩具 回复 @NAS爱好者

认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。

CN2爱好者 萌新 #5

求个测速脚本,谢谢!

IPv6传教士 小玩具 回复 @CN2爱好者

这价格可以啊,去看看还有没有货。

CN2爱好者 萌新 #4

请问续费价和首购价一样吗?

游戏加速党 小玩具 回复 @CN2爱好者

晚高峰确实会掉速,我这边测下来大概掉 30%。

IPv6传教士 小玩具 #3

补充一下我的经验:这家我用了大概 8 个月,整体还算稳,但有过两次短时间的网络抖动,都是半夜,持续时间不长。如果你要放生产环境,建议还是加个监控,出问题第一时间知道。

CDN党 萌新 回复 @IPv6传教士

大佬,有推荐的便宜机器吗?预算 50 以内。

软路由党 萌新 回复 @IPv6传教士

这价格可以啊,去看看还有没有货。

测速狂人 小玩具 回复 @IPv6传教士

数据很有参考价值,已经转给朋友看了。

小鸡收藏家 萌新 #2

认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。

备案困难户 萌新 #1

求个测速脚本,谢谢!

懒人运维 小玩具 回复 @备案困难户

说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。

独服玩家 萌新 回复 @备案困难户

数据很有参考价值,已经转给朋友看了。