如何快速熟悉一个系统?

原文摘自:https://mp.weixin.qq.com/s/g7wvEIBa0mK3XbJZ_4ZvRA

业务学习

系统所在行业的情况是怎样?

系统的目标用户是谁?

  • 公司高层
  • 运营/客服
  • 互联网用户

平均有多少人在使用?高峰期多少人在用?

系统有什么业务价值?有哪些指标可以衡量系统业务价值?

系统有哪些功能模块?

系统有哪些领域概念?

  • 领域模型

系统的关键业务流程是怎样的?

系统的非功能性需求有哪些?

  • 性能
  • 质量
  • 扩展性
  • 安全性

系统未来的发展规划是怎样?

技术学习

逻辑架构

核心设计任务

  • 模块划分
  • 接口定义
  • 领域模型细化

常见图形

静态图

  • 包图
  • 类图
  • 对象图

动态图

  • 序列图
  • 协作图
  • 状态图
  • 活动图

常见问题

有哪些子系统或模块?

系统之间是什么样的关系?

对外上下游接口有哪些?

对接人是谁?

关键业务流程怎么实现的?

  • 用类图、序列图等方式表达出来

开发架构

核心关注点

系统源码

第三方SDK

使用的框架、中间件、工具包

常见问题

代码在哪?

包怎么划分的?怎么分层?

  • controller、service、dao

用了什么框架?

  • ssh、dubbo、spring cloud

用了哪些工具包?

  • apache commons、guava、fastjson

用了哪些中间件?

  • metaq、tair、schedulerX

依赖哪些平台?

  • 权限平台
  • 流程引擎

运行框架

核心关注点

并发

同步

通信

常见问题

系统能支撑多少QPS?峰值QPS多少?

与上下游系统怎么交互的?

  • RPC or RESTful API
  • 同步/异步

物理架构

核心关注点

目标程序及其依赖的运行库/系统软件最终如何安装或部署到物理机器上

如何部署及其和网络

  • 高可用
  • 高性能
  • 高并发
  • 可靠性
  • 扩展性
  • 安全性

常见问题

系统如何发布部署?有哪些部署环境?

系统有多少台机器?

系统部署怎么部署的?

  • 集群部署
  • 分布式部署

有没有容器化?

有没有多机房部署?

数据架构

核心关注点

持久化数据的存储方案

  • 存储格式
  • 实体数据
  • 实体关系数据
  • 数据传递
  • 数据复制
  • 数据同步策略

常见问题

数据存储在哪?用了什么数据库?

  • Oracle
  • MySQL

梳理 E-R 图

数据量有多少?是否有分库分表?

用了哪些NoSQL数据库?

  • MongoDB
  • Redis
  • Memcache
  • ES

有哪些数据同步任务?

大数据框架的使用情况如何?

  • Hadoop
  • Apache
  • CDH
  • HBase
  • Hive
  • YARN
  • Flume
  • Kafka
  • Spark

系统运维

常见问题

什么时间容易出问题?

  • 双十一大促
  • 月末

对关键功能是否有监控?

  • 监控
  • 报警

出了问题怎么解决?日志在哪?是否有全链路跟踪?是否有一些紧急操作?

  • 开关配置
  • 降级/限流配置

系统有哪些坑?

  • 找负责的产品、运营、技术了解
  • 设计漏洞
  • 性能隐患

运营、客服反馈的常见问题有哪些?

实战

  • 做需求
  • 修bug
  • 重构
  • 亲自动手编码
  • 调试
  • 测试
  • 上线
王方钢 / Kenny Wang wechat
0%