03 - 架构设计的目的

架构设计的目的是什么?为何需要架构设计?

架构设计的误区

  • 因为架构很重要,所以要做架构设计
    • 不做架构设计系统就跑不起来么?
    • 做了架构设计就能提升开发效率么?
    • 设计良好的架构能促进业务发展么?
  • 每个系统都要做架构设计
  • 公司流程要求系统开发过程中必须有架构设计

这些误区其实都是舍本逐末,都是很表面地看问题,并没有真正理解为何要做架构设计,而且很多需求并不一定要进行架构设计

  • 为了高性能、高可用、可扩展,所以要做架构设计
    • 说明已经有了一定的架构经历或者基础,毕竟确实很多架构设计都是冲着高性能、高可用……等“高 XX”的目标去的
    • 持有这类观点的架构师和设计师会给项目带来巨大的灾难,不能不管什么系统,也不管什么业务,上来就要求“高性能、高可用、高扩展”

架构设计的真正目的

架构设计的主要目的是为了解决软件系统复杂度带来的问题

  • 遵循这条准则能够让架构师心中有数,而不是一头雾水
  • 通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计
  • 架构设计并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出复杂点然后有针对性地解决问题
  • 理解每个架构方案背后所需要解决的复杂点,然后才能对比自己的业务复杂点,参考复杂点相似的方案
  • 这条准则能够让架构师有的放矢,而不是贪大求全

简单的复杂度分析案例

以学生管理系统,其基本功能包括登录、注册、成绩管理、课程管理等为例

  • 性能:
    • 学校学生不多,访问频率并不高
    • 因此性能这部分并不复杂
    • 存储用 MySQL 完全能够胜任,缓存都可以不用
    • Web 服务器用 Nginx 绰绰有余
  • 可扩展性:
    • 学生管理系统的功能比较稳定,可扩展的空间并不大,因此可扩展性也不复杂
  • 高可用:
    • 即使宕机2小时,对学生管理工作影响并不大
    • 因此可以不做负载均衡,更不用考虑异地多活这类复杂的方案
    • 但是,如果学生的数据丢失,修复是非常麻烦的,只能靠人工逐条修复,这个很难接受
    • 因此需要考虑存储高可靠,这里就有点复杂
    • 需要考虑多种异常情况:机器故障、机房故障
      • 针对机器故障,我们需要设计 MySQL 同机房主备方案
      • 针对机房故障,我们需要设计 MySQL 跨机房同步方案
  • 安全性:
    • 学生管理系统存储的信息有一定的隐私性,但不是与金融、强隐私相关的
    • 因此安全性方面做到以下几点基本满足需求:
      1. Nginx 提供 ACL 控制
      2. 用户账号密码管理
      3. 数据库访问权限控制
  • 成本:
    • 系统简单,基本上几台服务器就能够搞定,无需关注
  • 最终架构如下:


    学生管理系统架构设计图

小结

希望通过此篇讲解,能让你对架构设计有一个清晰的认识,不要犯架构设计的误区的问题

你可能感兴趣的:(03 - 架构设计的目的)