
架构是什么系统与子系统系统泛指由一群有关联的个体组成根据某种规则运作能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。系统泛指由一群有关联的个体组成根据某种规则运作能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。模块与组件从逻辑的角度来拆分后得到的单元就是“模块”从物理的角度来拆分系统得到的单元就是“组件”划分模块的主要目的是职责分离划分组件的主要目的是单元复用。框架与架构软件框架Software Framework通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范也指为了实现某个软件组件规范时提供规范所要求之基础功能的软件产品。软件架构是指软件系统的“基础结构”创造这些基础结构的准则以及对这些结构的描述。单纯从定义的角度来看框架和架构的区别还是比较明显的框架关注的是“规范”架构 关注的是 “结构”。框架的英文是 Framework架构的英文是 Architecture。Spring MVC 的英文文档标题就是 “Web MVC Framework”。重新定义架构我们参考维基百科的定义将架构重新定义为软件架构指软件系统的顶层结构这个定义很简单但包含的信息很丰富基本上把系统、子系统、模块、组件、架构等概念都串起来了详细阐述如下。首先“系统由一群关联个体组成”这些“个体”可以是“子系统”“模块”“组件”等架构需要明确系统包含哪些“个体”。其次系统中的个体需要“根据某种规则”运作架构需要明确个体运作和协作的规则。第三维基百科的架构定义中用到了“基础结构”这个说法我们改为“顶层结构”可以更好地区分系统和子系统避免将系统架构和子系统架构混淆导致架构层次混乱。架构设计的目的常见误区因为架构很重要所以要做架构设计这是一句正确的废话架构很重要但架构为何重要呢例如不做架构设计系统就运行不起来吗其实不然, 很多朋友尤其是经历了创业公司的朋友会发现, 公司的初始产品没有架构设计, 大伙撸起袖子简单讨论一下就开始编码了, 根本没有正规的架构设计过程, 而且也许产品开发速度还更快, 上线后运行也还不错。例如做了架构设计就能提升开发效率吗也不尽然实际上有时候最简单的设计开发效率反而是最高的架构设计毕竟需要投入时间和人力这部分投入如果用来尽早编码项目也许会更快。例如设计良好的架构能促进业务发展吗好像有一定的道理例如设计高性能的架构能够让用户体验更好但反过来想我们照抄微信的架构业务就能达到微信的量级吗肯定不可能不要说达到微信的量级达到微信1/10的量级做梦都要笑醒了。不是每个系统都要做架构设计吗这其实是知其然不知其所以然, 系统确实要做架构设计, 但还是不知道为何要做架构设计, 反正大家都做架构设计, 所以做架构设计肯定没错。这样的架构师或设计师很容易走入生搬硬套业界其他公司已有架构的歧路美其名曰“参考”“微改进”。一旦强行引入其他公司架构很可能会出现架构水土不服运行起来很别扭等各种情况最后往往不得不削足适履或者不断重构甚至无奈推倒重来。公司流程要求系统开发过程中必须有架构设计与此答案类似的还有因为“架构师总要做点事情”所以要做架构设计其实都是舍本逐末。因为流程有规定所以要做架构设计因为架构师要做事所以要做架构设计。这都是很表面地看问题并没有真正理解为何要做架构设计而且很多需求并不一定要进行架构设计。如果认为架构师一定要找点事做流程一定要进行架构设计就会出现事实上不需要架构设计但形式上却继续去做架构设计不但浪费时间和人力还会拖慢整体的开发进度。为了高性能、高可用、可扩展所以要做架构设计能够给出这个答案说明已经有了一定的架构经历或基础毕竟确实很多架构设计都是冲着高性能、高可用等“高 XX”的目标去的。但往往持有这类观点的架构师和设计师会给项目带来巨大的灾难这绝不是危言耸听而是很多实际发生的事情。为何因为这类架构师或设计师不管三七二十一不管什么系统也 不管什么业务上来就要求“高性能、高可用、高扩展”结果就会出现架构设计复杂无比项目落地遥遥无期团队天天吵翻天等各种让人抓狂的现象费尽九牛二虎之力将系统上线却出现运行不够稳定经常出问题出了问题很难解决加个功能要改1个月等各种让人抓狂的事件。架构设计的真实目的架构设计的主要目的是为了解决复杂度带来的问题。复杂度来源高性能软件系统中高性能带来的复杂度主要体现在两方面一方面是单台计算机内部为了高性能带来的复杂度另一方面是多台计算机集群为了高性能带来的复杂度。高可用高可用指 “系统无中断地执行其功能” 的能力代表系统的可用性程度是进行系统设计时的准则之一。可扩展性可扩展性指系统为了应对将来需求变化而提供的一种扩展能力当有新的需求出现时系统不需要或仅需要少量修改就可以支持无须整个系统重构或重建。低成本低成本给架构设计带来的主要复杂度体现在往往只有“创新”才能达到低成本目标。这里的“创新”既包括开创一个全新的技术领域这个要求对绝大部分公司太高也包括引入新技术如果没有找到能够解决问题的新技术那么真的就需要自己创造新的技术。安全安全本身是一个庞大而又复杂的技术领域并且一旦出问题对业务和企业形象影响非常大从技术的角度来讲安全可以分为两类一类是功能上的安全另一类是架构上的安全。总结系统泛指由一群有关联的个体组成根据某种规则运作能完成个别元件不能单独完成的工作的群体。它的意思是“总体”“整体”或“联盟”。子系统也是由一群有关联的个体所组成的系统多半是更大系统中的一部分。软件模块Module是一套一致而互相紧密关联的软件组织。它分别包含了程序和数据结构两部分。软件组件定义为自包含的、可编程的、可重用的、与语言无关的软件单元软件组件可以很容易被用于组装应用程序中。软件框架Software Framework通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范也指为了实现某个软件组件规范时提供规范所要求之基础功能的软件产品。软件架构指软件系统的顶层结构。同一软件系统从不同的角度进行分解会得到不同的架构。架构设计的主要目的是为了解决软件系统复杂度带来的问题。主要的软件系统复杂度有高性能、高可用、可扩展、低成本、安全、规模几种。