文章分类 » Blog my Blog

架构师设计大纲

哪些项目必须写设计文档

DEV工作量大于等于2PD的项目必须写设计文档,建议所有项目都根据设计大纲确认一下有没有问题。

设计的坏味道

线上频繁执行SQL来修复问题

有大量的JSP后门

机制和策略不分离,任何修改都牵一发而动全身

设计大纲

按照项目研发流程设计

需求解析

分析相关方、计算收益,定义评估方法

描述背景、要解决的问题

名词及术语定义

总体设计

技术选型:涉及技术选型,需要对比候选方案的优缺点,特别要关注一个技术方案的缺点自己是否可以接受。

确定边界:系统边界、代码边界、接口边界等

确定交互流程:

  • 交互流程划分:业务交互流程、系统交互流程、模块交互流程
  • 交互流程检查点:一致性、性能
  • 策略算法相关功能:需要画出流程图

结构设计:

  • 逻辑结构:数据模型、时序模型、状态机模型;
  • 物理结构:DB;
  • 部署结构:分析依赖关系,后续要根据以来关系来撰写上线步骤

详细设计

存储设计:

  • 抽象出业务实体
  • 画出实体之间的ER关系图
  • 定义表结构,写出MySQL scheme变化
  • 考虑数据如何初始化

接口设计:

  • 接口组成:存储层接口、模块间接口、系统间接口
  • 接口应该抽象一组能力,良好的设计应该做到“机制和策略分离”,而接口应该承担分离的职责
  • 接口变化需要检查是否有兼容性问题

类图:类描述业务实体,需要描述清楚类之间的关系;类图的设计可以参考各种设计模式,

测试设计

可测性:尽量减少对环境的依赖,确定自测方法;策略算法相关的功能,需要提前想好如何获取数据、如何度量好坏;

测试范围:写明项目的影响面、确定测试范围。测试范围评估不准,会影响自测质量,进而导致联调时间偏长、QA测试时间偏长、QA测试评估不充分导致质量偏低。

测试用例:包括单元测试用例、接口测试用例、系统测试用例、面向C端的用例等

发布流程

写上线步骤:包括上线步骤、回滚步骤(必须和上线步骤相反,每一步都需要有回滚方案)、线上检查方法、应急方案(回滚或者降级);要重点检查兼容性。

上线前评估:上线时间(上线要评估对业务的影响,进而决定可行的上线时间)

阿里技术三板斧:可灰度,可监控,可回滚。

按照系统层次结构设计

存储设计

  • 抽象出业务实体
  • 画出实体之间的ER关系图
  • 定义表结构,写出MySQL scheme变化
  • 考虑数据如何初始化

API设计

构成:API可以划分为存储API、模块间API、对外API

方法:建议使用OOA、DDD等设计方法;一个良好的接口应该描述一组能力,可以尝试使用一句话来描述接口的能力。

模块设计

根据API粒度,按照服务原则,规划模块及模块关系

流程设计

  • 交互流程划分:业务交互流程、系统交互流程、模块交互流程
  • 交互流程检查点:一致性、性能
  • 策略算法相关功能:需要画出流程图

系统结构设计

  • 逻辑结构:数据模型、时序模型、状态机模型;
  • 物理结构:DB;
  • 部署结构:分析依赖关系

关键检查点和设计组成

工作量拆分

性能:

  • 存储性能:选择DB、设计表结构、设计Cache机制
  • 接口性能
  • 吞吐量
  • 数据规模

一致性:

  • 数据一致性:事务处理是否正确,是否涉及分布式数据一致性,是否需要分布式事务
  • 并发处理:锁、幂等机制等

监控

附录:设计流水账

  1. 明确交互流程:系统之间、业务、模块
  2. 交互流程关键节点:一致性、性能
  3. 底层API(对外、存储)、DB数据库设计(实体关系、scheme-SQL)
  4. 对现有系统影响范围,评估、应对方案
  5. 详细设计:接口、前端接口、类图
  6. 发布流程:兼容性、上线步骤、历史刷数
  7. 数据:增加字段如何处理,如何刷数据
  8. 用例Case(C端)
  9. 上线前前评估:吞吐量、性能、时间、数据规模
  10. 涉及状态:状态机
  11. 测试要点:TestCase、单元测试Case、自测方法、测试范围(事后用联调、QA测试状况来评估)、可测性(免环境)
  12. 业务模型、模块、层次图
  13. 工作量拆分
  14. 背景,要解决的问题
  15. 采用的代码设计模式
  16. 监控
  17. 性能(核心API)
  18. 边界:系统、代码、接口
  19. 拆出来提测文档
  20. 需求解析
  21. 逻辑结构:数据模型、时序模型、状态机模型;物理结构:DB;部署结构:依赖=>上线步骤
  22. 线上检查方法
  23. 事务:特例考虑分布式事务
  24. 数据处理方式:DB、Cache;一致性处理
  25. 并发处理:锁、幂等操作
  26. 发布考虑:监控、灰度、应急方案(回滚、降级)
  27. 技术选型:对比优缺点
  28. 数据模型
  29. 策略算法:需要画流程图
  30. 名词定义、术语
  31. 相关方、利益(收益)
  32. 问题:代码与设计不符
  33. 线上问题度量:线上执行SQL刷数据次数、JSP后门执行次数、蜂利器任务提报问题数量
  34. API类别:存储、对外、模块间
  35. API设计之前:先一句话描述

