微精弘是工大唯一一个学生自主开发的学生服务小程序,也是精弘网络技术板块最为重要的产品。但它对于工大绝大部分学生来说是十分神秘的,因此我们在我们精弘网络公众号上开辟一个技术杂谈板块,每月发表一篇技术类的推送,让大家可以对微精弘、对精弘的技术板块有更深的了解。

作者介绍 链接到标题

本文作者:派大星

精弘网络第 21 届会长兼技术总监,第 20 届开发部部长,微精弘 2.0 时代首任技术掌门人。

概论 链接到标题

微精弘是一个拥有万级用户与百万级月访问量的微信小程序,这个体量对于本科生开发者来说已是十分庞大了,再加上学校内网特有的不稳定性与主要业务的可分离性与业务的高度独立性,我们的后端十分适合微服务的设计理念。

因为是本科生开发,而且系统上线的这一年内我们更多是投入在新功能的开发与多次服务器的搬迁与部署(这个在之后几个月的生产事故报告中会详细谈谈)上,我们的微服务架构其实存在着大量的不足,所以本文也是抛砖引玉,希望有经验的开发者可以为我们提出建议,提供帮助。

从 2022 年 6 月我接手微精弘的开发工作开始,就一直在推动微精弘的重构,一点一点放弃自 2015 年开始的那一套陈旧的 php 架构,到 2023 年 8 月的最新 2.5.1 版本,微精弘完成了全部的重构,自此微精弘后端成为了一个以 golang 为主体开发语言,辅以少量的 python 与 rust 代码的 2.0 完全体。

前端则是在 2022 年 8 月 27 日 2.1 版本正式上线之后成为了使用跨平台框架 Taro 构建的基于 Vue + TS 的小程序。

各个服务 链接到标题

微精弘后端的架构如下图所示:

img1

主后端 链接到标题

这是唯一一个与前端交互的服务,也是用于分发服务流量的中枢。

它的功能有登录、激活账号、失物招领板块、校园资讯板块、通知、校车查询与推荐。

作为整个微精弘的入口,它是必须部署在公网稳定环境下的,而且也是稳定性要求最高的,这样才能在其他某一服务挂了后允许管理员发布通知告知用户。

此外,主后端也是并发要求最高的部分,它将直面每月百万级的流量,没有钢筋铁骨可无法做到。

funnel 链接到标题

Funnel 寓意为漏斗,指将零碎的杂糅的信息聚集,提供清晰明了的接口。

这是一个适合部署在内网环境下的服务,功能有查询课表、查询成绩、查询空教室、查询考试安排等正方有关服务与查询当前借阅信息、查询借阅记录等图书馆有关服务。

这个服务像是一个被我们训练好了的特殊爬虫,帮我们从内网的数据库中爬取想要的信息然后传给主后端,最终传向前端展示。

正方验证码破解脚本 链接到标题

这个服务顾名思义,是一个用 python 写成的图像处理脚本,用于解决一些正方需要输入验证码的情况。

因为是与正方交互的,因此该服务也是适合在内网环境下部署的。

yxy 链接到标题

yxy 是用 rust 写成的易校园 app 特种爬虫,主要功能有查询校园卡余额、查询校园卡消费记录、查询宿舍电费余额、查询宿舍电费缴费记录、查询宿舍电费消费记录等容大后期相关服务。

这个服务是在 2022 年 10 月的一次生产事故发生后才立项的,本次生产事故给微精弘带来的影响直到半年后的 2.3 版本更新才完全消除,是 2022 学年微精弘经历的最大生产事故之一,我之后会写一篇文章复盘一下。

yxy 这个服务也是技术部探索新颖技术的一大体现,我们选择使用当前十分热门的新兴开发语言 rust 来进行开发。一开始我们的选择是利用 rust 编译成 c 的库,然后使用 golang 的  CGO 特性来调用 c 库,从而完成服务。但这一过程十分繁琐,而且对于开发与测试的要求也变得更高了,因此在进行了几个测试版尝试过后就被放弃了。

现在该服务与主后端的交互是使用 http 协议进行的,这样的切分也可以让我们主后端的开发者只需要学会 golang 的开发就可以维护这一服务的交互了。

用户中心 链接到标题

这个服务是我们微精弘里信息安全要求最高的了,这里存储着加密后的学生个人信息,因此是部署在内网环境中,且与外网交互受到安全组的严格限制的。

这是我们整个微精弘后端最晚上线重构版本的部分,直到 2023 年 8 月的 2.4 版本才上线。这个服务也提供身份验证功能,可以给一些精弘的其他服务提供鉴权。

图床 链接到标题

这是一个较为独立的服务,主要提供图片上传、处理、统一改名、存储、获取的功能,这一套图床在微精弘中使用,同时也有另外一个版本在我的个人博客上使用,十分轻便高效。

写在最后的话 链接到标题

微精弘是工大学生少有的开发实战平台,也是广大工大本科生快速获取学业信息的平台,但终究是一个学生的作品,我们设计的架构、编写的代码并不成熟,再加上学校的正方系统、图书馆系统等服务也不是十分稳定,因此可能在特定时期会用起来不舒服,请相信精弘的技术力,给我们一点时间修复,微精弘一定会是最好的选择。