导读:理解架构这个词的意思是十分重要的。它可能被过度使用,并且使用在各种环境中。如果缺少一致的理解,将会有交流失败的风险。那么架构这个词到底是什么意思呢?

作者:大卫·D.克拉克(David D. Clark)

来源:大数据DT(ID:hzdashuju)

01 什么是架构?

架构是一个过程、一个结果和一门学科。

  • 作为一个过程,它涉及将组件与设计元素结合,以此来形成一个有目的的实体。

  • 作为一个结果,它描述了由其形式所定义的一系列实体。对于我们熟知的“哥特式大教堂”这种架构形式,它的特点是一系列公认的设计元素与方法,目的可能是构建一个礼拜场所,但“哥特式大教堂”实际上意味着更多。

  • 最后,作为一门学科,架构就是架构师接受训练要掌握的本领。计算机科学领域从设计物理实物的学科中借用了这个术语,例如建筑物和城市,其中包含广受认可的培训与认证过程。

架构的三个方面都适用于“真实的建筑”与计算机科学。

1. 作为一个过程

我的定义有两个重要的方面:将组件整合在一起并应用于某个目的。

  • 将组件整合在一起:这是计算机科学家在考虑模块、接口、依赖、分层、抽象以及组件复用等问题时所做的工作。这些都是设计模式,计算机科学家接受了相关的训练,在思量设计挑战时需要考虑这些设计模式。

  • 应用于某个目的:设计过程必须按照工件的预期目的来塑造,例如,是一所医院而不是一座监狱,是一个低功率处理器而不是超级计算机,是汽车中将刹车踏板挂在刹车上的网络而不是因特网。作为架构的一部分,设计师必须解决系统不能做什么(或者做得很好)与将要做什么。

    在计算机科学中,系统设计存在着一种危险,这是众所周知的,它被称为第二系统综合征,即首先构建一个或许把一些事做得很好的系统,然后再提出一个试图把所有事情都做得很好的替代方案的趋势。

2. 作为一个结果

在建筑设计实践中,设计通常会产生一份结果。也有一些例外,例如排房,其中一个设计会建造很多次,但大多数建筑物都只有一座。在描述结果时,架构这个术语通常意味着一类设计,以其最显著的特征为代表(例如飞拱)。这个术语适用于这个抽象类,尽管架构师必须在建筑团队接管之前将建筑描述到非常精细的程度。

当计算机科学家重新使用架构这个术语时,他们稍微重新定义了一下。关于因特网,有很多不同的网络都是基于同样的设计:我们称之为“因特网”的公共全球网络,属于企业、军队等的私有网络,以及金融网络等特殊用途的网络。

在这种环境下,架构一词仅描述所构建的部分内容,给定示例的大部分设计过程都发生在之后的环节中,可能由不同的组来描述。

3. 作为一门学科

“真正的”建筑师——那些设计楼房的人——去学校里学习这一行业。作为外行,了解他们的培养方式对于我们也是有教育意义的。架构(相对于结构工程)不是建立在基础科学与工程原理之上的设计学科。建筑师通常不关心结构工程等问题,并将这些留给别人。

当然,技术考虑可能需要尽早进入设计过程,因为建筑师要处理诸如能源效率或抗震等问题,但是建筑师主要是在设计过程中训练出来的。他们学的不是工程而是建筑。他们通过案例研究来学习,需要观察大量的建筑物,看它们有多适合(或不适合),看它们是否满足用户的需求,在视觉上是否有吸引力,如何处理设计权衡,等等。

在计算机科学中,我们往往希望设计能基于强大的工程基础、具有限制性的理论以及优先的设计选项等,但(至少在过去)系统架构的大部分业务都更类似于建筑师的业务(例如,从以前的设计中学习,问问什么运转良好、什么效果不佳,问问这个设计是否与目标相符合)。

我们在理论和实践方面对计算机科学家进行训练,但往往不赞成研究以前的设计,我们认为它们“不科学”或“未基于基本原理”。

我个人对试图使架构更加严谨而感到兴奋,但是不应该用“凭直觉”设计这样的短语来反对我们今天所做的事情。我们的学科是一门设计学科,就像建筑架构一样,我们应该努力超越它,而不是摒弃它。

