总结

原先做了个“你在厦大吃了多少米” https://7.xmu.edu.cn (7谐音吃),写了“厦门大学免费米饭统计,我是如何填坑的”、“免费米饭完结篇”等博客。最近看到朋友圈刷屏厦大芙蓉一同一个宿舍出了3个院士,于是想起一个创意,出了个“你在厦大挂了多少科”的证明奖状。

但是跑了2天,访问量很惨淡,比我公众号一篇文章都少。不知道为啥,是美工太难看了?落款“厦门大学信息与网络中心”号召力不够?免责申明太严肃了?字太多了?统计有问题?没有挂科当成挂科了?我应该做几个A/B测试。成绩统计结果来个申诉按钮帮忙判断是否有误判,因为成绩表是个有500万条记录的表,里面各种 -22 到 100、A-F、不及格、不合格、优、作弊、免修、及格、合格、无效、旷考、缓考、缺考、良、空,各种奇奇怪怪的取值,误判是有可能的。应该看看100多个看了自己成绩的人为什么只有2x个分享出来。一个应用做出来以后,发布后才是运营的开始。

这个应用做得确实有点仓促,在奖状图上用CSS、Javascript压姓名和日期图位置大小调了好久,美工是我们的弱项。要做得完美点,底图应当手绘而不是百度随便找了个吧?应当直接使用PIL在图片上写字,生成图片缓存,定期清理,但是后端是3台Apache2,还得搭个nfs和Nginx 4台共享图片文件。如果直接base64图片保存到MongoDB,图片的缓存又得测试,直接输出图片来分享又无法跟踪分享率,无法验证。

临近发布前几分钟才发现只有本科生的数据,没有研究生,不懂这茬都忘了是为什么,本研一体化呢?

本来也是快速玩玩的,访问量两千多看来是失败了,如果有人玩,那还可以有一大波“你在厦大X了多少X”袭来。先写个公众号总结下放一边了。

为什么放在免费米饭网站里

在免费米饭网站上加“你在厦大挂了多少科”,吃了免费的米饭,必须考出好成绩?感觉有点功利?哈哈,其实只是因为技术原因。因为框架都摆在那了,程序写起来简单而已。为了应对可能的大访问量,减少对生产库的影响,而免费米饭系统已经经受住考验了,外挂一个简单而已。更何况不管是否吃了免费的米饭,知乎上说“大学生学习不刻苦涉嫌违法”,《中华人民共和国高等教育法》第五十三条第一款规定,高等学校的学生应当刻苦学习。

目前的架构是这样的:

graph LR;
    N[Nginx] --> |load balancing| A1(Apache2)
    N --> |load balancing| A2(Apache2)
    N --> |load balancing| A3(Apache2)

    subgraph Database, Cache
        M
        R
    end

    A1 --> M[MongoDB]
    A2 --> M
    A3 --> M
    A1 --> R[Redis]
    A2 --> R
    A3 --> R

公众号格式不支持Mermaid格式(程序员画框图都要写代码,进版本控制),放个图吧。

环境部署用Puppet,本地开发用Vagrant + VirtualBox,未来找个时间再折腾下,搞成docker,一台服务器跑Nginx、十个docker、Redis,一台跑MongoDB,简化下,环境部署用Ansible。可以再写篇公众号了。张小龙最近“最新内部演讲:警惕KPI和流程”,说的其实就是敏捷开发和DevOps,程序写好了,部署验证环境才是麻烦的流程,如果这个成本很高,反馈很慢,那程序员都不愿意动。