架构篇03-为什么要做架构设计?

这篇具有很好参考价值的文章主要介绍了架构篇03-为什么要做架构设计?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


架构篇03-为什么要做架构设计?,软件架构,架构,java,开发语言,系统架构

谈到架构设计,相信每个技术人员都是耳熟能详,但如果深入探讨一下,“为何要做架构设计?”或者“架构设计目的是什么?”类似的问题,大部分人可能从来没有思考过,或者即使有思考,也没有太明确可信的答案。

架构设计的误区

关于架构设计的目的,常见的误区有:

  1. 因为架构很重要,所以要做架构设计

这是一句正确的废话,架构是很重要,但架构为何重要呢?

例如:不做架构设计系统就跑不起来么?

其实不然,很多朋友尤其是经历了创业公司的朋友可能会发现,公司的初始产品可能没有架构设计,大伙撸起袖子简单讨论一下就开始编码了,根本没有正规的架构设计过程,而且也许产品开发速度还更快,上线后运行也还不错。

例如:做了架构设计就能提升开发效率么?

也不尽然,实际上有时候最简单的设计开发效率反而是最高的,架构设计毕竟需要投入时间和人力,这部分投入如果用来尽早编码,项目也许会更快。

例如:设计良好的架构能促进业务发展么?

好像有一定的道理,例如设计高性能的架构能够让用户体验更好,但反过来想,我们照抄微信的架构,业务就能达到微信的量级么?肯定不可能,不要说达到微信的量级,达到微信的 1/10 做梦都要笑醒了。

  1. 不是每个系统都要做架构设计吗

这其实是知其然不知其所以然,系统确实要做架构设计,但还是不知道为何要做架构设计,反正大家都要做架构设计,所以做架构设计肯定没错。

这样的架构师或者设计师很容易走入生搬硬套业界其他公司已有架构的歧路,美其名曰“参考”“微改进”。一旦强行引入其他公司架构后,很可能会发现架构水土不服,或者运行起来很别扭等各种情况,最后往往不得不削足适履,或者不断重构,甚至无奈推倒重来。

  1. 公司流程要求系统开发过程中必须有架构设计

与此答案类似还有因为“架构师总要做点事情”,所以要做架构设计,其实都是舍本逐末。因为流程有规定,所以要做架构设计;因为架构师要做事,所以要做架构设计,这都是很表面地看问题,并没有真正理解为何要做架构设计,而且很多需求并不一定要进行架构设计。如果认为架构师一定要找点事做,流程一定要进行架构设计,就会出现事实上不需要架构设计但形式上却继续去做架构设计,不但浪费时间和人力,还会拖慢整体的开发进度。

  1. 为了高性能、高可用、可扩展,所以要做架构设计

能够给出这个答案,说明已经有了一定的架构经历或者基础,毕竟确实很多架构设计都是冲着高性能、高可用……等“高 XX”的目标去的。

但往往持有这类观点的架构师和设计师会给项目带来巨大的灾难,这绝不是危言耸听,而是很多实际发生的事情,为什么会这样呢?因为这类架构师或者设计师不管三七二十一,不管什么系统,也不管什么业务,上来就要求“高性能、高可用、高扩展”,结果就会出现架构设计复杂无比,项目落地遥遥无期,团队天天吵翻天……等各种让人抓狂的现象,费尽九牛二虎之力将系统整上线,却发现运行不够稳定,经常出问题,出了问题很难解决,加个功能要改 1 个月……等各种继续让人抓狂的事件。

架构设计的真正目的

那架构设计的真正目的究竟是什么?

从上篇分享的架构设计的历史背景,可以看到,整个软件技术发展的历史,其实就是一部与“复杂度”斗争的历史,架构的出现也不例外。简而言之,架构也是为了应对软件系统复杂度而提出的一个解决方案,通过回顾架构产生的历史背景和原因,我们可以基本推导出答案:架构设计的主要目的是为了解决软件系统复杂度带来的问题。

这个结论虽然很简洁,但却是架构设计过程中需要时刻铭记在心的一条准则,为什么这样说呢?

首先,遵循这条准则能够让“新手”架构师心中有数,而不是一头雾水。

新手架构师开始做架构设计的时候,心情都很激动,希望大显身手,甚至恨不得一出手就设计出世界上最牛的 XX 架构,从此走上人生巅峰,但真的面对具体的需求时,往往都会陷入一头雾水的状态:

“这么多需求,从哪里开始下手进行架构设计呢?”。

“架构设计要考虑高性能、高可用、高扩展……这么多高 XX,全部设计完成估计要 1 个月,但老大只给了 1 周时间”。