因此,如果因特网的架构不是完整的规范,而只是该规范的一部分,那么架构中包含哪些内容呢?我们可以说说不包括什么。看看基于因特网技术的所有不同网络的例子,或者全球因特网的不同区域,试着发现它们的不同之处。我们看到它们在性能、弹性、对移动性的容忍、对安全性的关注等方面存在差异。

这个级别的设计决策构建在核心架构之上,但是没有被核心架构指定。那么,我们应该在这个核心架构中看到什么呢?

02 网络架构的要素

我确定了可以决定某个特定问题是否上升到架构级别的几个标准:对于系统的正常工作,是否需要就该问题达成一致;就该问题达成一致是否方便;该问题是否定义了系统的基本模块性或功能依赖;或者该问题随着时间的推移是稳定的这一点是否重要。

1. 对于系统的正常工作,我们必须一致同意的问题

例如,因特网架构是基于包的使用,以及假设包头总是具有相同的格式(不同的设计可能允许在不同的区域使用不同的格式,在这种情况下,架构可能会选择描述为所需的转换提供什么样的架构支持)。

另一个例子是,当我们第一次设计因特网时,认为设计依赖于单一的全球地址空间。现在很显然这种假设是不必要的,不需要就地址的统一含义达成全球一致。网络地址转换设备或“NAT箱”,允许因特网边缘的区域使用私有地址空间,并仅在数据包向外传输到公共因特网时才将这些地址转换为全局路由地址。

有趣的是,一旦因特网设计师意识到他们可以使用具有不同地址空间的区域来构建网络,就不需要急于扩展架构来对不相交地址空间是如何互连的提供任何支持或指导。

2. 便于达成一致的问题

我们没有要求应用使用域名系统(DNS),但由于基本上所有应用设计人员都使用它,因此它已经强制成为因特网的一部分,尽管DNS不是最初设计的一部分。类似地,尽管通信应用没有必要使用TCP,但是许多应用都依赖于它,以至于它也成为因特网的强制组成部分。

3. 系统的基本模块性

计算机科学使用模块这个词来描述系统的子组件:一个模块有一个特定的接口,通过这个接口可以连接到系统的其他部分,而接口下面的模块内部结构是隐藏的,不能从模块外部访问。

模块的设计人员通常会保持接口规范不变,因为其他模块可能依赖于该接口,但是可以自由更改模块的内部结构,因为这些是模块的私有结构。因特网协议(IP)的规范定义了三个模块接口。它定义了两层接口:服务接口(在其上构建更高级别的服务)和IP层下的技术接口。它还(隐式地和部分地)定义了AS接口:因特网中不同AS之间的接口。

服务接口是因特网的尽力而为包级的传送模型:如果端节点发送一个数据包,并在数据包中使用有效的目的地IP地址,就目前的网络能力而言,因特网的路由器将把数据包转发到由该IP地址定义的目的接口。服务接口隐藏了如何使用特定技术在因特网内提供通信路径的所有细节。

因此,这个服务接口定义了网络和端节点之间的抽象接口。该接口的技术细节依赖于用于连接到端节点的特定网络技术,并根据技术的具体情况而有所不同,因此这些细节不属于架构规范的一部分。

4. 功能依赖

架构的一个方面是明确设计的功能依赖。我将用因特网来说明这意味着什么。

因特网的基本操作很简单。路由器在后台计算路由表,这样它们就知道到因特网所有部分的路由。当收到数据包时,它们会查找最佳的路由,并将数据包发送到该路由上。虽然在因特网内有很多东西在运行,但在内核上,它所做的就是这个。因特网的正常运行必然取决于路由器的正常运行。

但是因特网还需要什么来提供服务呢?事实上,因特网的早期设计师试图限制使用的服务或要运行的组件的数量,以确保数据包流动。早期的设计目标如下:“如果有两台计算机挂到网络上,并且每台计算机都知道另一台计算机的地址,那么它们应该能够通信。不应当再需要其他任何东西”。

这种设计偏好可以表示为“最少功能依赖”的目标。一些互联网设计建议具有更多的功能依赖——它们依赖于更多的服务来启动和运行,从而使基本通信成功。在出错时,它们正在用(或许)更弱的弹性来换取功能。

