程序员如何蜕变成架构师

程序员更多的关注的是局部 , 而架构师则是全局 , 这个蜕变的过程 , 是一个长期积累的过程 , 是一个需要量变的过程 , 最后才能从量变转化为质变 , 成为一名合格的架构师 。
一、什么是架构

  • 架构是系统与子系统、模块与组件、框架与架构以及它们之间的协作关系、约束规范、指导原则 。
  • 架构的本质是对系统进行有序化地重构 , 使其符合当前业务的发展 , 并可以快速扩展 。
  • 什么样的系统要考虑做架构设计
  1. 需求相对复杂.
  2. 非功能性需求在整个系统占据重要位置.
  3. 系统生命周期长,有扩展性需求.
  4. 系统基于组件或者集成的需要.
  5. 业务流程再造的需要.
二、架构分类
  • 架构可分为业务架构、应用架构、技术架构, 代码架构, 部署架构 。

程序员如何蜕变成架构师

文章插图
 
  • 业务架构是战略 , 应用架构是战术 , 技术架构是装备 。其中应用架构承上启下 , 一方面承接业务架构的落地 , 另一方面影响技术选型 。
  1. 业务架构
  • 包括业务规划 , 业务模块、业务流程 , 对整个系统的业务进行拆分 , 对领域模型进行设计 , 把现实的业务转化成抽象对象 。
  • 没有最优的架构 , 只有最合适的架构 , 一切系统设计原则都要以解决业务问题为最终目标 , 脱离实际业务的技术情怀架构往往会给系统带入大坑 , 任何不基于业务做异想天开的架构都是耍流氓 。
  • 所有问题的前提要搞清楚我们今天面临的业务量有多大 , 增长走势是什么样 , 而且解决高并发的过程 , 一定是一个循序渐进逐步的过程 。合理的架构能够提前预见业务发展1~2年为宜 。这样可以付出较为合理的代价换来真正达到技术引领业务成长的效果 。

程序员如何蜕变成架构师

文章插图
 
2.应用架构
  • 划分
1)、 职责划分: 明确应用(各个逻辑模块或者子系统)边界
a. 逻辑分层
b. 子系统、模块定义 。
c. 关键类 。
2)、 职责之间的协作:
a. 接口协议:应用对外输出的接口 。
b. 协作关系:应用之间的调用关系 。
  • 应用分层有两种方式:
1)、水平分(横向) , 按照功能处理顺序划分应用 , 比如把系统分为web前端/中间服务/后台任务 , 这是面向业务深度的划分 。
2)、垂直分(纵向) , 按照不同的业务类型划分应用 , 比如进销存系统可以划分为三个独立的应用 , 这是面向业务广度的划分 。
总结:业务架构、应用架构、技术架构三者之间 , 应用架构是个承上启下的连接作用 , 应用架构依赖业务架构 , 同时又影响技术架构 。
应用架构的本质是通过系统拆分 , 平衡业务和技术复杂性 , 保证系统形散神不散 。
3.代码架构(也叫开发架构)
公司统一代码架构 , 如果不同开发团队使用不同的技术栈或者组件 , 结果公司整体架构设计就会失控
  • 代码架构主要定义:
【程序员如何蜕变成架构师】1)、 代码单元
a. 配置设计
b. 框架、类库
2)、 代码单元组织:
a. 编码规范 , 编码的惯例
b. 项目模块划分
c .顶层文件结构设计 , 比如mvc设计
d.依赖关系
4.技术架构
技术架构:确定组成应用系统的实际运行组件(lvs , Nginx , Tomcat , php-fpm等) , 这些运行组件之间的关系 , 以及部署到硬件的策略 。
技术架构主要考虑系统的非功能性特征 , 对系统的高可用、高性能、扩展、安全、伸缩性、简洁等做系统级的把握 。
5.部署拓扑架构
程序员如何蜕变成架构师

文章插图
 
三、架构设计的3个原则
1、简单
1)组件越多 , 就越有可能其中某个组件出现故障
2)某个组件改动 , 会影响关联的所有组件
3)定位一个复杂系统中的问题总是比简单系统更加困难


推荐阅读