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