5. 系统中被视为持久不变的方面

在像因特网这样的系统中,我们知道很多东西将会改变。事实上,变化、升级和替换系统某些方面的能力,是成功长寿的关键。

但是在某种程度上,有些方面看起来像是持久不变的,将它们指定为设计的一部分可以提供稳定的点,系统的其他部分可以围绕这些点向前演化。

03 总结:关于架构的思考

对于我所说的架构这个词,我已经有了一个基本的概念。在我看来,一个关键的原则是架构的极简性。在计算机科学的背景下,系统的架构不应该试图描述系统的每个方面。

这种架构的概念似乎与建筑物的架构有所不同。当楼房建筑师把设计图交给建造者时,规范就会完整到细节——不仅仅是形状和结构,还有电源插座的位置。

但是我不认为大部分决策是架构性的。就像我之前说的,建筑物的架构和像因特网这样的人工制品的架构之间的区别之一是,有很多网络是使用相同的因特网技术构建的,而不仅仅是一个。如果可以在不同的环境中使用因特网技术,则会有明显的好处:商业产品更便宜,也可能更成熟,几乎所有计算机系统都有相关的软件,等等。

然而,对于安全性、弹性以及其他方面,这些网络可能没有完全相同的要求,所以架构的力量不在于定义了如何构建网络(就像建筑规划描述如何建造楼房一样),而在于允许这些需求得到满足,或许在不同的环境中以不同的方式来满足这些需求。

改述一下爱因斯坦的话,我认为架构应该尽可能小,但不要过小。有人可能会说,正如我所描述的,因特网架构最基本的方面是其偏好极简性。考虑到这一观点,给定架构所要解决的需求,我们认为的网络系统架构的范围,应该只包括那些属于我在这里列出的框架内的那些方面。

关于作者:大卫·D. 克拉克(David D. Clark) ,麻省理工学院(MIT)计算机科学与人工智能实验室高级研究科学家。20世纪80年代曾担任因特网架构组主席,长期主持因特网的设计工作,以及未来互联网技术的研究工作。

本文摘编自《互联网的设计和演化》,经出版方授权发布。

延伸阅读《互联网的设计和演化》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:因特网设计师亲自执笔, “互联网之父”、图灵奖得主Vint Cerf强力推荐!如果给你一个机会从头开始设计互联网,你会怎么做?设计在一定程度上取决于品位,因特网这项设计品位如何?一系列不同的甚至相互冲突的需求如何形塑了今天的因特网?本书将带你找到答案!

划重点????

干货直达????

  • 65岁的编程语言重回Top 20,65岁的程序员还没退休吗?

  • 终于有人把准确率、精度、召回率、均方差和R²都讲明白了

  • 终于有人把Scrapy爬虫框架讲明白了

  • 编程语言哪家强?4种数据分析领域语言优缺点对比

更多精彩????

在公众号对话框输入以下关键词

查看更多优质内容!

PPT | 读书 | 书单 | 硬核 | 干货 讲明白 | 神操作

大数据 | 云计算 | 数据库 | Python | 爬虫 | 可视化

AI | 人工智能 | 机器学习 | 深度学习 | NLP

5G | 中台 | 用户画像 1024 | 数学 | 算法 数字孪生

据统计,99%的大咖都关注了这个公众号

????