“业界 A 公司的架构是 X,B 公司的方案是 Y,两个差别比较大,该参考哪一个呢?”。

以上类似问题,如果明确了“架构设计是为了解决软件复杂度”原则后,就很好回答。

  • “这么多需求,从哪里开始下手进行架构设计呢?”
    ——通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。

  • “架构设计要考虑高性能、高可用、高扩展……这么多高 XX,全部设计完成估计要 1 个月,但老大只给了 1 周时间”
    ——架构设计并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出复杂点然后有针对性地解决问题。

  • “业界 A 公司的架构是 X,B 公司的方案是 Y,两个差别比较大,该参考哪一个呢?”
    ——理解每个架构方案背后所需要解决的复杂点,然后才能对比自己的业务复杂点,参考复杂点相似的方案。

其次,遵循这条准则能够让“老鸟”架构师有的放矢,而不是贪大求全。

技术人员往往都希望自己能够做出最牛的东西,架构师也不例外,尤其是一些“老鸟”架构师,为了证明自己的技术牛,可能会陷入贪大求全的焦油坑而无法自拔。例如:

“我们的系统一定要做到每秒 TPS 10 万”。

“淘宝的架构是这么做的,我们也要这么做”。

“Docker 现在很流行,我们的架构应该将 Docker 应用进来”。

以上这些想法,如果拿“架构设计是为了解决软件复杂度”这个原则来衡量,就很容易判断。

  • “我们的系统一定要做到每秒 TPS 10 万”
    ——如果系统的复杂度不是在性能这部分,TPS 做到 10 万并没有什么用。

  • “淘宝的架构是这么做的,我们也要这么做”
    ——淘宝的架构是为了解决淘宝业务的复杂度而设计的,淘宝的业务复杂度并不就是我们的业务复杂度,绝大多数业务的用户量都不可能有淘宝那么大。

  • “Docker 现在很流行,我们的架构应该将 Docker 应用进来”
    ——Docker 不是万能的,只是为了解决资源重用和动态分配而设计的,如果我们的系统复杂度根本不是在这方面,引入 Docker 没有什么意义。

简单的复杂度分析案例

我们来分析一个简单的案例,一起来看看如何将“架构设计的真正目的是为了解决软件系统复杂度带来的问题”这个指导思想应用到实践中。

假设我们需要设计一个大学的学生管理系统,其基本功能包括登录、注册、成绩管理、课程管理等。当我们对这样一个系统进行架构设计的时候,首先应识别其复杂度到底体现在哪里。

性能:一个学校的学生大约 1 ~ 2 万人,学生管理系统的访问频率并不高,平均每天单个学生的访问次数平均不到 1 次,因此性能这部分并不复杂,存储用 MySQL 完全能够胜任,缓存都可以不用,Web 服务器用 Nginx 绰绰有余。

可扩展性:学生管理系统的功能比较稳定,可扩展的空间并不大,因此可扩展性也不复杂。

高可用:学生管理系统即使宕机 2 小时,对学生管理工作影响并不大,因此可以不做负载均衡,更不用考虑异地多活这类复杂的方案了。但是,如果学生的数据全部丢失,修复是非常麻烦的,只能靠人工逐条修复,这个很难接受,因此需要考虑存储高可靠,这里就有点复杂了。我们需要考虑多种异常情况:机器故障、机房故障,针对机器故障,我们需要设计 MySQL 同机房主备方案;针对机房故障,我们需要设计 MySQL 跨机房同步方案。

安全性:学生管理系统存储的信息有一定的隐私性,例如学生的家庭情况,但并不是和金融相关的,也不包含强隐私(例如玉照、情感)的信息,因此安全性方面只要做 3 个事情就基本满足要求了:Nginx 提供 ACL 控制、用户账号密码管理、数据库访问权限控制。

成本:由于系统很简单,基本上几台服务器就能够搞定,对于一所大学来说完全不是问题,可以无需太多关注。

还有其他方面,如果有兴趣,你可以自行尝试去分析。通过我上面的分析,可以看到这个方案的主要复杂性体现在存储可靠性上,需要保证异常的时候,不要丢失所有数据即可(丢失几个或者几十个学生的信息问题不大),对应的架构如下:

架构篇03-为什么要做架构设计?,软件架构,架构,java,开发语言,系统架构

学生管理系统虽然简单,但麻雀虽小五脏俱全,基本上能涵盖软件系统复杂度分析的各个方面,而且绝大部分技术人员都曾经自己设计或者接触过类似的系统,很多本科生毕业论文会选择类似的系统作为课题,如果将这个案例和自己的经验对比,相信会有更多的收获。

