工作中我们经常需要给其他人介绍项目架构,有什么方法可以提高介绍的效果吗?根据本人经验,总结了一篇指南。
要让对方掌握项目架构,一个清晰的介绍架构和顺序可以事半功倍。
项目背景
在介绍项目架构之前,首先要介绍一下项目本身的意义和目的,便于对方了解项目背景
- 解决了什么问题,满足了什么需求等?
- 目标用户是谁?(可以用类似讲故事的方式介绍对目标用户的带来的价值)
- 目前用户的使用情况如何(访问量,满意度,各个功能使用情况等数据)
功能点
项目针对用户需求或问题,开发了哪些功能
在介绍功能的时候,最好要有用户视角,而且可能还涉及到多个不同角色的用户。比如ToB的终端用户,B端企业用户,企业老板等
核心功能
满足用户核心需求、解决核心问题的功能
比如:
- RPC框架中的远程调用
- ORM框架中对象关系转换
- 智能问答系统中问答功能
辅助功能
配合核心功能工作的辅助功能
比如:
- RPC框架中的调用链路跟踪、监控、连接池管理、负载均衡等
- ORM框架中的动态SQL、参数绑定、缓存等
- 智能问答系统中的知识库管理、相似问题学习等
性能&安全
在比较完善的系统规划中,性能&安全都是重要功能特性之一,可以作为广义功能来介绍
比如:
- 吞吐量
- 响应时间
- XSS/CSRF/SQL注入等漏洞修复
- 数据安全等
这一部分也可以放在架构之后再介绍
发展规划
如果有的话,就简单介绍一下项目未来的发展方向(不要超过一张PPT,不要超过1分钟)
架构图
使用各种类型的图表、文字、动画等把项目的整体架构描述清楚,外行觉得很思路清晰,内行能够很容易掌握技术点,能够理解架构的优缺点。
优缺点是指架构设计中的取舍,取对项目重要的特性,舍弃本项目影响不大,可以接受的特性
模块层次图
系统中各个模块的组成,模块实现方式,模块层次,模块之间调用方式等
比如:存储模块、缓存模块、日志模块、运营数据、监控模块以及各个业务功能模块。
核心流程图
各个模块在核心功能及主要辅助功能流程中的作用,使用流程图把各个模块串联起来
使用流程图形式,让对方了解系统是如何使用各个模块协作实现核心功能
技术点
流程在使用各个模块中实现的技术点
比如:
- 缓存及缓存同步
- 分布式锁
- 分布式会话管理
- 负载均衡
- 监控
- AB Test
- AOP或字节码修改等
如果有技术亮点,可以重点介绍一下
遗留的问题
没有一种架构是完美的,根据业务发展情况,有的问题的优先级不高,可以暂时保留
- 比如缓存同步的方案、缓存数据量太大、运营数据比较杂乱等
改进方向
如何解决遗留的问题,如何更好满足未来的需求,当业务量不断增大的时候,是否有预案
比如:
- 分库分表、异构数据库等
- Set化
- 数据冷热分离等
监控&告警
没有接入监控&告警系统的项目是不允许发布上线的
- 项目使用了什么监控系统,监控了哪些指标,使用什么样的告警机制
高可用
如果是行业标准高可用方案的话,简单介绍一下即可
其他
- 与其他类似项目的对比