`
superhj1987
  • 浏览: 205640 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

谈谈系统架构这个东西

 
阅读更多

架构这个词在很多人看来都是很高大上的一个东西。事实上,搞架构的这些人却也都是些大神,至少都是在这个领域浸淫N久的专家级人物。现在很火的全栈工程师这个概念,就是架构师的另一种表现形式。  

之于架构,其含义无非是从技术细节跳出来自上而下宏观地看待系统的一个思维,就好比建筑设计一样。架构师的角色和建筑设计师在某种意义上是相同的。在微博上看到蔡学镛分享过这么一个架构设计流程的图,从中或多或少能看出架构设计一个大概的流程。

首当其冲的,肯定是需要对整个系统的业务进行拆分,进行业务设计,目的就是要捋清楚系统是干什么的,能提供什么功能,对系统的需求要做到详尽的分析和考虑。不过这部分,在我参与过的一些项目看来,尤其是对现在普遍使用的敏捷开发流程来说,无需考虑的太面面俱到,但至少不能太窄或者偏离正轨,后续的开发过程会不断的反馈回来进行调整。  

接下来,系统的业务明确之后,交互设计和领域建模便可以同时执行。当然,这里我是觉得交互设计和架构师是没啥关系的,顶多就是两者要相辅相成。而领域建模这个就显得很重要了。领域建模是业务设计的主要逻辑,把现实中的业务转化成抽象的对象,这个确实是能力的体现了。我觉得这一部分很多出色的架构师相比其他人突出的一个很关键的地方。  

技术模块设计则是在理解了系统的业务需求之后,对整体的一个技术框架上的设计。这里对于技术架构,我一直有一个分不太清楚的东西,就是软件架构和系统架构。说到底,这两者都是软件层面的含义,所不同的是前者到了代码层面,而系统架构则是到了软件层面。软件架构是位于系统架构之上的。一个系统,使用了Spring、Hibernater然后用了MVC设计模式,这就是软件架构;一个系统分成负载均衡模块、Link模块、队列模块、数据模块、推送模块等等则就是系统架构。再往下就应该是部署架构了,比如系统部署了几个结点、结点之间的关系、网络的规划结构、系统的高可用、可扩展等等。当然对于一个系统来说,数据的设计是可以拿出来重点进行的,毕竟对于互联网应用来说,数据 is all,系统的很多性能、效率问题是和数据的存储设计有密切关系的。  

到最后,业务之上的这些设计会反作用于业务,将系统的关键点反馈回来,从而对业务进行调整,进而再推进整个架构的流程。现在很火的敏捷开发,某种角度看来就是一个不断迭代、反馈的过程,是传统架构设计的一种演化形式。

 

谈到架构,那么如何才能具有架构能力呢?借鉴在知乎上看到一个回答:

  •  视野开阔,知道可以直接用哪个开源项目来满足这样那样的需求。多数时候其实我们并不需要重复造轮子。视野窄的架构师会放着捷径不走,不断让团队重复造轮子,直至把项目拖死。
  • 精通设计模式,但又不泛用。不设计过度,不在各种细节问题上需求蔓延。所有架构设计都是为了满足产品需求的,不满足需求或者过度设计都是菜鸟行为。
  • 把系统拆分成多个子系统或模块,模块之间尽量松耦合,使得原先只能串行的开发任务,可以并行开展,也就是说良好的设计可以通过投入更多人力来缩短工期。反之拙劣的设计需要一个人维护一大坨代码,无法通过加人并行开发来缩短工期。
  • 能清楚地知道系统的瓶颈在什么地方,不断地定位技术难度、研发进度、性能、内存等各方面的瓶颈,不断调整骨干力量解决瓶颈,在风险爆发之前就消除隐患。
  • 行业经验带来的直觉和预见性,可以预先需求可能产生怎样的变化,提前把可扩展性、后向兼容性设计好。但仍然不要过度设计 

以上对架构的一些理解,很多地方自认还是有点迷糊。在进行系统设计的时候,也经常摸不着头脑,把不同层次的东西混为一谈。记得蔡学镛大神之前还分享过一张图片,对架构讲的挺透彻的。不明白的时候看看这个,会有种茅塞顿开的感觉。



  

  • 大小: 62.8 KB
  • 大小: 693.6 KB
14
1
分享到:
评论
7 楼 LinApex 2014-06-05  
这个好屌啊,必须要学习,深刻研究
6 楼 Aillen0209 2014-06-05  
很受用,学习了。。。
5 楼 superhj1987 2014-06-05  
freezingsky 写道
我又仔细看了一次,发现说得都太泛了,如果有专门的y文章来说的话,就更好了!

嗯 确实太泛 很多地方其实我也在思索怎么讲出来比较好  
4 楼 freezingsky 2014-06-05  
我又仔细看了一次,发现说得都太泛了,如果有专门的y文章来说的话,就更好了!
3 楼 freezingsky 2014-06-05  
难得好文!
2 楼 啦登2010 2014-06-05  
  学习了。。。
1 楼 faraway 2014-06-05  
5个观察角度这个很是受用,谢谢

相关推荐

    谈谈硬件工程师要学习的东西.doc

    要成为一个优秀的硬件工程师,需要对系统整体性的把握和对已有电路的理解,需要具备电路的调试能力和审图能力,需要能够设计出一个在本钱和性能上更加优秀的产品。 七、硬件工程师需要学习的知识点 硬件工程师需要...

    我想谈谈关于计算机综合考试复习的感受和建议

    另外特别是要多看看同等学历的辅导教材和计算机网络、系统结构新大纲及样卷解答,对于网络和系统结构的重点概念要背熟,对于基础性的概念要弄清楚,这对于简答和填空很重要,计算题主要做典型的题型。特别是系统结构...

    编码 源代码 图形图像

    标题中的“编码、源代码、图形图像”这三个关键词揭示了我们即将探讨的IT主题:编程、软件开发以及图像处理技术。这些是计算机科学和技术领域的核心组成部分。 首先,让我们从“编码”开始。编码,或者说是编程,是...

    算法导论中文版

    就是要把我们大学所学的离散数学,算法与数据结构,操作系统,计算机体系结构,编译原理 等课程学好,对计算机的体系,CPU本身,操作系统内核,系统平台,面向对象编程,程序的性能等要有深层次的掌握。 初学者可能体会不到...

    C#微软培训资料

    <<page 1>> page begin==================== 目 目目 目 录 录录 ... 2.1 .NET 结构.12 ...第三章 编写第一个应用程序 .20 ... 17.1 .Net 框架结构提供的 I/O 方式 .215 ...这一天 微软公司正式推出了其下一代...

    Visual C++技术内幕(第四版)配套光盘

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在...

    snowpack-angular:所有东西Snowpack&Angular

    本文将深入探讨这个组合如何工作,以及如何利用它们的优势来提升开发效率。 首先,让我们了解Snowpack。Snowpack是一个现代化的Web开发构建工具,它的核心理念是“按需编译”,即在开发过程中只编译被引用的模块,...

    Visual C++技术内幕(第四版).part4.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    Visual C++技术内幕(第四版).part1.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    Visual C++技术内幕(第四版).part2.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    Visual C++技术内幕(第四版).part3.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    Visual C++技术内幕(第四版).part5.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    Visual C++技术内幕(第四版).part6.rar

    而且我也时常听到有人在骂MFC是个烂东西,从这个角度来看,我能理解他的心情。 MFC的代码已成事实,如果我们能够避免它的缺点,用好MFC还是可能的。我们仍然能够高效率地开发出Windows应用来,程序的运行效率也在可...

    TilesThing:带有东西的 2D 平铺游戏

    下面我们将深入探讨这个项目的核心特点和实现技术。 首先,我们关注的是“游戏级别格式”。在2D平铺游戏中,关卡通常是由一系列可重复使用的图形(即“瓷砖”)拼接而成的。游戏级别格式定义了如何存储这些瓷砖数据...

    spring-data:学习Spring数据,Flyway DB迁移和其他一些东西

    《Spring数据、Flyway DB迁移与MapStruct:深入...这三者结合,能构建出一个强大且易于维护的数据驱动的Java应用。在实际项目中,理解并熟练运用这些技术,无疑会提升开发效率,同时也能提升系统的稳定性和可扩展性。

    在线matlab代码格式化-the-adventure-journey-of-a-programming-learner:一位土木专业编程爱好

    后来大三暑假的时候,有幸与大学结构力学老师一起完成了一个MATLAB程序(当时觉得自己做了一个高大上的东西,现在看来,只是通过程序实现了参数的可视化输入,同时生成特定格式的数据文件以被主计算程序调用。...

Global site tag (gtag.js) - Google Analytics