引言
1.个体和系统
凯文·凯利在他的《失控》一书中提到了一个非常有意思的概念——涌现,简单来说,就是众多个体的集合会涌现出超越个体特征的某些高级的特征。例如,通过把个体的计算机连接到一个网络,涌现出了互联网这个新兴事物,深刻地改变了我们生活的方方面面。
谷歌通过搜索引擎连接了所有的互联网内容,成为互联网事实上的入口;腾讯通过社交软件连接了人与人,改变了我们的社交习惯;亚马逊和阿里巴巴通过电商平台连接了人与商品,改变了我们的购物方式。
AWS(Amazon Web Service,亚马逊云计算服务)通过大规模的云计算数据中心改变了互联网和IT基础设施。云计算不仅仅重构着互联网技术生态,而且持续推动着整个传统行业逐渐向更高阶的产业互联网演进。物联网通过连接无数的传感器和智能化设备,排行出了智慧家庭、智慧工厂、智慧城市。人工智能通过更加复杂,更具深度的神经网络算法及更多大数据的训练,涌现出了智能,帮助我们做部分决策。
无数个体融汇成系统,个体和系统如此不同却又相互关联。我们在研究宏观系统的时候,需要考虑微观个体的特点;同时,我们在研究微观个体的时候,也需要考虑宏观系统的需求。
互联网公司运营着能够支持数以亿计用户的云系统,需要考虑更宏观系统的事情。云计算公司服务成千上万有互联网应用需求的公司,同时考虑到不同云计算厂家的个性化业务,由此出现了很多不同的硬件需求。但传统的IC公司距离市场和用户太远,并且自身技术和商业策略不十分完善,无法完全满足这些硬件需求。
2.内涵和外延
服务器是数据中心的基本节点,通过不同层级的交换机把服务器连接到一起,从而构成一个网络。在这个网络中,单个服务器就是一个基本的系统,它不仅包含了芯片、主板、板卡、电源及机箱等硬件,也包含了运行于硬件之上的软件。此外,一个基本的系统还包括服务于不同场景的各种算法和策略,以及需要进行处理和存储的数据等。
如果我们把硬件、软件、算法、数据等比作一个点,把硬件、软件、算法和数据连接到一起所组成的系统比作一条线,那么组成互联网业务的服务器集群则构成一张网,一个宏系统。进一步而言,数据中心多种业务交互共存的体系则是多种宏系统的叠加。我们要考虑的不仅仅是网内节点之间的相互影响,还要考虑不同网之间跨网的相互影响。
例如,数据中心规模非常庞大,假设单个服务器每天有万分之一的故障率,那么整个数据中心每天会有数百起故障发生,硬件层面的稳定性和高可用设计则是解决这一问题的关键。再如,AWS当前有400多万台(估算,可能还在动态增加中)服务器,在虚拟化的支持下形成了数千万个计算节点,如果要把这千万级的节点划分到数以十万计的VPC里,那么不仅要考虑跨VPC、跨域访问的问题,还要考虑VPC动态变更的问题,千万级服务器动态虚拟网络系统的运维管理将是一个巨大的挑战。
一旦和宏观的规模相联系,需求就不再是简单个体系统内涵的业务场景,还会包括个体系统的外延约束,这就需要在更宏观的高度系统性地思考业务场景,并落实到个体系统,以及“线”“点”的设计中。
3.简单和复杂
“产品设计要学会做减法,给用户极致的简单”。在如何做减法这一问题上,需要进行很多的思考和权衡。从技术的角度来分析,我们为用户提供的产品越简单,产品背后所隐藏的技术细节就会越复杂。例如,对于漂浮在大海中的冰山,用户所能看到的只是海面上的一个小冰尖(交互接口),看不到海面以下冰山的面貌(技术实现)。如果我们为用户提供的产品功能丰富,并集多种技术于一体,那么我们需要考虑如何将这些复杂功能和技术融合成一个整体,同时为上层用户提供足够简单的接口来进行访问。
我们通过分层的纵向划分,以及同层不同组件的横向划分,逐个层次、组件地把复杂的功能实现封装在内部,把对外实现的功能接口尽可能地简单化。每一层依靠下层提供的服务接口来实现自己的功能,同时为上层提供服务接口。每个组件通过与其他组件进行通信来实现自身功能的处理,以及与其他组件的协作。
分层及分组件需要在整个系统层次规划,不仅要考虑与上下层间、左右模块间接口的交互,还要考虑某个功能放置在某个层的合理性,更要全面地考虑整个系统的功能划分,避免造成不必要的功能浪费或缺失。如何定义分层、分组件的功能划分,封装层级、组件的具体功能实现,提供哪些足够简洁的交互接口,是系统设计关键的价值所在。
简单和复杂既相互矛盾又和谐统一。云计算为用户呈现出一个分层的产品体系,基于硬件基础设施,支撑IaaS、PaaS及SaaS的上层服务。每一层使用下一层不同组件提供的服务,并与同一层的其他服务协作,共同为上一层的服务提供支持。
4.开放和封闭
在谷歌的Android生态里,系统、硬件、应用、分发都是完全开放的。虽然Android起步晚于苹果的iOS,但它快速地占领了智能手机端绝大部分市场份额。除了应用,iOS生态中的系统、硬件及分发完全掌控在苹果自己手里,虽然市场份额不占优势,但苹果获取了整个智能手机市场的绝大部分利润。
回顾半导体产业的发展历史。第一阶段是一个封闭的阶段,以英特尔、TI为代表的半导体公司自己设计并制造芯片,这一阶段的半导体产业是一种高门槛产业。之后,TSMC扛起了开放的大旗,创建了只做生产不涉足设计的Foundry模式,开启了半导体产业的第二阶段。以TSMC的创立为标志,大量Fabless如雨后春笋般诞生,典型Fabless如Qualcomm、NVIDIA、MTK等。
如今,互联网云计算正进入一个新的时代,大型互联网公司开始涉足芯片领域。例如,谷歌的TPU,亚马逊的NITRO、Graviton、Inferentia,华为的鲲鹏、昇腾,阿里的含光800 AI芯片等。
互联网云计算公司开始整合软硬件设计整体方案,并逐渐形成了各自封闭的体系,以此来获取更大的差异化价值。就像苹果在智能手机领域一样,在互联网云计算领域,除了面向用户的接口是标准化、开放的,隐藏在用户接口软硬件设计却又是各自封闭的。
5.快与慢
“天下武功,唯快不破”用来形容互联网的发展非常贴切。微信还处于研发阶段的时候,在腾讯内部要跟其他团队抢机会,在外部要跟其他很多类似的社交软件竞争。2011年1月,微信正式发布,只允许用户发送文本和照片;2011年5月,微信推出了“语音消息”;2011年7月,微信增加了基于位置的服务“附近的人”“漂流瓶”和“摇一摇”功能;2012年3月,微信用户总数突破1亿大关,距离微信第一版推出仅433天。
“重剑无锋,大巧若工”用来形容互联网的发展同样非常有道理。英特尔在1971年发布了第一款处理器4004,20世纪80年代,随着PC的爆发,英特尔成了IT行业的基石,50年持续不断的投入,推动着IT行业迅猛发展。华为“数十年如一日”聚焦于通信领域,积跬步以至千里,逐步领先全球。
在被称为“币圈”的各种虚拟币圈子里,有“币圈一天,世间一年”的说法,这是当前让慢变快的极致典范。各种虚拟币单价的涨跌不仅快速,而且幅度惊人。“币圈”超快的节奏剧烈影响着矿机市场的技术发展。各家矿场和矿工们为了抢得先机,获取更多的利润,以超快节奏进行着矿机的升级换代。挖矿平台从CPU、GPU到FPGA,再到ASIC,仅仅经历了3年多的时间。一个性能领先的ASIC矿机型号的保鲜期只有半年,半年后这种型号的ASIC矿机基本上就无法赚到钱了,需要换用更高性能的ASIC矿机。
云计算需要快与慢的交融。互联网软件要足够灵活,能够快速迭代优化;底层硬件要足够高效,逐步加速和卸载系统的功能。软件具有灵活性,性能虽“慢”,却“快”速迭代;硬件具有很高的执行效率,性能虽“快”,开发却“慢”。
6.通用和专用
听到通用,我们通常想到的是CPU和软件,平台唾手可得,开发简单灵活,但CPU和软件的性能相对较低,能效比也较低;听到专用,我们通常想到的是基于FPGA或ASIC的定制硬件,它们的软硬件开发门槛都很高,但其性能更加强劲,能效比也更高。
通用CPU因其具有灵活性、平台化的特点,不仅覆盖领域非常广泛,而且若要在新兴领域快速实现想法,通用CPU也是首选平台。通用CPU存在于我们生活和工作的方方面面,比如,云端的服务器、办公用的计算机和笔记本电脑,以及我们的智能手机终端,它们的操作系统和上层应用都运行在通用的CPU上。
专用的FPGA或ASIC的软硬件开发门槛都特别高。当一个领域逐步走向成熟并具有一定规模,需要更加快速、更加庞大的计算能力时,通常会开发专用的FPGA或ASIC来代替CPU。定制的FPGA或ASIC同样舞台宽广。例如,移动通信基带基站侧因为规模的原因通常使用FPGA多于ASIC,而终端侧功耗敏感且规模庞大所以更多地使用基带ASIC单元。又如,在人工智能领域,因为算法复杂,计算密集,所以基于FPGA或ASIC的方案也层出不穷。再如,区块链领域激烈而快速地完成了从CPU到ASIC的过渡。
没有绝对的通用,也没有绝对的专用。通用的CPU加入了扩展指令的协处理器(如英特尔的AVX,ARM的NEON);专用的FPGA或ASIC也在向通用的方向回调(如这些年流行的DSA架构,用于网络包处理软件可编程的PISA架构);GPU、DSP、ISP等处理器则处于通用和专用之间。NVIDIA提供了基于GPU的编程框架CUDA,CUDA封装了GPU的很多细节,提供类似CPU平台的编程友好性,并针对很多特定领域开发了功能丰富且强大的函数库,使得GPU得到了广泛应用。
通用和专用是手段不是目的。在选择通用或专用的计算平台时,不仅需要考虑性能和开发门槛,还需要考虑其他很多因素的综合影响。随着系统规模越来越庞大,通用和专用的界限也越来越模糊,两者互相学习和借鉴,尽管如此,系统评价的标准只有一个:更优综合性能的同时,以求更低的综合成本。
7.集中与分布
在IC领域,SoC(System on Chip,片上系统)和NoC(Network on Chip,片上网络)的发展趋势是典型的集中式单系统设计,如智能手机芯片集成了应用处理器、通信基带、无线Wi-Fi、GPU、ISP及AI处理器等。但在一些功耗、成本敏感的场合(如物联网场景),节点只完成非常简单的功能(如数据采集),而把数据传输到云端处理、存储及分析、决策,把决策后的指令下发到终端执行,终端节点只构成系统的“触角”,完整的系统是由很多简单的微小系统组成的。
云计算通过超大规模的数据中心,集中为用户提供服务,数据的处理和存储主要集中在数据中心各种形态的服务器中。电商App,本地终端的主要功能是浏览商品、下单及支付等;对服务器端而言,同一时间会有数以千万计的访问量,这些访问的处理都需要在庞大的云端后台完成。但是,集中式的云计算服务无法覆盖所有场景,如自动驾驶需要数据的快速分析并决策执行。随着数据量的快速增加,集中式的云计算逐渐无法满足大数据量的处理需求,于是边缘计算开始流行。
在数据中心内部,计算通常都是在CPU执行的,我们通常称之为集中式的以计算为核心(Compute Centric)。CPU性能提升速度逐渐放缓,而数据量还在大幅度增加,为了克服大数据处理分析面临的难题,不得不将集中式的以计算为核心转换成分布式的以数据为核心(Data Centric)。于是出现了很多新的技术架构,用于卸载和加速各种原本在CPU中的工作任务。对数据的处理也更加靠近数据存储或传输侧,大量的计算分散在靠近数据的地方,减轻了主机CPU的压力。
以计算为核心,数据量会越来越大,使得存储的分层也越来越多。但大数据量的处理会使得数据局部性失效,存储分层的作用大打折扣,整个体系结构越来越复杂,CPU越来越不堪重负。从数据中心整个系统的层次角度来看,以数据为核心,用效率或性能更高的加速单元分散在靠近数据的地方完成数据的大部分处理,是重要的趋势。
8.量变和质变
以前的互联网系统规模都不大,只有几十台或几百台服务器,在虚拟化的支持下可以形成数千台的服务器,这在以前已经算是一个很大的系统了。随着互联网业务的急剧增加,出现了很多超级系统。例如,阿里巴巴运营着规模十分庞大的电子商务平台,包括C2C零售市场淘宝、B2C市场天猫等在线市场,服务超过6亿活跃消费者。
而云计算更是将规模的问题放大到了极致。因为云计算要服务成千上万的互联网用户,每个用户都会有一个或多个互联网系统。AWS现已在全球22个地理区域内运营着69个可用区,以每个可用区拥有5万台服务器估算,AWS大概拥有400万台服务器,这些服务器用于为全球用户提供云计算服务。
当一个互联网系统规模较小(几百台服务器)的时候,只能采用通用服务器。如今,许多云计算厂家都拥有数百万台服务器为用户提供上百种产品服务,应用于各种不同的服务场景。但从底层技术来看,这些服务场景会归约于比较集中的一些软硬件功能集,因此,在规模和特定场景的推动下,非常有必要进行针对性的软硬件优化。
随着云计算的不断发展,云计算(特别是IaaS层)的产品服务越来越趋于成熟,云计算厂家的服务器规模越来越大,面向特定场景的产品和服务迫切需要进行深层次的软硬件重构,同时需要为产品服务定制优化软硬件,以此来提升软硬件性能并且降低成本。
9.软件和硬件
通常而言,运行于CPU、GPU等平台的程序为软件,而作为载体的CPU、GPU等平台则为硬件,这跟“某个任务软件实现,某个任务硬件加速”有一些区别。“某个任务CPU软件实现”指的是整个任务都基于CPU指令的程序实现,完全运行在CPU上。“某个任务的硬件加速”指的则是把任务的关键部分运行在一个硬件加速器上,CPU主要承担简单的、不需要太多性能的任务部分(如数据交互和加速器运行控制等)。通过硬件加速可以进一步提升任务处理的性能,同时可以提升运行效率和降低综合成本。
通常,软件开发和硬件开发是割裂的两个部分。例如,英特尔和AMD等CPU厂家定义好了指令集体系结构,并专注于某个具体CPU的微架构和具体实现,而软件开发工程师则基于CPU上的各种开发环境开发自己的软件程序。再如,对于芯片厂家研发的SoC,虽然系统架构师会做好它的软硬件规划,但它依然和用户的业务场景在细节上有很大的差别。芯片厂家为开发者提供SoC芯片、相关的驱动程序及参考设计等,开发者基于这些已有的框架平台开发自己需要的上层业务功能。硬件平台是“条条框框”,软件开发只能在这些“条条框框”的范围内发挥而无法跳出这些“条条框框”,也不能自己定义“条条框框”,更难做到优雅地与“条条框框”共舞。
“软件定义硬件”代表了一种趋势:要站在系统层次主动定义个体的硬件。但“软件定义硬件”更多地强调系统,容易忽略个体的特点。站在系统层面可以“看得更远”,代表了宏观的整体思考,能够更好地统筹资源、定义系统功能。站在个体层面,个体是本源,代表了事物本质的特征。事物受客观规律的约束,具有特定的发展规律。
软件和硬件融合更好地协调了系统与个体的关系。站在系统的角度既可以更好地定义硬件,也可以更好地定义驾驭硬件的软件,没有既定“条条框框”的约束,有的只是各种各样软件和硬件的“积木”。我们可能需要重新设计或改造一些“积木”,与已有的“积木”配合,极其容易地搭建属于自己的系统。在这个系统里,软件里面可能会包含硬件,硬件里面也可能会包含软件,软件和硬件深度融合,密不可分,最终实现功能强大、深度优化、可持续快速迭代的系统平台。