[Behind CS] CS平台设计随笔 – 综述

转眼再过一个月就要离开西邮。2014年5月到2015年5月,一年时间,受阳哥所托,花了很多精力在一个小具规模的项目上——西邮Linux兴趣小组内部协作交流平台(Xiyou Linux Group Collaboration System),简称CS。因为是第一次从头构思设计实现一个平台级项目,也是第一次带领十数人的团队,受制自己水平有限,走了很多弯路,但也终于有了一点成果,积累了很多经验与感悟。一方面希望能够把它们总结下来自我回顾,另一方面也希望能给后来人留下一些资料,所以在这里开一个系列文章[Behind CS]。

为什么要做CS

小组自2006年成立以来,至今已走过8年,走出了一批批活跃在各地各方向上的优秀的学长学姐们。然而,随着时间推移,小组也暴露出了一些问题,比较明显的就是传承与沟通上的缺失——一方面,往届学长学姐们曾经开发的优秀项目鲜有后人维护,毕业后心系小组却缺少了解小组近况的途径,在校学习期间精心收集整理积累下的学习资源材料也难以向下沉淀;另一方面,在校的小组成员想要参与原有项目,却因文档缺失难以入手,想要联系往届同学咨询,却缺乏有效联系方式而求助无门……

同时,作为一个技术型团体,小组内部的信息化程度却并不高;小组官网也多年无人维护;而随着邮件列表的日益冷清,急需一个能够替代邮件列表进行问题讨论与结论沉淀的平台;刚诞生的小组基金,也急需摆脱人工记账的原始方式,而有一个便捷稳定,方便公示与查询的载体……

为了解决这些问题,一年前,王亚刚老师与10级的刘丹阳学长,启动了这个项目。我们组建了一支前后共12人的开发团队。经过一年的不断摸索尝试,无数次讨论、争执、重构,终于有了现在呈现的这个雏形。

CS的业务结构是什么样的

设计之初,我们就清楚的认识到,目前我们考虑到的需求——基金管理、讲座、项目、活动、……绝不会,无法,也不应该限制系统未来的职能与边界;既然如此,平台就应该具备极灵活的架构与极大的可扩展性。

业务角度,作为项目PM,我给这个平台的定位,是使其逐渐发展为小组日常运营的服务型中心。如下图所示:

CS业务架构

我们把整个系统分为两大部分:底层应用服务框架,和上层应用。为了真正让这个系统成为小组内部联结的纽带,适应未来可能出现的新需求,也让每个人都有可能参与平台的开发,我们将项目、问答、招聘、基金、活动等具体业务需求定义为上层应用(App),以类似WordPress插件的形式与应用服务框架结合;应用服务框架为应用提供了封装好的各类API,以及全站搜索、站内信、用户管理、应用管理等各类基础服务。具体架构将在下一节中详述。

从图中可以看出,整个小组的信息化建设分为对内对外两部分;对外主要包含官方网站与微信平台等公开渠道;对内则是完整的CS生态圈;CS平台为其上的应用提供丰富的接口与基础服务支持,而各个应用则成为了官方网站与微信平台等对外渠道的数据与服务源,提供类似“近期讲座”、“纳新报名”等信息与功能的后台支撑。

简单来说,理想情况下,这个平台将成为小组生活、学习、活动与对外交流的中心,成为小组“Free Open Share”精神的体现,以丰富可用的功能与大量宝贵的优质内容吸引大家常常使用。“每天来到小组第一件事,就是打开CS”。(野心不可谓不大……)

CS的技术架构是什么样的

如前所述,CS将平台服务多层封装,平台与应用之间高度解耦来实现高度可扩展性。技术架构如下图所示:

CS技术架构

如图所示,平台技术架构分为四层。

最底层(Server层)基于经典的LNMP(Linux+Nginx+MySQL+PHP)架构。

平台的下层(Model层),首先将基本数据库操作封装为CSDB类,提供数据库服务(DB Service);在DB层之上,平台实现并封装了四大类服务与接口——账户服务(Account Service),提供用户账户控制(增删改查)、用户信息获取(基本资料,在线状态)、用户权限分级管理(管理员权限移交)等服务;消息服务(Message Service),提供站内信一对一、一对多收发,管理,以及已读状态等服务;动态服务(Activity Service),提供用户自发布状态,以及应用产生富文本动态服务;搜索服务(Search Service),提供基于动态的跨应用全站搜索服务。

平台的中层(Control层),利用下层提供的丰富的服务接口,开发了平台基础模块的后台(登陆、找回密码、首页、个人资料页、站内信模块、搜索模块、用户管理模块与应用管理模块等)。同时对接应用的后台。各应用后台通过本层实现业务逻辑并对前端模板进行渲染,同时封装对外提供接口。

平台的上层(View层),基于前端渲染框架Smarty,平台约束了两类基本模板——Frame.tpl与Base.tpl。平台页面与应用页面,利用这两类基本模版,开发并渲染前端展示页面。同时,平台页面通过约定规范,向应用请求并展示各类整合信息,例如首页侧边插件,导航栏应用动态数字等。

小结

在本文中,我们对CS项目的目的与意义,CS的业务结构,以及CS的技术架构有了初步的认识。后面的文章将会关注各个技术细节的实现与心得。

CS平台分为线上正式版与开发版。线上正式版地址:cs.xiyoulinux.org   开发版地址:dev.xiyoulinux.org

CS平台的全部代码,开源于Github。仓库地址:https://github.com/Jensyn/cs-xiyoulinux/   应用开发文档地址:https://github.com/Jensyn/cs-xiyoulinux/wiki