当前位置: 首页 > 科技观察

“细腰”大战:技术架构的进化

时间:2023-03-14 16:09:03 科技观察

铭文:谁的外在表现形式灵活,谁就有好报——这就是进化的本质。——KevinKelly《失控》众所周知的互联网协议栈,给了我们一个深刻的“瘦腰”概念。但是这种架构是如何产生的呢?这是不可避免的吗?“细腰”架构在业务、技术、工程上给我们带来哪些启示?互联网新瘦腰结构在哪里?故事一:CPU指令集的航标战争处理器大战的历史一直沉睡在计算机历史的博物馆里,鲜有人提及。20多年前,处理器平台繁多,战争一触即发。首先是Intel的x86平台,从8086开始,然后是8088、80286、80386,再到Pentium等,这些被称为CISC(ComplexInstructionSetComputer)。战场的另一边是基于RISC的处理器、Apple产品、Cisco路由器和SunSparc工作站。这场战争的争论可以归结为:英特尔x86ISA是一团糟,有点怪异,难以使用,有时还有错误,但在芯片级提供了很多功能。另一方面,基于RISC的处理器具有更简单的ISA,将更多功能留给上层软件。二十多年过去了,战斗的温度已经消散,Intelx86ISA轻而易举地获胜。我们仍然记得Apple和Cisco的产品线从基于RISC的处理器转向x86平台;AMD首先开始制造具有x86“接口”的处理器,以便运行与英特尔处理器兼容的软件。获胜的x86ISA是什么?Intelx86ISA很乱,摩尔定律总是在一段时间内添加更多功能,而竞争的RISC处理器则保持非常干净,将更多功能留给上层软件应用程序。这样做的原因可能对大多数人来说是违反直觉的。事实上,在《硬件是新的软件》中,微软首席研究员AndrewBaumann总结了Intelx86cpu和ISA复杂度的增长,并以Intel在2015-2016年围绕软件安全向x86ISA新增12条指令为例,展示随着时间的推移,处理器的复杂性不断增加。虽然12条新指令听起来可能并不多,但这些特殊指令需要在CPU中创建新寄存器、新堆栈结构(包括听起来相当复杂的新影子堆栈)、新异常处理例程(用于中断)、更改内存页表格式等。这样做的主要目的是使开发人员能够停止信任软件的特定安全部分,并开始信任硬件(理论上)无法更改。我懂了。AndrewBaumann说:摩尔定律的放缓将使CPU更难销售:如果没有微架构改进,它们不会运行得更快或更节能,而且它们的核心数量与以前的cpu大致相同,而且价格和之前的cpu差不多。为什么有人会购买新的CPU?英特尔转向的一个原因是它的功能:如果一个新的CPU实现了一个重要的ISA扩展——比如,一个需要关键安全扩展的软件——消费者将有充分的理由升级。如果分层次看计算机系统栈,上层是应用程序,下层是实际的硬件,ISA是整个栈的细腰。AndrewBaumann在《硬件是新的软件》中总结道:“作为当今商品技术堆栈中最稳定的‘瘦腰’接口,x86ISA是许多系统的关键点。”理念:在处理复杂问题的过程中,细腰很重要。拥有最简单的细腰是降低任何系统复杂性的最重要的事情之一。在某些情况下,“精益”或简洁是工程师的个人品味问题,而不是业务问题。另一方面,复杂性是生存的基础,并不可怕。关键是要找到自己成长的“摩尔定律”,比如阿里的复杂,“双十一”。细腰总是意味着商品化,而商品化又意味着更低的利润。细腰的厂商要么学会在利润少的情况下生存并向其他领域扩张,要么学会拉宽腰围(比如英特尔的SGX)。加宽腰围意味着增加复杂性,主要是以意想不到的方式,这违背了设计师追求简约的品味。当软件吞噬世界时,请注意硬件和软件之间的界限,从更广泛的意义上讲,很难区分什么应该是硬件什么应该是软件。承担更多工作并向外界提供简单接口(以隐藏复杂性)的组件(人)将赢得未来。我们总是在加宽腰围。故事二:SQL语言的转折在互联网和个人电脑出现之前,当贝尔实验室的两位年轻科学家发明C语言时,他们意识到“计算机行业的成功在很大程度上取决于培养一批用户。不是受过训练的计算机专家。”“他们想要一种查询语言,既像英语一样易于阅读,又包括数据库管理和操作。一种对没有接受过正规数学或计算机编程培训的用户来说更易于使用的语言。”——1970年代初期,当IBMResearch的两位博士DonaldChamberlin和RaymondBoyce在思考关系数据库模型时,他们意识到查询语言将成为采用该模型的主要瓶颈,于是他们着手设计一种新的查询语言。所以,SQL于1974年首次面世。在接下来的几十年中,随着SystemR、Ingres、DB2、Oracle、SQLServer、PostgreSQL、MySQL(以及更多)等关系数据库接管软件行业,SQL成为卓越的语言用于与数据库交互,成为日益拥挤和竞争激烈的生态系统的通用语。然而,随着互联网的不断发展,软件社区发现关系数据库当时的ses无法处理新的数据规模。然后,两个新的互联网巨头取得了突破并开发了自己的非关系分布式数据库来应对这种冲击:Google的MapReduce(2004年论文)和Bigtable(2006年论文),以及Amazon的Dynamo(2007年论文发表)。这些开创性论文催生了更多的非关系数据库,包括Hadoop(基于MapReduce论文,2006年)、Cassandra(受Bigtable和Dynamo论文的启发,2008年)和MongoDB(2009年)。所有这一切都被称为NoSQL运动。NoSQL大放异彩,似乎是通向工程成功的捷径。此后不久,Babel语言效应开始发挥作用:每个NoSQL数据库都提供了自己独特的查询语言,这意味着需要学习更多的语言;将这些数据库连接到应用程序变得更加困难,导致大量脆弱的Glue代码;缺乏第三方生态系统,需要企业自行开发运营和可视化工具。通天塔的故事:那时,地球上的人们说着同一种语言。当人们离开东方时,他们来到了示拿之地。在那里,人们想方设法烧砖,以便他们可以建造一座城市和一座如此高的塔,以传播他们的名声,以免他们分散在世界各地。神来到世上,看到了这座城,看到了这座塔,说一群只会说一种语言的人,没有做不到的事;于是上帝打乱了他们的语言,让他们听不懂对方说了什么,于是他们分散到世界各地,城市也停止了建设。还记得图灵奖获得者MichaelStonebraker在数据库领域的文章《MapReduce: A major step backwards》吗?NoSQL语言的不成熟意味着在应用层面需要更多的复杂性。缺乏连接性也会导致非规范化,从而导致数据膨胀和僵化。反向摩擦使社区重新回到了SQL。首先出现的是Hadoop(后来的Spark)上的SQL接口,引领业界从“NoSQL”到“NotOnlySQL”。然后出现了NewSQL:一个完全支持SQL的新的可伸缩数据库。业界的焦点在谷歌身上。谷歌在2012年和2017年两次发表了Spanner论文(作者包括MapReduce的原作者),声称:虽然这些系统提供了数据库系统的一些好处,但它们缺乏许多应用程序开发人员经常依赖的传统数据库功能。一个关键的例子是健壮的查询语言,这意味着开发人员必须编写复杂的代码来处理和聚合应用程序中的数据。因此,我们决定将Spanner变成一个功能齐全的SQL系统,查询执行与Spanner的其他架构特性(例如强一致性和全局复制)紧密耦合。在本文的后面,他们进一步阐述了NoSQL到SQL转换的基本原理:Spanner的原始API提供了NoSQL方法,用于在单个表和交错表上进行点查找和范围扫描。虽然NoSQL方法提供了启动Spanner的简单途径,并且在简单的检索场景中仍然有用,但SQL在表达更复杂的数据访问模式和将计算推向数据方面提供了重要的附加值。该帖子还描述了SQL的采用并没有止步于Spanner,而是实际上传播到了Google的其他部分,其中多个系统共享一种通用的SQL语言:Spanner的SQL引擎共享一种通用的SQL语言,称为“标准SQL”,是兼容的与谷歌上的其他几个系统,包括F1和Dremel(以及其他)等内部系统,以及BigQuery等外部系统……对于谷歌内部的用户,这会减慢跨系统障碍的工作速度。针对Wrench数据库编写SQL的开发人员或数据分析师可以将他们对该语言的理解转移到Dremel,而不必担心语法、空值处理等方面的细微差异。这种方法的成功不言而喻。Spanner已经是包括AdWords和GooglePlay在内的主要谷歌系统的“真实来源”,“潜在的云客户对使用SQL非常感兴趣”。因此,有人质疑:谷歌这个老司机是不是把大数据行业带入了歧途?目前各大云提供商都提供流行的托管关系型数据库服务:例如AmazonRDS、GoogleCloudSQL、AzureforPostgreSQLDatabase,当然也有阿里巴巴的数据库系统。Hadoop、Spark和Kafka上的SQL接口也继续蓬勃发展。亚马逊CTO甚至表示:(兼容PostgreSQL和mysql)Aurora数据库产品是“AWS历史上增长最快的服务”。这段历史意味着SQL重新成为数据的通用接口。数据分析软件堆栈的细腰已经形成。理念:从巴别塔的失败中吸取教训。细腰都是语言接口,SQL比较明显。我们总是在加宽腰围。故事3:SystemCallPrimitivesLive这张地图描绘了FOSS与Microsoft帝国之间史诗般的斗争。在操作系统的战场上,《软件战争之后》的作者对Unix家族树的评价是:Unix和Linux没有打败Windows的最大原因是工作站厂商没有在软件上合作,因此不断地重新实现彼此的功能.80年代的“UNIX大战”是因为多家UNIX供应商(其产品均基于原始贝尔实验室UNIX的不同版本)产品略有不同,竞争激烈。Unix在商业大爆发之前流行了很多年,但其商业成功的关键是迅速涌现出一波低成本工作站,迅速将集中式小型机推向一边。在许多情况下,这些工作站运行的操作系统几乎与大型系统上的操作系统相同,但它们更小、更便宜,可以部署在单个员工的桌面上。一些供应商已经进入这个市场和相关的存储和计算服务器市场。问题是这些供应商中的每一个都有他们自己的Unix版本。所有的Unix变体可能都有某种共同的遗产,但是,当它们出现在已部署的系统上时,它们就完全不同了。类Unix系统的异构网络对系统管理员、开发人员和用户等提出了挑战。每种新系统类型都有自己的一组怪癖、错误和缺陷需要处理。随着各种Unix实现的分歧,它们变得越来越烦人。因此,许多组织试图在单一供应商上进行标准化,希望他们选择了正确的供应商。要么,要么他们转向廉价的新PC系统,而这些系统当时并没有以任何令人信服的方式运行Unix。但它们确实运行DOS(最终是Windows),一旦运行,它们就完全一样了。打包软件变得很容易获得,到20世纪90年代中期,越来越明显的是未来的桌面系统将不会运行Unix。令人沮丧的是,几乎所有Unix工作站供应商都在与Microsoft做交易,并宣布未来的工作站(和服务器)将运行WindowsNT。那是一段黑暗的时光。当Windows几乎无处不在时,Linux正试图拯救世界。但是,几乎从一开始,批评者就开始说Linux会像Unix一样严重碎片化。事情就是这样。在业务面前,Unix和Linux似乎没有办法吸取Babel的教训。操作系统的细腰被加宽了,但Unix哲学依然存在。经常提到的瘦腰模型的例子,一个是互联网协议栈,一个是Unix系统调用接口。正是Unix哲学使系统调用的原语保持活力:模块化规则:编写由干净的接口连接的简单组件。并行思考:大多数任务都包含可以并行运行的子任务。这也适用于用户交互。并行性节省了大量时间和挫折感。分层思考:层次结构允许跨嵌套元素统一应用任务和属性。这是一个鼓励分解和模块化的大创意。理念:简单。简单性的一个关键方面是正交性。在服务接口中,正交性意味着只有一种方法可以访问任何底层服务或资源。冗余特性增加了接口的复杂性,但并没有使其在逻辑上更强大。系统架构师了解界面设计中正交性的价值,并接受这种简单形式的设计标准。Unix系统调用接口中正交性的一个例子是将文件在目录之间的移动分解为三个操作:创建物理链接(使用link()),在目标位置创建链接的副本,然后删除原始链接链接(使用unlink())。()).这种复杂的文件移动操作是在用户级命令(mv)中实现的。这使得用户级文件移动操作很容易泛化,包括物理卷之间的移动(这需要复制内容),以及使用link()在同一卷内进行高效的文件共享。原始。人们经常注意到,操作系统和Internet支持的应用程序种类比其最初设计者所能预见的要多得多。设计人员创建一组通用的原语,以便这些目标应用程序位于原语支持的空间中。这个空间还包括许多其他应用程序,包括许多最初没有预见到的应用程序。抽象的。实施资源约束和信息隐藏。细腰层在其实现中提供资源抽象,防止应用程序直接访问它们。信息隐藏是通过隐藏模块的实现细节来实现模块化编程,使用户无需了解模块内部的复杂性。故事四:IP协议适者生存毫无疑问,互联网的瘦腰是网络层IP协议。虽然有很多文章宣称UDP、TCP、HTTP是新的瘦腰,但并没有得到广泛认可。计算机学会(SIGCOMM)数据通信特别兴趣小组2011年的一项研究表明,互联网细腰结构的出现遵循一种称为EvoArch的演化模型。在自然界中,共享同一生态系统的物种经常争夺资源,导致较弱的竞争者灭绝。互联网架构的演变也发生了类似的事情:随着新协议在不同层的创建,网络结构发生了变化,现有协议由于与同一层其他协议的竞争而被删除。在分组交换网络的发展过程中,开发了许多不同的协议(或协议栈)。随着时间的推移,所有这些协议都被放弃,取而代之的是IP堆栈。例如BanyanVines有自己的基于IP协议的协议栈,称为VIP(VinesInternetProtocol),NovellNetWare也有自己的基于IPX协议的协议栈,称为IPX。其他标准化组织也创建了自己的标准协议族,例如国际电信联盟(InternationalTelecommunicationsUnion,ITU)就建立了一套用于无连接模式网络服务(ConnectionlessModeNetworkService,CLNS)的协议族。为什么这些协议套件会半途而废?因为其中一些是专有的,许多政府和大型组织出于各种原因拒绝了分组交换网络中的专有解决方案。专有协议通常由一小群人开发和维护,通常很少考虑。基于标准的协议可能更复杂,但它们也往往由更有经验的工程师开发和维护。一段时间以来,基于CLNS的协议栈一直是一个有力的竞争者,但它从未真正在全球互联网上流行起来,而全球互联网正在成为当时的主要经济力量。还有一些具体的技术原因,比如CLNS没有给line编号,而是给hosts编号。因此,可达性信息的聚合在许多方面受到限制。——《计算机网络:问题与解决方案》EvoArch的研究指出:上半身细腰变宽,竞争却生死存亡。文件传输协议(FTP)和HTTP提供的服务在特定于应用程序的层中重叠。当HTTP对其自身的高级产品(例如网络浏览器等应用程序)变得更有价值时,FTP消失了。细腰的每一个底层模块都是必不可少的。对网络来说,主要原因可能是这些协议模块贴近硬件,迭代周期长。没有一种协议能够占据绝对的主导地位,因此它们长期并存。细腰部分显得古朴有力。这些协议被称为进化核心,很难做出重大改变。竞争必然导致细腰,保持细腰多样性的一个建议是在设计服务和功能时不要重叠,避免竞争。最好的交易不一定能赢得竞争。EvoArch的研究表明,即使未来的互联网架构最初不是以腰形构建的,但随着它们的发展,它们可能会演变成腰形。理念:自由软件在复杂环境中运行良好。也许根本没有人了解大局,但进化不需要全局的了解,它只需要局部的小改进和开放的市场(“适者生存”)。-LinusTorvalds进化的结果,细腰在协议栈中慢慢向上移动。良好的细腰设计带来互操作性。纤细的腰部结构提供部署扩展性。保持较低级别的通用性,以便最有效地满足较高级别的特定要求。互联网新细腰结构路在何方?IP成为互联网协议的细腰后,业界有两股力量在推动细腰结构的演进。首先是社区推动整个网络协议栈瘦腰。二是NDN推动IP瘦腰向内容瘦腰转变。IPFS是一个雄心勃勃的项目,融合了NDN、Git、BitTorrent、IPFS、Tahoe-LAFS、SFS等多种思想,旨在取代HTTP构建新的互联网瘦腰。IPFS协议的腰部是一个称为星际关联数据(IPLD)的数据结构。简单来说,IPLD将传统的Posix语义文件目录树映射成不同节点上的DAG图,称为IPFSunixfs。IPFSunixfs使用可插入的数据分片算法对具有传统posix语义的文件进行分片。传统posix语义的文件是按字节顺序存储的,而IPFSunixfs是基于分片的有向无环图。IPFSunixfs的最小单位是切片。这些切片称为叶或数据切片。为了构造有向无环图,需要引入中间文件对象。这些中间对象通过一定的拓扑结构散列成一个根CID。IPFSunixfs构建schema数据存储的方法称为IPLD,即星际链数据,也是IPFS内容寻址的基础。通过在互联网的网络结构上映射IPLD等数据结构,IPFS具备了星际互联的能力。协议越来越胖,应用越来越瘦,Web正在向Web3迈进。IPFS与区块链(Filecoin)一起,正在成为Web3的基础设施。分布式、模块化、边缘增长、元变化、...IPFS实践的许多哲学都需要IPFS本身的证明。我们拭目以待,热切期待报道。混沌和随机是两种不同的东西,混沌中有秩序。—凯文·凯利《失控》