Jack.H 供稿
Leo(LeoTsui) 整理
首先,云计算这个概念已经被炒了有一阵了,但是实际上是一个很早就有,也普遍存在的东西
云计算,是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需求提供给计算机各种终端和其他设备。——中文维基百科
这个概念,其实一大半都是废话。重点只有两个关键词——共享、按需求提供
从宏观角度来看云计算,其核心就是与习大大要大力发展的区块链技术相反的方向——中心化,而区块链是去中心化。这个中心化其实就是本来可能存在于各家小公司自己买的服务器,被集中到了某个地方,统一运行和维护,并按资源使用量来进行收费。对于小型企业而言,可能完全用不到一台完整服务器的性能,使用云服务就可以减少不必要的开支;对于大企业而言,能对规模化的服务集群进行统一管理和运维,也能减少很多人力物力成本。
而从租户的角度上来看,其涉及到的网络服务无非就只有两个选择,自建或者上云。
从服务商的角度来看,虚拟化是云计算的重中之重。其次为了保证服务可用性,还必须在云内部做一定的去中心化,通过异地灾备等形式来保证服务质量。
当然从zf角度来讲,就是各种诸如“互联网+”的口号,从而拉到投资。
能扯上互联网的,基本都能扯上云计算。像我们在用的微信后端,就是跑在腾讯云上的。云这个东西其实早已经在我们生活中无处不在了,只是普通用户可能根本没有察觉。
然后我们简单来看一下云计算的 3 个主要层次,这 3 个层次从下到上分别对应——基础设施即服务 IaaS,平台即服务 PaaS,软件即服务 SaaS。
具体的概念就是字面意思。拿微信举例,最底层的 IaaS,可以理解为微信的后端所运行的服务器或虚拟机;中间的 PaaS,可以理解为微信所用的数据库;而最上面的SaaS,可以理解为微信的后端服务,也就是具体的业务逻辑。
中间件
比方说即将到来的双十一,大家都在 0 点 0 分疯狂下单
普通模式是 用户与服务逻辑直接通信 这样很容易就造成服务崩溃
我如果在用户请求和服务逻辑中间加一个消息队列,用户请求每来一个我就加到队列里,并不直接为他提供服务,而是需要“排队”
而后端的服务逻辑则按自己所能承受的最大能力,依次从消息队列里取出用户请求进行处理
这样就避免了服务因为访问量过大而崩溃,这里用到的消息队列就是一种中间件
虚拟机和普通物理机的区别
我们自己的笔记本就算是一台物理机,这台物理机上会装一个操作系统,常见的有 Windows、macOS、Linux 等等。
虚拟机是为了解决在同一物理机上运行需要资源隔离而产生的东西,使得在同一个硬件系统上能同时运行多种不同的服务,而互不干扰。
首先就是虚拟化技术,如果一个 CPU 有 60 核,通过虚拟化技术我可以把这 60 个核最多分给 60 个人用,每个人 1 个核,这就是虚拟化。于此类似,还有内存和网络、存储的虚拟化。而如何让虚拟化这个过程产生的资源消耗最小,是个学问。
60 核在服务器是很常见的了。核数这个东西,堆了多少料,就是多少核,不必是 2 的幂次。单数也可以,只是单数已经证明了性能低下。
对整个云集群的管理需要耗费很多资源,比如创建删除虚拟机,这类操作本身就会很占用服务器有限的资源,卖给用户的就变少了,因此就有了管控面卸载这类技术的出现,主要目的是把诸如创建删除虚机这类管理类的操作,移到一张定制的板卡上单独运行(多为低功耗的 ARM 芯片),从而最大程度释放服务器的计算资源。AWS 是最早做这类技术的,阿里的项目叫做“神龙”。
所有云厂商,都会干的一件事就是——超分。
什么叫超分,举一个很简单的例子,一个用户买了一台 8 核 16G的虚机,但是他的业务可能平时最高只用的到 1 核1G,剩下的 7 核15G 一直处于闲置状态,于是云厂商就盯住了这块资源,于是就有了超分——如果一台服务器 CPU 只有 60 个核,一般云厂商可能会卖 300 个核出去,不同规格的超分程度不一样,超分比越低的,单价也就越贵。这个跟机票超售的道理有点类似。
一方面,常见的能看到的——“独享服务器”,一般只会超分一丢丢,比如 60 个核可能只卖 70 个出去;然后那种,特别便宜的“共享主机”,就不言而喻了,1 比 10 都有可能。
另一方面,可以通过技术手段来解决这里可能存在的玩砸了,其中一个就是热迁移。
如果我检测到,某台服务器上用户的负载上来了,总共 60 个核现在已经用到了 58 个了,我就会赶紧把当前负载最小的用户迁移到别的空闲一点的服务器上,而用户并不感知。都是浮动 ip,用户只是服务器上的一台虚拟机。迁移到另一台上,ip 不变,只有服务商知道用户被换了一台服务器,而用户自己并不知道。 这就好比,这架飞机发现超员了,航司马上把多的旅客安排到另一架飞机上,而且是闪现过去去的。
另外一种,就比较高端了,也是我现在在做的——智能混合部署。混合部署在学术上称为——co-location。其核心思想是,把不同资源密集型的虚机放在一起,从而实现资源利用率的最大化。
解释一下,两个用户都申请了一台 2 核 4G的虚拟机,但是其中一个用户可能 CPU 负载高,另一个用户内存用的多,如果我把这两个用户放在同一台服务器上,那么这台服务器的利用率就上来了。
哪个用户用 CPU 多,哪个用内存多是可以检测到的。每个用户的虚拟机,在宿主机上就是一个普通进程,所有系统都可以直接统计出来这个进程的资源使用情况
智能混部呢,就是通过机器学习等等手段,在不知道用户到底运行的什么业务的情况下,只通过 CPU、内存、网络、存储等等指标的使用率,来识别这个用户到底是跑了一个什么类型的业务,甚至预测他未来什么时候哪个资源会使用量上升。
openstack 呢,简单的说,除了 aws、google、阿里,其他云服务商基本都是用 openstack 搭建的云计算服务。
openstack 最核心的 3 个组件——Nova、Cinder、Neutron,分别管理 计算、存储和网络资源。
一台卖给用户的虚拟机,最基本的组成就是计算、存储、和网络。可以理解为从这 3 个池子里抽出一部分东西来,再配合一些其他的服务,就能组成一台能卖给用户的虚拟机、
再笼统一点的讲 aliyun.com、huaweicloud.com 这些网址打开进行操作,就是在跟 openstack 或它的类似物打交道。
openstack 简单的搭起来一个人都行,但是规模扩大,技术升级,就复杂了。
公有云——也就是常见的 aws、阿里云等等,资源池大,地域广,价格相对较低,但数据敏感用户如金融、zf 可能不放心
私有云——用户按照公有云标准自行建设的云,资源池有限,地域较为有限,建设成本很高。数据存储在本地,安全。
混合云——将私有云与公有云打通或部分打通,敏感业务运行在私有云,公共业务运行在公有云,成本和数据隐私均较为折中的方案。
这三种云可以覆盖所有的用户场景。