每课项目概要(新人必读)

欢迎你成为每课的开发者!我们先简要的了解一下每课的项目架构吧!

项目架构

每课服务器端采用的是基于 Kubernetes 的微服务架构(有关微服务架构的内容只需做大概了解即可),目前我们服务器上主要有以下几个微服务:

  • everyclass-server:这是最直接面向用户的服务,它负责渲染我们平常使用的网页,也实现了大部分业务逻辑。开发语言使用 Python,数据库使用 PostgreSQL 和 Redis。负责人: @frederic
  • everyclass-api-server:提供 RESTful API,为 everyclass-server 和(未来)第三方开发者提供获取课表数据的接口。开发语言使用 PHP,数据库使用 MySQL、MongoDB。负责人: @wolfbolin
  • everyclass-auth:负责学生身份的验证,包括邮件验证和模拟用户登陆教务系统。数据库使用 MongoDB。负责人:@frederic

因为 HTTP 上手快,开发调试方便,目前微服务之间采用的是 HTTP 的方式进行 RPC 通信。

此外我们还有安卓客户端,负责人: @zhangone

根据自己的技术栈,你可以选择你感兴趣的子项目并联系对应的负责人获得更多内容。

多环境

我们的服务器部署在腾讯云上。考虑到开发新版本不应该大批量影响普通用户,我们使用 Kubernetes 的命名空间机制在服务器上划分出了多个相对独立的环境:

  • production:生产环境,正式用户访问
  • staging:staging 环境,种子用户群成员(核心测试者)访问
  • testing:测试环境,开发联调时使用

新版本一般会先发布到 staging 环境,确认比较稳定后才会升级 production 环境。

工具集

需求管理

我们使用 GitHub issue 来管理开发需求,虽然各个微服务的代码仓库是分开的,但为了需求管理不至于过于碎片化,我们统一使用主仓库的 issue page: https://github.com/everyclass/everyclass/issues

我们为不同的 issue 贴上了不同的标签,这些标签按照如下维度分类:

  • Component:与本 issue 相关的服务
  • Priority:issue 优先级,p0 为最高,p2 为最低
  • Type:issue 的类型,是新功能、bug、对老功能的增强、还是重大的架构变化

代码仓库

我们使用 git 作为版本控制工具。请熟悉 git 的使用并确保阅读了 git 的注意事项:Git Basic Principles
我们使用 GitHub 来托管代码仓库。已经成为正式成员的同学可以提交代码到自己的分支(branch)并联系微服务负责人合并到 master 分支(一般情况下建议不要自行合并),也可 fork 后提交 pull request。尚未具有权限的同学可以 fork 后提交 pull request。