可以看见,上述概念都是随着技术的发展而不断创造的。技术的发展与需求的发展相伴相生,新的需求促进新的技术,新的技术解决新的问题,问题的解决又催生新的需求,如此往复。那么,新的问题有什么特点呢?或者说与旧的问题有什么本质区别?显然,新的问题总是比旧的问题更复杂,更难以解决。技术的演进,就是随着这些问题的不断解决而更新、发展的。
这些技术虽然涉及不同领域,但是我们还是会发现共同点,即它们都属于ICT(即信息通信)范围。为了更好的将它们串起来,我们看看ICT的架构本质。个人认为,无论涉及范围多么庞大、实现细节多么复杂,就如ICT三个字母所概括的,本质上都是信息的处理和传输。因此,抽象到极简视图,本质上都是节点连接中心的架构。除了区块链(其实区块链也不是绝对的无中心,是否有中心,取决于实现方式。技术上和协议中并无去中心要求,实现上是可以利用一些设备做相对中心的),现有各类系统,大部分都是属于有中心结构的系统,各类问题也主要都是通过有中心的结构来系统化解决的。所以,ICT的架构本质上就是如下图的外围节点与中心通过网络连接的架构。
文章图片
下面我们所有论述都围绕上述结构展开。
首先看节点部分。这部分可以是PC,应用包括原生客户端和浏览器客户端;可以是手机,包括原生APP和浏览器客户端;可以是各类嵌入式设备,整合多种传感器。节点可以连接有线或者无线网络。
节点通过特定的协议,与中心互通。这里单独提一下物联网相关协议,考虑到场景和设备特点,这类协议多为二进制方式,甚至可以压缩,以节省资源和带宽,从而降低功耗。
节点处理简单逻辑,计算任务多放在后台中心区域完成,那里可以提供更加强大的计算力,更加丰富的存储资源。
节点主要承担数据采集和展示的任务。传感器可以用来采集多种用途的数据。节点也可以承载一部分计算任务,比如区块链数据块的生成,人工智能相关的简单处理,特别是语音和图像直接相关的。如果节点是PC类终端,则可以承载更重的计算任务。但不管怎样,节点独立的特点决定了其只处理与自身相关的计算任务,而不像中心那样,需要涉及到其他所有节点。
其次是连接部分。除了传统PC有线接入中心外,更多的是移动手持设备通过移动互联网接入中心,特别是最新发展的5G方式。对于特定行业,可能还会用到自建基站,甚至卫星网络,以达到全网(局域、广域)、全地形覆盖。
近期发展的边缘计算,承载了一部分原本放在中心的计算任务,以更快的反馈给终端节点,从而获得更好的用户体验。
技术上来讲,连接分物理相关的通信链路及其上的协议栈和应用数据。每一部分都可以展开成一颗巨大的知识树,这里概都省略。额外的,根据自身的业务领域,多提一句与服务中心的沟通技术形式,这包括消息队列的方式(可以是可读形式或者二进制打包)、RPC远程调用方式、基于HTTP技术的服务接口以及RESTfull方式的资源访问等。
最后是中心部分。这是最关键的部分。因为面对的终端节点可能非常多,并且同时连线跟中心沟通的节点也可能非常多,所以中心不仅面临本身构成上的复杂化问题,也面临总数和同时工作数都非常大的终端节点带来的性能和资源上的复杂化问题。
普通物理机无法处理高计算和高存储需求,所以,从一开始就存在大型机。其性能相比普通PC强大很多倍,用于提供不对称的资源服务。但是,随着外围终端节点数量的不断攀升、任务类型的不断复杂化、计算量的不断增加以及用户体验的不断改进,大型机CPU、存储和网络的物理性能被不断的逼近到工程极限,进一步提高单机性能,投入和产出将不成比例。
此时的解决方案,需要从两方面着手。一方面,是否有办法将问题的复杂度降低;另一方面,是否可以多机代替单机。这是相辅相成的。降低问题复杂度,很多时候采用分而治之的办法,将一个大问题,拆分为多个小问题,分别由不同机器处理,这样就降低了单机要求。多机代替单机,不但可以解决这种分而治之的问题,还可以解决同质问题,比如WEB类问题。这类问题的局限主要在于服务用户太多,所以可以将用户分流,一台机器处理一定数量的用户,达到降低中心单机规格的目的。
所以,现在的中心,并不是一台或几台机器组成,而是由大量机器构成。这种解决方案,一般称之为集群。集群可以用来实现廉价多机代替昂贵高性能大型机。
除了上述单纯的集群方案外,物理位置很多时候也是限制因素,特别是现在全球化的发展。所以,中心也不再是传统意义上的一个中心,而是有多个中心,这使得中心构成变成分布式系统。其实分布式并不是说物理位置上的多点,只要是在逻辑处理上具备分布式特点,就可以算作是分布式系统了。
分布式和集群的界限并不是很清晰。大任务拆分后的小任务可能具备两个特点,一是这些小任务处理不同的问题,这种任务具有MAP-REDUCE的特点;一种是小任务处理相同的问题,这里的变小只是从应对大量用户变为应对小量用户,WEB类应用具有明显的这种特点。即使这样,一个系统中的问题,也往往同时具有这两种特点。这体现水平和垂直分割的区别。一个大任务,首先拆分为多个小任务,这些小任务的组合是大任务的最终处理结果;但是每个小任务处理相同的问题,就可以由多个中心节点来共同处理。所以,我们不但采用多机分别处理多个任务节点,而且对每个任务节点,也利用多机来分担请求量。这里单纯看多机分担,我们侧重认为是集群,提供高可靠性、高扩展,也提供最终高性能;而如果看做一个整体,则更多侧重分布式,意即在整体上最终针对的是一个问题。由此,分布式面对一致性问题(对整体的系统而言,严格意义上讲,所有步骤数据影响的都是最终的一份数据,而非像单纯独立问题那样,可以独立数据,如果是这种情况,就不存在一致性问题了)。最后再啰嗦一句,总结起来就是:如果是为了利用多台机器处理相同的问题,减轻单机负载量,同时提高可靠性(备份作用),我们称之为集群方案;如果是用多台机器处理一个问题的不同阶段,面对一致性问题,则我们称之为分布式方案。一个实际系统往往二者兼而有之。
实际中的复杂问题,往往并不是单纯问题本身的复杂(比如说是某个复杂的数学问题),或者说是一个流程的复杂,而是系统的复杂。这种复杂性更多的表现在整体性上,也可以说是立体的复杂性。为了解决这种系统复杂问题,在技术演进过程中,软件开发上(以下都从软件角度展开)采用了多种技术方案,从最初的单体,到单体三层(表现层MVC、业务逻辑层、数据层),到服务化及如今的微服务化。演进过程中,总的思想是将复杂问题分层分块加以解决。纵向上(垂直面上)分层,横向上(水平面上)分块。不同的层和不同的块上,有着不同的技术解决方案。这里单独提几个点。服务这一块,微服务化后,涉及服务治理、服务管控、服务熔断、服务降级等概念。对外限制上,涉及负载均衡、代理(DNS)、反向代理、CDN加速等具体技术方案。
总的来看,分层走的比较早,块相对晚一点。不过,最终都成为一个一个块,这些块可能在同一层上,也可能在不同层上。每一个块完成一部分功能,可能的块包括数据库、落盘、缓存、各种服务;另外还有各种辅助块,包括消息队列、数据分析、集群管理、资源调度等。
对于各个块,其体现形式可以辅助以分布式或者集群修饰词。比如数据库,可以为单机数据库,也可以使用分布式方式,分库分表表现。缓存同样也可以修饰以分布式。而服务,更多的以集群修饰。不论以分布式或者集群修饰,所有这些块,只要是能够以物理机作为承载,则就可以通过虚拟化方式承载,甚至于容器方式。采用虚拟化或容器方式,可更容易动态的做伸缩扩展动作,更容易做集成、测试、交付、部署。
这样一来,后台中心部分的构建基本有了架子。至于架子中每一个格子如何规划,如何填充,则不同问题有不同的处理方法。但对一个系统而言,消息队列,分布式存储、分布式缓存、各种服务是必不可少的。
当我们采用虚拟化或者容器来做服务的分布式或者集群落地时,这里就出现一个新的问题,这个问题是关于平台与服务的。技术的进步,带来的是分工的细化,效率的提高。所以,对一个公司而言,既搭平台又做服务是不符合让专业的人做专业的事这一原则的。而且,随着现在虚拟化和容器技术的发展,平台发展越来越规范化,并产生一批公司,专门做计算、存储和网络资源的管理,并对外提供资源,我们将这种平台称之为云计算。
有了云计算后,业务公司只负责搭建自己的解决方案,提供微服务集,而具体的承载设备和平台,就由云来承担。这里,所谓的云,是将大量普通机器整合起来,通过虚拟化和容器进行划分隔离,从而对外提供虚拟的机器设备。如此一来,提供云的公司专门做基础资源的管理和服务;提供具体业务功能的公司购买云设备,在其上跑自己的业务功能。提供云的公司之所以可以成立,关键在于业务可以比较独立的与设备分割,特别是云中包含一些独特的特性,比如CDN内容加速、高可用性、不用购买设备、维护设备、购买宽带、维护网络等,业务公司可以专注于自己的业务优化。并且,设备被虚拟化,云化,就可以比较灵活的定义,我们知道,软的虚的东西就可以摆脱硬件的固有限制。一台物理机,可以灵活根据资源需求,被分割为多个虚拟机对外提供。
云计算平台被分为IaaS、PaaS、SaaS三个级别。传统的基础设施层服务倾向于IaaS,更高一点的,可以到PaaS级别,再进一步服务标准化,就可以提供SaaS。资源被不断的封装,高效管理,业务不断的独立、专业化。平台这一块,技术概念也是蛮拼得,比如针对存储和网络,出现了软件定义存储、软件定义网络等概念。
到这里,我们通过上述技术的演进,解决了中心的硬件限制、硬件维护、方案承载、方案优化等问题。提供服务或者中心的一方,此时可以专心提供业务解决方案,其余的部分有现成的多样的高效方案供选择。
其实来到业务层面,是顺其自然的,因为底层所有一切最终都是为业务服务的。业务层面,我们有时候也称之为对外提供的服务、功能,是中心的核心所在。作为中心,具备数据的汇聚点特点,而且数据通常也代表了价值,是业务或者服务围绕升华的中心,所以最终数据就自然而然地成为了中心的中心。现在互联网技术的发展,用户群的培养,我们每时每刻都在得到大量的数据,这在以前是不可想象的。数据实现了极大的汇聚化,这就为大数据技术提供了用武之地。进一步的,有了数据,我们就可以从数据中获取深层价值,这就是我们常听到的数据挖掘。数据挖掘的前提是大数据,这个大至少体现两个层面:一个数据量的大,这是显而易见的;另一个方面是数据面的大,或者说广。得益于互联网本身互联互通的特点,通过收集面广量大的数据,我们就可以通过数据挖掘得到以前无法了解的一些特点和规律。利用这些特点和规律,不但可以提供更好的服务,甚至可以提供数据本身之外的一些不可想象的价值,比如决策方面的、社会资源管控方面的、人类和自然资源利用方面的(避免资源的重复、浪费),相当于有了上帝的视角。说到这一点,有数据后,我们甚至可以抛开人自身,让机器学习数据、学习数据处理、学习决策、学习“学习”本身...,最终实现机器智能。
【ICT|一文将大数据、云计算、物联网、5G(移动网)、人工智能等最新技术串起来】做个通俗的总结:数据,让上帝有了眼睛;数学算法,为上帝提供了逻辑思维。二者的结合,让上帝有了智慧,这就是上帝的智能大脑。
推荐阅读
- Python|pandas操作指南(超级详细!!!)
- python机器学习与数据挖掘|数据预处理(七)——利用sklearn进行数据预处理
- 数据分析|Python 疫情数据的可视化与分析(二)
- 神经网络|机器学习-人工神经网络 最基础的单层神经网络编写
- 大数据可视化|Python疫情数据可视化分析+数据预测(pandas+pyecharts+statsmodels+matplotlib+sql)
- 远程控制|ToDesk(一款大小仅为5M的免费远程控制软件,为什么备受好评())
- 远程控制|推荐一款好用的免费远程控制软件——ToDesk
- 远程控制|最求卓越的远程控制软件--ToDesk
- 面试|真别卷了 , 踏踏实实金三银四 , 少走点弯路