记一次产品重构的思考

1. 产品重构预知

在贯彻及执行产品重构之前,至少如下三点要做到了然于胸。

1.1 充分理解当前架构

首先做到充分理解当前架构和各种业务场景及需求。

1.2 明确重构的原因

分析架构重构的理由和其他备选方案,明确重构的目的是为了满足业务需求,并且是不得不做的最佳方案,然后再考虑其他问题。有时候,经过分析就会发现,也许还有其他解决方案,比如增加计算资源,或者重构的目的不是为了业务需求,那就没有必要做了。

1.3 明确重构的目标及边界

如果确定要重构,那么要把目标明确下来,也就是重构的边界条件,怎么才算是“完成”了重构,目标要有数据量化,或者有能够测试的办法。这也是一个需求分析的过程,如果需求不明确,那么规格说明书没法写清楚,负责重构的团队也没有明确的目标,不能以重构的时间或者主观的判断为结束的依据。

2. 技术评审

决定产品重构后,要做技术评审,至少要做到产品经理、项目经理和产品开发技术人员参与。

2.1 功能需求评审

在重构每个模块时都要进行技术评审包括基础框架类的和功能模块,最好把需求及目标都一条一条的列出来。

2.2 技术选型

进行架构重构时不是时下最热的技术就好,而是要注重实效,要考虑人力及时间成本,看能不能完成此次架构重构的目标。

3. 任务分工

基础设施比如Web框架、数据库选型、中间件、缓存设计等;

各个服务模块业务接口的实现;

通用方法库;

4. 产品重构过程管控

建议把重构过程分成一个个小的迭代,每个迭代的目标和时间都要量化,并且期间要有项目或者产品管理人员来对每个迭代的状态进行把控,比如每天开5-10 minutes的站会或者每周开周会来对每天每周的项目状态进行追踪。

5. 开发规范

因为做后端且偏python,所以从python及相关框架的角度来思考编码规范的问题。

5.1 代码规范自检

代码的风格最好都保持一致,方便后期维护及管理。

比如采用flake8及其插件,插件比如:flake8-commas、flake8-import-order、flake8-quotes、line-profiler等。

5.2 单元测试及覆盖率

方法论

对于开发的Restful API必须都要单元测试,且对接口的覆盖率要达到80%以上。

实践举例说明

基于django框架的API接口的单元测试: form rest_framework.test import APITestCase 从而进一步封装APITestCase。

数据那一块可考虑使用factory-boy

覆盖率:coverage

5.3 代码提交规范流程

git flow

5.4 代码审查及合并

每个方法或接口实现最多不能超过100行,在代码合并之前要assign若干名同事review,待都同意merge后方能执行合并操作。

6. 测试

常规功能测试、压测、回归测试、灰度测试等

7. 线上部署方案

线上肯定得出一套安装部署方案,或半自动化或全自动化,或是将代码打包成二进制文件通过yum、apt-get之类的工具安装、启动服务;或是走容器化;

8. CI/CD

8.1 CI

CI: 可以考虑用gitlab CI来做代码的检查、单元测试甚至代码的构建,这一块涉及到的知识点:.gitlab-ci.yml、docker、gitlab-runner安装注册及使用等;

这一步可能也会涉及到docker私有registry的搭建;

8.2 CD

能够实现快速产品交付和自动将产品部署到开发测试甚至生产环境。

比如考虑用gitlab+jenkins+fabric/shell/ansible脚本的形式来实现。

实现一个CD小demo应该遵循的流程:

    1. docker安装jenkins;
    1. 创建触发任务、参数构建任务、周期性任务;
    1. 分别通过脚本来实现各自任务下项目自动化的部署;

你可能感兴趣的:(记一次产品重构的思考)