架构文摘
作者:刘永峰, 腾讯云产品经理,布道师(本文已获作者授权转载)
来源:云头条
什么是云计算?云计算的角色是如何变迁的。云计算未来的形态是什么?本文试图从历史,技术演化,云端应用架构的发展等几个维度去揭示云计算未来的演化趋势。
不同的用户,对云计算的认知是不同的,对于一个计算机专业的硕士研究生来说,他会告诉你,云计算就是网格计算,并行计算。对于一个小白用户来说,他会告诉你,云计算是网盘,对于一个IT工程师来说,他会告诉你,云计算是服务器。对于一个科技爱好者来说,他眼中的云计算是类似于AlphaGo这样的高科技。云计算到底是什么呢?不同的人有不同的看法。但是作为云计算行业的从业者来说,我是这样定义云计算的:云计算是一种将IT基础设施转变为服务去售卖的新的商业模式
在不同的历史时期,云计算所扮演的角色是不同的,在2000年之前,云计算更多的是以一种新技术形态出现的。那个时候可能还没有这个名词,但是学术界一直研究的网格计算,并行计算,就是云计算比较早期的雏形。在21世纪最初的几年,云计算开始在Google这样的公司广泛的应用。这个时候,云计算更多的是代表一种能力(Capacity)并且只有大公司才能拥有这种能力。到了20006年,有一个标志性的时间,就是Amazon第一次将对象存储,作为一种服务,对外去售卖。云计算才由少数公司具有的能力,演变成人人都能购买的服务。随着技术继续往前发展,未来,云计算是一种什么形态呢?
某些时候,我们面向着对未来的种种的预测和期望,其实很多答案已经存在在历史中了。
电力作为一种公共资源的演化过程
回到19世纪,我们先看一下,电力作为一种资源的演变过程。1831年,法拉第发现电磁感应,电,开始作为一种新的技术登上历史舞台。1879年,爱迪生发明了电灯,第一次点亮的世界,此时,电只是作为摩根这样一类少数富人所拥有的能力。随着电力技术的发展,爱迪生不仅仅发明了电灯,还发明了一系列直流的发电,传输的系统。并通过爱迪生通用电气将其商业化,这个时候,电才开始成为人人都可以享受和购买的服务。历史的车轮继续往前。特斯拉发明了交流电机以及交流传输技术,电能能通过远距离输电的方式,输往千家万户。并且在工业生产,人的生活中被广泛采用。这个时候,电才成为了一种公共的资源。
电力革命,催生了电能成为一种公共资源
第二次工业革命,催生了电成为一种公共的资源。历史的车轮总会存在相同的印记,所以,云计算,未来也会是一种公共的资源。
一个东西,从一项技术,发展成为公共的资源。其技术一定是逐步演化的,需要适应作为公共资源的特点。
细粒度,可衡量
简单通用
有统一的方式去获取
云计算技术的发展,其实就是隔离性越来越深,资源粒度越来越细,由专有到通用的过程
我们先看一下物理机时代的隔离方式。当需要服务时,会购买一台物理的机器,当需要更多服务时,就需要一个机架,装入更多的物理机器。所以物理机时代的隔离,就是一种机器层面的隔离。这种情况下会导致两个问题:
资源粒度过粗,利用率不高。
无法方便的通过软件去控制
随着虚拟化技术的发展,出现了操作系统层面的隔离。也就是我们通常说的虚拟机(VM),在一个操作系统上划分出很多虚拟的操作系统。每个操作系统就是一台虚拟的服务器。他们共享硬件资源。由于一台物理的机器,能够创建很多个虚拟的机器,这个时候,资源粒度变细了,利用率提升了,同时还带来了一个非常便利的优势,也就是能够通过软件的方式,非常方便的创建,重启,销毁机器。当一个数据中心大量的虚拟机被生成出来,然后辅助特定的管理,监控,安全,网络的设施,就变成了云。也就是我们通说所说的IAAS。
PAAS,一种应用层面的隔离
用惯了虚拟机的程序员,可能会思考一个问题。我有10个python的应用,只是应用的代码不同,我难道需要10个独立的OS去运行吗?这些应用能否共用一个执行环境。这种情况下,PAAS出现了。传统的PAAS,是一种应用层面的隔离。应用和应用之前彼此独立,共享相同的执行环境(Runtime),这个时候,资源粒度更细了,同一个PAAS平台可以同时运行更多的应用。但是PAAS平台也存在一个问题,因为平台是运行环境相关的,所以必须为每个平台专门定制代码。通用性带来很大的问题。
技术总是往前发展,既然应用是和执行环境相关的,那为什么不把应用和执行环境打包在一起,这样,就解决了PAAS平台的应用必须依赖其执行环境的问题。因此容器(Container)技术应运而生。容器就是把一个应用以及所依赖的一系列的运行环境打包到一个“箱子”里面。箱子和箱子之间共享同一个OS Kernel。利用操作系统内核本身的一些特性做资源隔离。所以容器技术是一种进程级别的隔离。它不仅解决了运行环境依赖的问题,还使得隔离粒度进一步变细。容器的生成,销毁更为迅速(秒级)。所以纵观整个的云计算技术的发展历程,有一个非常重要的主线就是隔离越来越深入,资源粒度越来越细,管理越来越方便。
刚才谈到了物理机,虚拟机和容器,那这三种到底有什么区别?这里打一个形象的比喻,如果把虚拟机比作是一套三居室的公寓,容器就好比是合租,租用公寓里面的一个房间,他们共享客厅,厨房和卫生间。旁边房子里面大声放音乐,可能会吵到自己,相比于公寓的防盗门,也不是那么安全,但是它是一种轻量化的解决方案。旁边的独栋别墅,就好比是一个物理机,它所有的东西都是独享,但是利用率不会那么高。
一个东西,如果要变成一项公共的资源,还需要满足一个非常重要的特征,也就是需要一种相对简单,并且统一的途径的获取资源。譬如所有的电能,都是通过一个插座(Socket)去获取的。云计算也需要一个这样的插座。所以在云计算的世界里,API扮演着一个非常重要的觉得。未来云的世界,就是由API构成的世界。
相比于电能,简单,便利,随时随地获取,不用关心是否够用。云计算要成为一个资源,也需要具备相应的特征。
按需付费,用多少就算多少
即时获取,消除地域和时间的限制
规模经济,成本会越来越低
弹性伸缩,满足不同类别的业务需求
电能的广泛传播和使用,与丰富家用电器的使用场景以及以电能为动力的广泛的工业化应用是分不开的。同样,云计算的发展和普及,依赖于真正符合云计算特点的应用系统和应用架构。到底什么样的一种应用架构是符合云的未来趋势的呢?最近,有一种应用架构开始流行:Cloud Native(云原生应用)。Cloud Native不是一种新的技术,也不是一种新的架构。而是包含下面三个东西,可以说是一套云端业务构建和运营管理的最新的理念。
一种架构思想(微服务)
一种业务运行环境(Docker + 容器)
一种团队组织方式(小团队,DevOps)
微服务架构
随着云计算技术的发展,云计算所表现出来的资源化特征已经完全不同于传统的IT。传统的集中式架构,分布式架构显然已经无法适应一切以云端为基础构建的业务。“微服务”在这种情况下应运而生。和传统的SOA一样,微服务也是一种面向服务的架构,但是它的粒度更小,服务和服务之间更为松散耦合。一切以API进行通信。
当然微服务的实现,也依赖于其具体的业务运行方式和管理模式。所以也离不开“Docker”这只改变世界的“箱子”。如果云计算的未来是一种公共的资源,那么由它所驱动的业务,一定会有一个通用化的执行环境。并且计算单元的粒度更细,也更具有可衡量的特征。以容器技术为核心的Docker,将是当前最优化的一种方案。同时,服务以极细粒度去运行,配合标准化的分发,调度管理模式,才更能适合微服务这样的全新架构。
康威定律
20世界60年代,有一个程序员提出了著名的“康威定律”,有什么样的业务架构,必然会有什么样的团队组织形式。既然云端的业务是一种全新的业务架构去组织的,当然也会催生出新的团队组织和运行模式。“小团队作战,DevOps”,构建一种适合云端业务的,敏捷的业务开发,运行,运营管理模式。
从云计算的未来的发展形态,谈到了云的技术演化,再谈到了云的资源化特征,最后谈到了云端的应用架构。从历史到技术演化,到业务特征,最后到应用形态。其实一直都是围绕着一条主线:“云计算如何由服务向着公共资源去演变”。总结起来,有下面几点结论:
云计算的服务化特征会越来越明显
资源粒度会越来越细,越来越通用,越来越容易获取
业务的述求越来越向着即时获取,按需获取,弹性的方向发展
新的业务架构,业务运行环境,团队组织模式是其演进的催化剂。