什么是架构?网络架构中都有什么?终于有人讲明白了相关推荐

  1. 两种主流大数据系统架构的区别,终于有人讲明白了

    导读:从资源管理角度来看,当前的大数据系统架构主要有两种:一种是MPP数据库架构 ,另一种是Hadoop体系的分层架构.这两种架构各有优势和相应的适用场景.本文主要讲这两种架构的区别. 同样都可以处理 ...

  2. 大数据基础架构Hadoop,终于有人讲明白了

    导读:大数据正在成为经济社会发展的新的驱动力.随着云计算.移动互联网等网络新技术的应用和发展,社会信息化进程进入大数据时代,海量数据的产生与流转成为常态.而大数据技术也如雨后春笋般正在蓬勃发展中.Ha ...

  3. online游戏服务器架构--网络架构

    启动:父进程启动:子进程启动:网络架构. 每个父进程携带N个子进程,子进程负责处理业务逻辑和其它数据,而父进程只是将客户端的请求路由到各个子进程,路由的策略非常简单,父进程将请求包按照轮流的法则分发到 ...

  4. 架构是什么?网络架构有什么?终于有人说清楚了

    要如何理解架构这个词的?在某些时候它可能被过度使用,并且使用在各种环境中,如果缺少一致的理解,将会有交流失败的风险.那么架构这个词到底是什么意思呢? 01 什么是架构? 架构是一个过程.一个结果和一门 ...

  5. 终于有人把大数据架构讲明白了

    导读:如何存储.如何利用大规模的服务器集群处理计算才是大数据技术的核心. 作者:李智慧 来源:大数据DT(ID:hzdashuju) 大数据技术其实是分布式技术在数据处理领域的创新性应用,其本质和此前 ...

  6. 计算机网络之网络架构

    计算机网络之网络架构 网络架构 TCP/IP原理 网络架构 网络七层架构 物理层:主要定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流.这一层的数 ...

  7. 什么是架构?网络架构中都有什么?

    什么是架构?网络架构中都有什么? 01 什么是架构? 1. 作为一个过程 2. 作为一个结果 3. 作为一门学科 02 网络架构的要素 1. 对于系统的正常工作,我们必须一致同意的问题 2. 便于达成 ...

  8. 转载:IBM SNA:IBM 系统网络架构及其协议

    和 OSI 模型相对,系统网络架构(SNA)由 IBM 提出,也是最为流行的网络架构模型之一.虽然 SNA 模型现在已经过时,但它仍然得到了广泛的应用.SNA 的设计基于 IBM 大型机使用的主机 - ...

  9. BGP in the datacenter, 数据中心的BGP,数据中心网络架构,Clos网络架构

    数据中心的BGP 说明: 这是最近在学习<BGP in the datacenter>.由于原文是全英文.所以在学习过程中,利用谷歌翻译和网易翻译,再把翻译不通的地方,加上自己理解稍微改了 ...

最新文章

  1. mysql之日志和mysqlbinlog工具的使用
  2. 我理解的【旁路代理】
  3. 社区首款 OAM 可视化平台发布!关注点分离、用户友好、上手难度低
  4. 中国工业自动化行业需求现状及投资风险评估报告2022-2027年版
  5. 神策智能推荐 | 运营后台,你的智能分发“万能助手”
  6. Worklight学习-第一个Worlight项目
  7. system.setin_Java System类setIn()方法及示例
  8. Linux Note
  9. Qt工作笔记-对主事件循环的进一步认识
  10. python大盘点:全局变量、局部变量、类变量、实例变量
  11. AspectJWeaver
  12. vim 配置(ma6174 + YCM)
  13. Jmeter实战:零基础也能看懂的性能测试
  14. 使用kubeadm在CentOS上搭建Kubernetes1.14.3集群
  15. 不懂就问,苹果电脑格式化了能恢复数据吗?
  16. App Inventor 2 连接调试器的各种方式比较
  17. 详解ZStack高级功能--裸金属服务
  18. 基于51单片机HX711的电子秤称重计价proteus仿真程序设计
  19. java干嘛_java是什么(Java到底能干嘛?)
  20. SourceInsight使用技巧之更改背景色

热门文章

  1. canvas笔记-二次贝塞尔曲线与三次贝塞尔曲线的用法
  2. C++静态联编与动态联编
  3. C++远程dll注入到QQ聊天工具
  4. caffe linux 教程,Caffe 深度学习入门教程 - 安装配置Ubuntu14.04+CUDA7.5+Caffe+cuDNN_Linux教程_Linux公社-Linux系统门户网站...
  5. 计算机组成原理整机实验报告,计算机组成原理加器实验报告.doc
  6. 起点计算机网,《零起点计算机》网第5课.pdf
  7. wxpython控件绑定事件_wxPython事件处理
  8. python卸载pip_PIP安装和卸载包,pip
  9. python实现抢劵_用Python实现微信自动化抢红包,再也不用担心抢不到红包了
  10. Apaceh配置httpd-vhosts虚拟主机