系统架构师如何做好系统设计

系统设计基本概念

  • 熟悉系统设计的思考框架,知道做系统设计的套路,系统设计不是简单的上来就画画框什么的,必须按照一定的套路才能更好的进行系统设计
  • 拓宽知识面,系统设计中非常重要的是考虑的全面性,以更好的进行权衡取舍

系统设计流程

  • 系统设计的目的 -> 系统设计的目标 -> 围绕目标的核心设计 -> 围绕核心设计形成的设计原则 -> 各子系统以及模块的详细设计

系统设计的目的

  • 是指做这个系统设计的目的到底是什么

系统设计的目标

  • 围绕系统设计的目的,形成一些可衡量的目标,从而确保最终系统实现和最初的目的不要出现太大的偏差

围绕目标的核心设计

  • 通过设计实现上面的目标,这个环节中技术的专业,视野,全面的考虑,权衡取舍的主观原则,解题的思路,是形成最后的核心设计的关键
  • 在核心设计这个阶段中,会产生一些新的衡量设计最后实现情况的目标,这些也要增加到系统设计中,确保最后的实现和设计的偏差度是可视的

围绕核心设计形成的设计原则

  • 有了核心设计后,可以真正的形成一些设计原则,确保后面的子系统以及模块的详细数据能够遵循,并在详细设计中体现出来,这样才能保证整个大的系统设计的一致性

各子系统以及模块的详细设计

  • 在前面的范围中,解好一个更小范围的题

系统设计实践

系统建设的目的

  • 当需要做系统设计时,意味着需要建设一套新系统,或者对比原有的系统进行比较大的架构的改造升级,这一定是基于什么原因去做的
  • 分析好系统建设的目的:
    • 一方面是为了避免出发点有问题,系统建设的目的应该充分反映出解决业务层面面临的挑战. 或者系统用户层面面临的问题,而不是出于个人的需求
    • 一方面是为了确保在后续的系统设计中能保证目的的达成
  • 首先要思考清楚为什么要做某件事,并且能讲清楚原因.动机非常重要,做架构的时候要注重业务化而不是技术化
  • 做系统设计前,一定要先对于系统建设的目的分析清楚,确保系统建设有价值和意义,同时确保后面的整个系统设计是能让目的达成的

系统建设的目标

  • 将目的的描述转换成为可衡量的目标的描述
  • 可衡量的目标是确保最后实现的系统达成了系统建设的目的, 防止设计出来的系统和最后落地的系统不一致
  • 清晰可衡量的系统建设的目标:
    • 确保了系统设计过程中可以针对性的围绕目标来做,避免偏题
    • 可以用来做一个跟踪系统建设效果的系统
    • 只有有了跟踪系统建设目标是否达标的系统,才能真正确保系统建设完毕后和初心保持一致.这个跟踪效果的体系一定要在系统建设的时候同步就做好
  • 从目的到目标,理论上并不复杂,但很容易漏掉,导致后面的系统设计环节出现问题.关键是要形成可衡量的目标,以及相应的跟踪目标达成情况的系统

达成目标的核心问题

  • 如果要达成系统设计的可衡量的目标,到底面临什么核心问题,只有明白了面临什么核心问题,才能更加明确的进行系统设计来解决这些问题
  • 从可衡量的目标映射到技术层面要去解决的核心问题

解决核心问题的设计

  • 系统设计是全方位的,要考虑到的不仅仅是怎么实现,还要考虑到怎么用,运行,维护阶段又是怎么样的
  • 对整个系统的处理过程要非常清楚,如果要用到开源的框架,要对开源框架的代码逻辑非常熟悉,做到技术的可控性
  • 解决核心问题的设计,在技术选型上深厚的技术功底,在整个设计方案上知识的广度,考虑的全面性,包括开发态,部署态,运行态和运维态的要求都是很高的
  • 在相应的技术领域要有足够的视野,一定要知道这个领域的工程界,学术界的技术情况.这样对在结合目的,目标以及一些约束条件下做出更合理的技术选型是非常重要的
  • 要学习如何扩充技术视野
  • 在解决问题的核心设计上,要根据各种约束来做一些方案的权衡选择
  • 异地多活设计上所面临的选择:
    • 流量或数据拆分的规则到底按什么好? 买家,卖家,商品
    • 分流的规则和数据库分库分表的规则的关系: 松耦合还是强绑定
    • 数据同步策略的选择: 部分还是全量
    • 数据一致性的保障在哪些层面做?CAP
    • 部署的选择: 两地还是三地以及地域分布的选择
    • 落地的时间

架构师能力总结

  • 对业务所面临的挑战的理解,从业务挑战到技术挑战映射的能力,也就是技术抽象的能力
  • 知识储备以及考虑的全面性,包括开发,部署,运行,维护态
  • 技术选型的能力,极厚的技术功底,开阔的技术视野
  • 在各种约束条件下权衡选择的能力和原则
  • 长期的实战和技术积累

猜你喜欢

转载自blog.csdn.net/JewaveOxford/article/details/107455553