小结
今天我们分析了架构设计的误区,结合上篇讲的架构设计的历史背景,给出架构设计的主要目的是为了解决软件系统复杂度带来的问题,并分析了一个简单复杂度的案例,希望对你有所帮助。


【星猿杂谈】:在这里我们共同探索科技新趋势,分享积累的点滴,从编程语言到系统架构,从人工智能到高性能计算,我们追求技术的进步,同时珍视分享的力量。欢迎关注我们,在技术的精彩世界中一起遨游,发现更多未知!文章来源地址https://www.toymoban.com/news/detail-812689.html

到了这里,关于架构篇03-为什么要做架构设计?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 说说为什么要做数据库拆分

    单体项目在构建之初,数据库的负载和数据量都不大,所以不需要对数据库做拆分,小型财务系统、文书系统、ERP系统、OA系统,用一个MySQL数据库实例基本就够用了。 就像《淘宝技术这十年》里面说到的,电商业务的数据量增长飞快,所以最开始的PHP+MySQL的架构已经不能满

    2024年02月08日
    浏览(40)
  • 为什么企业要做大规模敏捷?

    软件工程里一个重要的指标就是“可用的软件”,敏捷宣言里也同样告诉我们“工作的软件高于详尽的文档”,那“可用的软件”、“工作的软件”意味着什么呢?在我的理解里,可以经历用户 “千锤百炼”的软件就是一个“可用的软件”。曾经听到过这样的说法:“一个有

    2023年04月27日
    浏览(36)
  • 为什么要做数据可视化系统

    数据可视化系统在当今数字时代发挥着重要的作用,成为许多组织和企业的不可或缺的工具。随着信息爆炸式增长和数据处理的需求不断增加,数据可视化系统帮助人们更好地理解和分析数据,为决策提供重要支持。数聚股份将详细介绍为什么要做数据可视化系统,并探讨其

    2024年02月13日
    浏览(29)
  • 为什么要做黑盒测试?黑盒测试有什么作用?

    对于软件测试的从业者来说,黑盒测试是十分重要的测试方式,它可以弥补白盒测试检查不到的部分。可能刚刚入门的测试小白,对于为什么要做黑盒测试?黑盒测试有什么作用?仍然抱有很大的疑问。下面小编就来从黑盒测试的概念、作用和优点,带领大家全面认识黑盒测

    2024年02月05日
    浏览(38)
  • 伙伴云CEO戴志康:我们为什么要做伙伴云?

    分享嘉宾: 戴志康,伙伴云CEO 以下为演讲实录⬇⬇⬇ 01选择人更少的一条路,从B级走向A级 我一直想和大家交流一个话题,关于我们为什么要做伙伴云。既代表我自己,同时也代表我们团队的一些想法。 我是一个怀疑论者。大多数人公认正确的事情,就一定是正确的吗?这

    2024年02月16日
    浏览(31)
  • python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

    上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试。 接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的

    2024年02月10日
    浏览(45)
  • 企业为什么要做自动化测试?我们该如何学习自动化测试?

    作为一名大厂测试开发,编写自动化脚本,俨然成为一种必备的技能。 为什么要做自动化测试? 那企业或者是我们测试人员为什么要做自动化测试呢? 如果在前两年,可能10个测试员有6个都是做的功能测试,但随着测试技术的发展以及测试工作的深入,传统的手工测试已经

    2024年02月10日
    浏览(40)
  • 【软件工程_设计模式】——为什么要使用设计模式?

    什么是设计模式? 为什么要使用设计模式? 使用设计模式的原因如下: 提高 代码的可 读性和可维护性 :设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。熟悉设计模式的人应该能够很容易读懂运用设计模式编写的程序。 提高代码的 可

    2024年02月07日
    浏览(41)
  • 【二、自动化测试】为什么要做自动化测试?哪种项目适合做自动化?

    自动化测试是一种软件测试方法,通过编写和使用自动化脚本和工具,以自动执行测试用例并生成结果。 自动化旨在替代手动测试过程,提高测试效率和准确性。 自动化测试可以覆盖多种测试类型,包括功能测试、性能测试、安全测试等,以确保软件系统在各个方面的质量

    2024年02月02日
    浏览(42)
  • 为什么阿里人能够快速成长?看完他们 Java 架构进化笔记,我秒懂!

    0-1 年入门: Java 基础复盘 (面向对象+Java 的超类+Java 的反射机制+异常处理+集合+泛型+基础 IO 操作+多线程+网络编程+JDK 新特性) Web 编程初探 (Servlet+MySQL 数据库+商品管理系统实战) SSM 从入门到精通 (Spring+SpringMVC+Mybatis+商品管理系统实战-SSM 版) SpringBoot 快速上手 (Spr

    2023年04月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包