架构师的6个能力:

1、需求分析

  • 识别业务逻辑
  • 识别业务场景
  • 识别业务风险

2、架构设计

  • 解决问题:三高
  • 解决问题:CAP
  • 领域模型设计
  • 大数据建模设计

3、架构选型

  • 技术方案选型:常用技术方案VS优缺点对比
  • 设计模式选型:36种代码设计模式的最优化选择
  • 架构模式选型:单机、分布式、生产消费、客户端-服务端等几种模式的最优化选择

4、容量规划

  • 业务层面规划:整体上评估业务需要多大系统容量:UV,PV,DAU/MAU,IP这些指标衡量。
  • 水平层面规划:TPS,QPS,SESSION,这些指标衡量各个子系统的承载能力。
  • 垂直层面规划:CPU,内存,IO,网络,连接数,这些指标衡量各子系统的承载能力。

5、代码落地

  • 核心代码编写:比如多线程代码编写,解决分布式系统核心代码问题;编写一个C/S架构的代码结构;编写一个跳表持久化模块;
  • 底层代码设计:比如构建一个项目的0-1代码框架,需要租户功能,需要MVC,需要外置存储cache,需要机器学习,需要搜索ES,需要微服务等。

6、服务治理

  • 识别和找出线上BUG和线上性能问题:通过异常日志,异常监控指标等;
  • 线上问题的分析和定位:代码走查解决日志异常的问题,压力测试解决监控异常指标的问题;面对JAVA内存溢出的情况,通过查看日志,栈异常通常是for循环语句,JAVA的每一行代码都保存在内存栈中;堆异常就很可能是对象过大过多,比如流没close发生对象无限大和多没释放把JVM给暴了,临时方案增大XSS,XMS,同时各种内存分析工具定位问题代码点,然后针对问题代码进行逻辑检查,代码块打代码运行时间差来判断,并且查看GC监控里线程是否线行增长,堆是否线行增长?如果线程过多导致OOM就降低线程数,如果是堆增长查看对象是否关闭的逻辑;修正之后运行一下OK,最后压测一下这个代码逻辑一短时间,期间要看一下代码运行时间的变化;
  • 降级和柔性的设计:解决问题之后,尽可能设计加固方案(回退、降级、偶发点等保障性设计),比如:通过经验积累,提前考虑到代码行会产生FULL GC的问题造成性能损失,零拷贝和内存池解决FULL GC;
  • 柔性设计来进行线上的补偿和替补;