从0到1创建一个网站

前几个月我从0到1完成了 hot-crawler 这个网站项目,它也是我个人的第一个网站,至今(2019年12月)已稳定运行了四个多月。功能虽然很简单,但是整个过程却十分的艰难。当时完全没想到开发一个网站需要做这么多事情,很多事情都是第一次做,只能遇到问题解决问题,硬着头皮上。当时对完整的开发流程不是很清楚,做的时候基本上是想到什么做什么,流程可能不完善或者不正确,但从0到1实现一个网站要做的事情基本上都做了。根据之前的经验和整理,下面按照我自己的理解,介绍一下从0到1创建一个网站的大致过程。

I. 设计阶段

这个阶段主要是构思想法、收集需求、设计功能和时间计划。

主要的工作:

  • 需求分析。
  • 原型和UI设计。
  • 系统设计。
  • 时间规划和任务划分。

产出的结果:

  • 用户需求和设计
    • 软件需求规格说明书(User/Software Requirements Specification, SRS)
    • 确定网站域名,网站名称,LOGO,Slogan。
    • 系统交互原型图。
    • UI 设计图。
  • 软件设计
    • 软件架构文档(Software Architecture Document)
    • 数据库设计文档(Database Design Document)
    • API 文档(API Documentation)
    • 软件详细设计文档(Software detailed design)
    • 开发流程规范文档
  • 过程文档(Process Documentation)
    • 项目计划,估计和时间表。(Plans, estimates, and schedules.)

II. 代码实现阶段

这个阶段主要是根据软件需求文档、软件设计文档和开发流程规范文档进行项目代码开发。

主要的工作:

  • 配置服务器。具体包括:购买服务器,搭建项目运行环境,部署项目。
  • 配置域名。具体包括:购买域名,DNS 解析,Nginx 反向代理,HTTPS。
  • 搭建持续集成(CI/CD)。具体包括:创建 Git 仓库,添加 gitignore,搭建或购买 CI 服务,配置 Docker,配置 Jenkins。
  • 后端代码实现。具体包括:创建项目,创建数据库,配置数据源,集成第三方类库,编写单元测试,编写模块代码。
  • 前端代码实现。具体包括:构建项目,实现UI布局,实现交互动作,兼容多个终端(PC,Mobile,Tablet 等)
  • 前后端对接。

产出的结果:

  • 功能完整和可运行的前后端的代码。
  • 项目说明文档(Source Code Document)。

III. 功能测试阶段

这个阶段主要是为预发布做准备。全面的系统功能测试、bug修复、功能优化等。

主要的工作:

  • 功能测试。
  • Bug 修复。
  • 前端功能优化。如,优化样式,兼容PC端和移动端。
  • 后端功能优化。如,可配置,可扩展,和用户体验优化等。

产出的结果:

  • 软件能够达到需求文档的所有要求。

IV. 性能测试和性能优化

这个阶段主要是为发布前做准备,保证服务的高性能、高可用和安全性等。

主要的工作:

  • 性能测试(Performance Testing)
    • 负载测试(Load Testing)。测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
    • 压力测试(Stress Testing)。测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的 CPU 利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
    • 容量测试(Volume Testing)。确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
  • 高性能
    • 算法实现优化。
    • JVM 优化。
    • 数据库优化。如,数据库表结构、索引和SQL优化。读写分离,分库分表。
    • 添加缓存和搜索引擎等。
    • 静态资源 CDN。
  • 高可用
    • 应用服务高可用。如,1. 详细的日志记录。2. 软件程序作为 Linux 服务,设置崩溃后可自动重启。3. DNS 负载均衡。4. Nginx 负载均衡。
    • 数据库高可用。如,数据库集群,数据备份。
    • 热部署、热更新。
    • 云监控(阿里云监控)。
  • 安全性
    • 设置系统防火墙。
    • 设置软件防火墙。
    • SSH 公钥登录。
    • 防止 SQL 注入和 XSS 攻击。
    • 防止 DDoS 攻击。

产出的结果:

  • 应用服务具备高性能、高可用和安全性等特点。

IV. 预发布和内测

这个阶段主要是小范围的推广试用,收集反馈意见,持续打磨和优化。

主要的工作:

  • 推广。
  • 收集意见。
  • 持续改进和优化。

产出的结果:

  • 软件功能完善、体验良好。

VI. 正式发布和推广

网站正式发布,全面推广。

VII. 日常维护

这个阶段的主要是潜在问题修复,用户体验优化,和功能调整等。

主要的工作:

  • 潜在问题缺陷发现和修复。
  • 优化用户体验。

产出的结果:

  • 保证应用服务的正常运行。
  • 功能持续调整和优化。

VIII. 其他

其他一些优化网站的事情。如下:

  • 埋点,数据采集和分析。统计用户行为,分析数据优化功能。

  • SEO。

References

[1] Technical Documentation in Software Development: Types, Best Practices, and Tools