关于寻找目标市场的思考

最初是什么想法呢。。。。。。。。

多级市场划分。

划分的维度是多方面的,比如城市等级,大小,经济,人口等。任何一项事务,扩散总是有一个过程的。多数情况下,都是由大城市发起或者由国外流入国内一线大城市,然后逐渐再扩散到二线三线直至到四五线城市。

由于身处大城市,虽然不是说随时随地都是在关注最前沿的流行的东西,但是毕竟耳濡目染,身边环境所致,还是能够意识到一些东西。尤其是逢年过节什么的,从一线城市回到家里的时候,你会觉得家里的这份“土”,其实就是潮流扩展的过程所体现出来的现象之一。

所以节假日什么的,也是二三四线城市与大城市交流沟通和打通的手段了。通过这时候从大城市到小城市的人员流动,从而促进了二三四线城市的潮流推进。

反过来说,经常在一二线城市与三四五线城市之间走动,也应该会更容易发现不同级别城市之间的差异,发现二三四五线城市的发展趋向,预见其发展潮流,从而发现其中的商机。

想要利用这个过程,就是主动去发现,然后主动去学习,效仿大城市的内容、潮流,然后带到二三线城市里去。从中应该能赚到一些潮流红利。

降维打击

对,这就是降维打击。用一种几乎已知未来的方式来操控更低维度城市的发展过程。就跟使用互联网打击传统行业一样。

三四五线城市居民的特点

根据一些已经在这个市场上火起来的应用来分析一下吧。目前已经火到大城市也能看到、知道的产品和市场,有这么几个:

  • 抖音,快手
  • 拼多多
  • 趣头条
  • 今日头条

这几个是已经十分火爆的,并且在一线城市都已经有了相当知名度的产品。他们瞄准的基本都是二三四五线的用户。甚至比较火的一些小程序,公众号等,做的也是这方面的内容,但是因为整体平台并不是这个定位,所以先不放这部分。对于今日头条是否列入这里也稍微存在争议,不过因为头条使用的推荐算法,是你越看什么,就越给你推荐什么的。所以针对二三四线城市,就会针对他们推荐他们这个市场自己关注的内容,也算是一种吧。

其他几款就不一样了,基本就是专门针对这个市场做的。

大致总结一下面对人群的特点:

  • 空闲时间多
  • 看中小利益,容易被低额小利吸引
  • 传播成本低,喜欢噱头
  • 乐于扩散

目前还有哪些东西可以在这样的市场上搬运和投放呢?思考一下,回头写。

无题

又是在咖啡厅呆了挺长的时间。什么都做了,比如看书,看小说,阅读一些文章,emmmmmm…..甚至睡觉。感觉生活又失去了方向感。

之前一段时间对区块链比较看好,自己也有意想要深入了解,因此投入相当的精力。但是回过头来看,自己投入精力的地方,其实主要并不在学习上,而是在如何参与上。自己并没有真正将这个东西了解透彻(当然自己是想了解透彻的),就已经持续参与到一些项目中了。在学习的时候,主要也围绕着这里可能用到的东西,但是更多的时候,是使用自己一知半解的知识,去强行依附正在操作的新概念项目。从概念上,其实也还好,对自己的理解力和悟性还是有一些信心的,这方面并没怎么跑偏。但是对于真正技术上的实现,自己就差的有点远了,可以说最基础的知识还没有完整的看完过。对于整个系统的理解,也没有到位,比如,到现在为止,自己对于问题:token是如何值这么多钱的 这个问题,有一个最起码看起来合理的解释。

加上正好凑这段时间,自己也换了新工作,新工作这边压力还是挺大的,要求高是一方面,大家水平都比较高,压力比较大也是一方面。上个月吧,公司经历了一番调整,而正好我也有机会单独带一个需求。也算是表现了一番吧,转正时候有意给我升级别,最终结果还没出来。这次完了之后,自己调整到另外一个部门去做另外一个东西,当然其实还不是单独的。

自己在这段时间也思考了一下,感觉把精力铺的太开还是不行,需要专注某些东西,不然自己忙不过来。当然其实这不是最主要的问题。最主要的问题之一,是自己现在已经有些懒惰了,总想做一些快速享受愉悦的短视的事情,比如看部电影,看本小说。精力没有集中在要做的事情上,哪怕自己思考过了,也仍然是这样。这才是最亟待改变的地方。如果自己的注意力能十分,不,不说十分,七八分集中吧,很多事情也做下来了,能够有一些成就。

但是这个习惯很难一下就改过来,所以想通过收敛一下自己关注的东西,让自己注意力能尽量的放在一两件事情上,算是从侧面的一种方式,让自己不用“忙”这个状态给自己找借口。

自己现在也不说能力多强多差,但是,做事情总是在那个“完成”的层面上,说不上好,也说不上差,但是更远远说不上卓越。总是需要把事情做到卓越的程度,才能真的让自己在大佬们面前露脸啊。