从零写一个轻量论坛,记录几个设计决策
自己写论坛和用现成程序,各有取舍,记录一下我的思路。
为什么自己写
现成程序功能全,但:
- 想改个样式要翻三层模板
- 数据库表几百列,实际用到的不到一半
- 想要的功能没有,不想要的关不掉
技术选型
- 数据库:MySQL,够用且运维成本最低
- 后端:不引入重型框架,手写路由 + 预处理语句
- 前端:服务端渲染 + 少量原生 JS,不引前端框架
- 缓存:暂时不做,数据量小的时候缓存是负优化
几个决策
1. 时间统一存 UTC
DB 里全存 UTC,展示时再转 +8。避免了时区带来的各种诡异 bug。
2. 热度算法带时间衰减
分数 = log10(票数) - 已过小时数 × log10(30) / 12
也就是大约每 12 小时热度折半,保证首页热门不会被老帖长期占住。
3. Markdown 先转义再解析
而不是「先解析再过滤」。转义在前,XSS 从原理上就不可能发生。
4. 软删除
is_deleted 标记,不做物理删除。删错了还能捞回来。
教训
写了大约 6000 行,最大的体会是:能简单就别复杂。
一开始想上 Redis 做缓存,后来发现 1000 条数据根本没有缓存的必要,反而多了一个故障点。
求个测速脚本,谢谢!
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
数据很有参考价值,已经转给朋友看了。
认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。
补充一下我的经验:这家我用了大概 8 个月,整体还算稳,但有过两次短时间的网络抖动,都是半夜,持续时间不长。如果你要放生产环境,建议还是加个监控,出问题第一时间知道。
大佬,有推荐的便宜机器吗?预算 50 以内。
这价格可以啊,去看看还有没有货。
数据很有参考价值,已经转给朋友看了。
请问续费价和首购价一样吗?
晚高峰确实会掉速,我这边测下来大概掉 30%。
求个测速脚本,谢谢!
这价格可以啊,去看看还有没有货。
认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
数据很有参考价值,已经转给朋友看了。
认真回一下:1)测试时间最好标注清楚,不同时段结果差异很大;2)测速节点要说明是在哪个城市、什么运营商;3)单次测试意义不大,建议连续测一周取平均。做到这三点,测评的说服力会强很多。
补充一点:他们家退款要发工单申请,不是自动退。
补充一点:他们家退款要发工单申请,不是自动退。
从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。
图片挂了,看不到。
写得很详细,比那种一句话测评强太多了。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。
这价格可以啊,去看看还有没有货。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
楼主用的什么系统?Debian 还是 Ubuntu?
硬件看起来还行,就是不知道超售严重不严重。
感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。
补充一点:他们家退款要发工单申请,不是自动退。
这价格可以啊,去看看还有没有货。
看完就下单了,希望能稳定。
数据很有参考价值,已经转给朋友看了。
这个思路不错,我之前是用另一种方式实现的,大概是:先在同城做一份冷备,再同步到异地。缺点是占用双倍空间,优点是恢复快。各有取舍吧。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
这个方案我用了半年,稳定。
这个价格不如上隔壁那家,配置还高一点。
感谢楼主,照着配置了一下,一次性成功。补充一个小细节:如果用的是宝塔面板,防火墙规则要在面板里也加一遍,不然重启后会丢失。这个坑我踩了很久才找到原因。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
大佬,有推荐的便宜机器吗?预算 50 以内。
看完就下单了,希望能稳定。
这个方案我用了半年,稳定。
说个反面案例:我去年买过一家类似的促销款,前三个月挺好,第四个月开始疯狂超售,晚上基本没法用,最后商家直接跑路,年付的钱打了水漂。所以现在我买没听过的商家一律先月付。
从技术角度看,这个方案的瓶颈主要在磁盘 IO 上。如果并发再高一点,建议换成 NVMe;如果内存够,可以把热点数据放 tmpfs,能明显提升响应速度。当然小流量站点没必要折腾到这个程度。
楼主是不是漏了 IPv6 的测试?