云计算:拼的是运维

云计算:拼的是运维

云计算的技术难点

到今天,云计算的工业实现已经不太难了。现在有开源软件KVM和Xen,这两个东西基本把虚拟化搞定;而OpenStack则把管理、控制系统搞定,也很成熟。PaaS也有相应的开源,比如OpenShift,而Java里也有N多的中间件框架和技术。另外分布式文件系统GFS/TFS,分布式计算系统Hadoop/Hbase等等,分布式的东西都不神秘了。技术的实现在以前可能是问题,现在不是了。

对于云计算工程方面,现在最难的是运维。管100台、1万台还是100万台机器,那是完全不同的。机器少你可以用人管理,机器多是不可能靠人的。运维系统不属于功能性的东西,用户看不见,所以这是被大家严重低估的东西。只要你做大了,就必然要在运维系统上做文章。数据中心/云计算拼的就是运维能力。

为什么我说运维比较复杂,原因有这么几个。

一方面,云计算要用廉价设备取代那些昂贵的解决方案。所谓互联网的文化就是屌丝文化,屌丝就是便宜,互联网就是要用便宜的东西搭建出高质量的东西,硬件和资源一定不会走高端路线——比如EMC、IBM小型机、SGI超级计算机等等,你如果用它去搭建云计算,成本太贵。用廉价的解决方案代替昂贵的解决方案是整个计算机发展史中到今天唯一不变的事情。所以如果你要让夏利车跑出奔驰车的感觉,你需要自己动手做很多事,搭建一个智能的系统。用廉价的东西做出高质量的东西,运维好廉价的设备其实是云计算工程里最大的挑战。

另一方面,因为你机器多了,然后你用的又不是昂贵的硬件,所以故障就变成了常态,硬盘、主板、网络天天坏。所以,没什么好想的,运维就必须要跟上。云计算的目标是在故障成为常态的情况下保证高可用——也就是我们所说的,你服务的可用性是3个9、4个9还是5个9。

最后,这一大堆机器和设备都放在一起,你的安全就是一个挑战,一方面是Security,另一方面是Safety,保证数十台数百台的设备的安全还好说,但是对于数万数十万台的设计,就没有那么简单了。

面对这样的难题,人是无法搞得定的,你只能依靠技术来管理和运维整个平台。比如必须有监控系统。这跟操作系统一样,对资源的管理,对网络流量、CPU利用率、进程、内存等等的状态肯定要全部收集的。收集整个集群各种节点的状态,是必然每个云计算都有的,都是大同小异的。

然后,你还要找到可用性更好的节点,这需要有一些故障自检的功能。比如阿里云就遇到过磁盘用到一定时候就会莫名其妙的不稳定,有些磁盘的I/O会变慢。变慢的原因有可是硬盘不行了,于是硬盘控制器可能因为CRC校验出错需要要多读几次,这就好比TCP的包传过来,数据出错了,需要重新传。在这种硬盘处理半死不活的状态时,你肯定是需要一个自动检测或自动发现的程序去监控这种事情,当这个磁盘可能不行了,标记成坏磁盘,别用它,到别的磁盘上读复本去。我们要有故障自动检测、预测的措施,才能驱动故障,而不是被动响应故障,用户体验才会好。换句话说,我们需要自动化的、主动的运维。

为了数据的高可用性,你只能使用数据冗余,写多份到不同的节点——工业界标准写三份是安全。然而,你做了冗余,又有数据一致性问题。为了解决冗余带来的一致性问题,才有了paxos的投票玩法,大家投票这个能不能改,于是你就需要一个强大的控制系统来控制这些东西。

另外,公有云人来人往,里面的资源和服务今天用明天不用,有分配有释放,有冻结,你还要搞一个资源管理系统来管理这些资源的生命状态。还有权限管理,就像AWS的IAM一样,如果没有像AWS的IAM权限管理系统,AWS可能会不会像今天这样有很多大的公司来用。企业级的云平台,你需要有企业级的运维和管理能力。

云计算的门槛

为啥云计算有这么多开源的东西,却不是人人都能做?

一方面,这就跟盖楼一样。盖楼的技术没什么难的(当然,盖高楼是很难的),但是你没地你怎么盖?我觉得云计算也一样,带宽的价格贵得就像土地的价格。其实云计算跟房地产一样,要占地、占机房、占带宽。如果能把中国所有的机房、机柜、带宽资源都买了,你就不用做云计算了,卖土地就够了——因为这些是有限的。最简单的例子,IP地址是有限的。你有带宽、有机房,但是如果你没有IP,这就不好玩了。尤其是你要提供CDN服务,这个就更明显,因为有多少物理节点直接决定你的CDN服务质量。

另一方面,正如前面所说的,运维是件很难的事,运维这个事并不是一般人能搞的事。没有足够的场景、经验和时间,这种能力很难出现。

从用户的角度来说呢,云计算是一种服务,你需要对用户企业内的解决方案要有很好的了解,这样才能提高很好的服务。能提供“好服务”的通常都是把自己真正当成用户公司。

卖汽车也是卖服务。造出汽车来,并不代表你搞定这个事了。如果没有公路、没有加油站、没有4s店、没有交通管理、规则等等,你要么用不了,要么就是乱七八糟。不能只让用户在那看着你的汽车好牛啊,但是用户不知道怎么用。所以说,云计算最终旁边必须要有一套服务设施,而这套服务设施也是今天被人低估的。

云计算有两个东西我觉得是被人低估的,一个是运维,一个是那堆服务。做服务的需要有生态环境,有人帮你做。所以做云计算要落地并不简单。

总之,云计算是需要吃自己的狗食才能吃出来的,绝不是像手机上的Apps一样,你想一想、试一试就能搞出来的,你首先需要让自己有这样的场景,有这样的经历,你才可能会有这样的经验和能力。

还是那句话,云就是服务,只要提供了好的服务,无论公有还是私有都是会有价值的。

云计算的技术难点
到今天,云计算的工业实现已经不太难了。现在有开源软件KVM和Xen,这两个东西基本把虚拟化搞定…

陈皓(@左耳朵耗子),CoolShell.cn博主。15年软件开发相关工作经验,8年以上项目和团队管理经验。擅长底层技术架构,团队建设,软件工程,软件研发咨询,以及全球软件团队协作管理。对高性能,高可用性,分布式,高并发,以及大规模数据处理系统有一些经验和心得。喜欢关注底层技术平台和互联网行业应用。技术擅长C/C++/Java和Unix/Linux/Windows。曾于Amazon中国任研发经理,负责电子商务全球化业务(全球开店)和全球库存预测系统的研发。曾在阿里巴巴北京研发中心、商家业务部曾任资深专家一职,负责电商云平台、开放平台,云监控和电商多媒体平台。现在阿里巴巴核心系统专家组从事阿里核心系统和阿里云ECS相关的虚拟化平台的开发工作。

作者简介:刘超,网易云计算解决方案首席架构师。10年云计算领域研发及架构经验,Open
DC/OS贡献者。长期专注于kubernetes,
OpenStack、Hadoop、Docker、Lucene、Mesos等开源软件的企业级应用及产品化。曾出版《Lucene应用开发揭秘》。

云计算的整个过程,用一个词来讲就是“分久必合,合久必分”。

云计算,大数据,和人工智能,最近火的不行不行的词汇,似乎不相同,但又似乎相互关联,到底是什么样的关系呢?

对云计算的定义

以下为正文:

云计算其实主要解决了四个方面的内容:计算,网络,存储,应用。前三者是资源层面的,最后是应用层面的。

其实他们本没有什么关系,各自活在不同的世界里,然而随着互联网的发展,相互纠葛在了一起。

云计算其实跟PC机有一样的概念,有CPU、硬盘、操作系统、应用软件。云计算的计算节点(虚拟机)就是PC中的CPU,数据缓存服务就是PC的内存,存储节点就是PC的硬盘,提供数据服务,让数据不丢、高可用,PC中的控制器就是云计算的控制系统。PC机的硬件上面要有操作系统。操作系统很大一块是给开发人员提供系统的API接口,提供系统监控以看运行情况,并且还要有系统管理——如用户账号的权限管理、备份恢复等等。操作系统上面要有应用软件,这样才能服务于最终用户,应用软件就是真正落地的业务,这样才会有用户;有了用户,整个体系就运转起来了。

云计算概述

云计算主要解决了四个方面的内容:计算,网络,存储,应用。

计算就是CPU和内存,例如“1+1”这个最简单的算法就是把“1”放在内存里面,然后CPU做加法,返回的结果“2”又保存在内存里面。网络就是你插根网线能上网。存储就是你下个电影有地方放。本次讨论就是围绕这四个部分来讲的。其中,计算、网络、存储三个是IaaS层面,应用是PaaS层面。

  • 计算是CPU和内存,为啥?1+1这个最简单的算法是把1放在内存里面,运行加法是CPU做的,做完了结果2又保存在内存里面。
  • 网络就是你插根网线能上网。
  • 存储就是你下个电影有地方放。本次讨论就是围绕这四个部分来讲的。

云计算最初的目标是对资源的管理,管理的主要是计算资源,网络资源,存储资源三个方面。想象你有一大堆的服务器,交换机,存储设备,放在你的机房里面,你最想做的事情就是把这些东西统一的管理起来,最好能达到当别人向你请求分配资源的时候(例如1核1G内存,10G硬盘,1M带宽的机器),能够达到想什么时候要就能什么时候要,想要多少就有多少的状态。

这就是工程师说的stack,也就是我们听到的IaaS、PaaS、SaaS三个层。IaaS层就像PC机的基础硬件加驱动程序,PaaS层就像PC机上的操作系统——把基础硬件抽象、包起来并屏蔽硬件和硬件驱动细节、调度基础硬件,而SaaS层就是PC机里的应用软件。另外,我们还得给开发人员提供各种开发框架、类库和开发环境,这就是为什么AWS还做通知、消息、工作流,这是用于粘合操作系统和业务层的,比如可以让你方便地做水平扩展和分布式。云计算自然也会像PC机一样,三个层上都会有用于控制和管理的系统。这就是为什么云计算会做成这个样子,其实计算机的发展就在这个圈子里绕。

云计算发展脉络

云计算整个发展过程,用一句话来形容,就是“分久必合,合久必分”。

 在原始社会,大家最爱用的是物理设备:

这就是所谓的弹性,俗话说就是灵活性。灵活性分两个方面,想什么时候要就什么时候要,这叫做时间灵活性,想要多少就要多少,这叫做空间灵活性。

其实,最终用户基本并不关心你CPU用的啥,存储用的是啥,你用什么框架开发,他们关心更多的是可以解决什么问题,有什么样的用户体验。像以前Windows用户体验之所以比Linux好,就是因为应用层用的舒服;而Linux对开发者的用户体验比Windows好,就是因为其开放和可以让开发人员更灵活、更自由。我们可以看到SaaS层上有的像SalesForce、Dropbox、Evernote、Netflix这样的给最终用户的服务,他们更倾向于最终用户和业务。

第一阶段:合,即物理设备

  • 服务器用的是物理机,例如戴尔,惠普,IBM,联想等物理服务器,随着硬件设备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置。
  • 网络用的是硬件交换机和路由器,例如思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛。
  • 存储方面有的用普通的磁盘,也有了更快的SSD盘。容量从M,到G,连笔记本电脑都能配置到T,更何况磁盘阵列。

永利酒店赌场 1

说到底,云计算的IaaS、PaaS、SaaS最后那个S都是Service。就是说,无论你云计算长成什么样,都得要向用户提供“服务”而不仅仅是软硬件和各种资源。

物理设备简介

在互联网发展初期,大家都爱用物理设备:

服务器用物理机,像戴尔、惠普、IBM、联想等物理服务器,随着硬件设备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置;

网络用的是硬件交换机和路由器,例如思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛;

存储方面有的用普通的磁盘,也有更快的SSD盘。容量从M,到G,连笔记本电脑都能配置到T,更何况磁盘阵列;

 如果部署应用直接使用物理机,看起来很爽,总有种土豪的感觉,却又大大的缺点:

云计算:拼的是运维。物理机显然是做不到这一点的。虽然物理设备是越来越牛了:

云计算的技术难点

物理设备的缺点

部署应用直接使用物理机,看起来很爽,有种土豪的感觉,却有大大的缺点:

人工运维。如果你在一台服务器上安装软件,把系统安装坏了,怎么办?只有重装。当你想配置一下交换机的参数,需要串口连上去进行配置;当你想增加一块磁盘,要买一块插进服务器,这些都需要人工来,而且很大可能要求机房。你们公司在北五环,机房在南六环,这酸爽。

浪费资源。其实你只想部署一个小小的网站,却要用128G的内存。混着部署吧,就有隔离性的问题。

隔离性差。你把好多的应用部署在同一台物理机上,他们之间抢内存、抢cpu,一个写满了硬盘,另一个就没法用了,一个弄挂了内核,另一个也跟著挂了,如果部署两个相同的应用,端口还会冲突,动不动就会出错。

  • 人工运维:如果你在一台服务器上安装软件,把系统安装坏了,怎么办?只有重装。当你想配置一下交换机的参数,需要串口连上去进行配置。当你想增加一块磁盘,总要买一块插进服务器。这些都需要人工来,而且很大可能要求机房。你们公司在北五环,机房在南六环,这酸爽。
  • 浪费资源:其实你只想部署一个小小的网站,却要用128G的内存。混着部署吧,就有隔离性的问题。
  •  隔离性差:你把好多的应用部署在同一台物理机上,他们之间抢内存,抢cpu,一个写满了硬盘,另一个就没法用了,一个弄挂了内核,另一个也同时挂了,如果部署两个相同的应用,端口还会冲突,动不动就会出错。

服务器用的是物理机,例如戴尔,惠普,IBM,联想等物理服务器,随着硬件设备的进步,物理服务器越来越强大了,64核128G内存都算是普通配置。

到今天,云计算的工业实现已经不太难了。现在有开源软件KVM和Xen,这两个东西基本把虚拟化搞定;而OpenStack则把管理、控制系统搞定,也很成熟。PaaS也有相应的开源,比如OpenShift,而Java里也有N多的中间件框架和技术。另外分布式文件系统GFS/TFS,分布式计算系统Hadoop/Hbase等等,分布式的东西都不神秘了。技术的实现在以前可能是问题,现在不是了。

第二阶段:分,即虚拟化

 于是有了第一次合久必分的过程,叫做虚拟化。所谓虚拟化,就是把实的变成虚的。

网络用的是硬件交换机和路由器,例如思科的,华为的,从1GE到10GE,现在有40GE和100GE,带宽越来越牛。

对于云计算工程方面,现在最难的是运维。管100台、1万台还是100万台机器,那是完全不同的。机器少你可以用人管理,机器多是不可能靠人的。运维系统不属于功能性的东西,用户看不见,所以这是被大家严重低估的东西。只要你做大了,就必然要在运维系统上做文章。数据中心/云计算拼的就是运维能力。

虚拟化简介

因为物理设备的以上缺点,就有了第一次“合久必分”的过程,叫做虚拟化。所谓虚拟化,就是把实的变成虚的:

物理机变为虚拟机。cpu是虚拟的,内存是虚拟的,内核是虚拟的,硬盘是虚拟的;

物理交换机变为虚拟交换机。网卡是虚拟的,交换机是虚拟的,带宽也是虚拟的;

物理存储变成虚拟存储。多块硬盘虚拟成一大块;

  • 物理机变为虚拟机:cpu是虚拟的,内存是虚拟的,内核是虚拟的,硬盘是虚拟的。
  • 物理交换机变为虚拟交换机:网卡是虚拟的,交换机是虚拟的,带宽也是虚拟的。
  • 物理存储变成虚拟存储:多块硬盘虚拟成一大块。

存储方面有的用普通的磁盘,也有了更快的SSD盘。容量从M,到G,连笔记本电脑都能配置到T,更何况磁盘阵列。

为什么我说运维比较复杂,原因有这么几个。

虚拟化解决的问题

虚拟化很好地解决了在物理设备阶段存在的三个问题:

人工运维。虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。虚拟网络的配置也可以远程操作,创建网卡、分配带宽都是调用接口就能搞定的;

资源浪费。虚拟化了以后,资源可以分配地很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来;

隔离性差。每个虚拟机都有独立的cpu、
内存、硬盘、网卡,不同虚拟机之间的应用互不干扰;

 虚拟化很好的解决了上面的三个问题:

但是物理设备有着大大的缺点:

一方面,云计算要用廉价设备取代那些昂贵的解决方案。所谓互联网的文化就是屌丝文化,屌丝就是便宜,互联网就是要用便宜的东西搭建出高质量的东西,硬件和资源一定不会走高端路线——比如EMC、IBM小型机、SGI超级计算机等等,你如果用它去搭建云计算,成本太贵。用廉价的解决方案代替昂贵的解决方案是整个计算机发展史中到今天唯一不变的事情。所以如果你要让夏利车跑出奔驰车的感觉,你需要自己动手做很多事,搭建一个智能的系统。用廉价的东西做出高质量的东西,运维好廉价的设备其实是云计算工程里最大的挑战。

虚拟化时代的生态

在虚拟化阶段,领跑者是Vmware,可以实现基本的计算、网络、存储的虚拟化。如同这个世界有闭源就有开源、有windows就有linux、有Apple就有Android一样,有Vmware,就有Xen和KVM。

在开源虚拟化方面,Xen
的Citrix做的不错,后来Redhat在KVM发力不少;对于网络虚拟化,有Openvswitch,可以通过命令创建网桥、网卡、设置VLAN、设置带宽;对于存储虚拟化,本地盘有LVM,可以将多个硬盘变成一大块盘,然后在里面切出一小块给用户。

  • 人工运维:虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。虚拟网络的配置也可以远程操作,创建网卡,分配带宽都是调用接口就能搞定的。
  • 浪费资源:虚拟化了以后,资源可以分配的很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来。
  • 隔离性差:每个虚拟机有独立的cpu,
    内存,硬盘,网卡,不同虚拟机的应用互不干扰。

人工运维:如果你在一台服务器上安装软件,把系统安装坏了,怎么办?只有重装。当你想配置一下交换机的参数,需要串口连上去进行配置。当你想增加一块磁盘,总要买一块插进服务器。这些都需要人工来,而且很大可能要求机房。你们公司在北五环,机房在南六环,这酸爽。

另一方面,因为你机器多了,然后你用的又不是昂贵的硬件,所以故障就变成了常态,硬盘、主板、网络天天坏。所以,没什么好想的,运维就必须要跟上。云计算的目标是在故障成为常态的情况下保证高可用——也就是我们所说的,你服务的可用性是3个9、4个9还是5个9。

虚拟化的缺点

但是虚拟化也有缺点。通过虚拟化软件创建虚拟机,需要人工指定放在哪台机器上、硬盘放在哪个存储设备上,网络的VLAN
ID、带宽的具体配置等,都需要人工指定。所以仅使用虚拟化的运维工程师往往有一个Excel表格,记录有多少台物理机,每台机器部署了哪些虚拟机。受此限制,一般虚拟化的集群数目都不是特别大。

但是虚拟化还有以下的缺点,通过虚拟化软件创建虚拟机,需要人工指定放在哪台机器上,硬盘放在哪个存储设备上,网络的VLAN
ID,带宽具体的配置,都需要人工指定。所以单单使用虚拟化的运维工程师往往有一个Excel表格,有多少台机器,每台机器部署了哪些虚拟机。所以,一般虚拟化的集群数目都不是特别的大。

浪费资源:其实你只想部署一个小小的网站,却要用128G的内存。混着部署吧,就有隔离性的问题。

最后,这一大堆机器和设备都放在一起,你的安全就是一个挑战,一方面是Security,另一方面是Safety,保证数十台数百台的设备的安全还好说,但是对于数万数十万台的设计,就没有那么简单了。

第三阶段:合,即云计算

在虚拟化阶段,领跑者是Vmware,可以实现基本的计算,网络,存储的虚拟化。

隔离性差:你把好多的应用部署在同一台物理机上,他们之间抢内存,抢cpu,一个写满了硬盘,另一个就没法用了,一个弄挂了内核,另一个也同时挂了,如果部署两个相同的应用,端口还会冲突,动不动就会出错。

所以,面对这样的难题,人是无法搞得定的,你只能依靠技术来管理和运维整个平台。比如必须有监控系统。这跟操作系统一样,对资源的管理,对网络流量、CPU利用率、进程、内存等等的状态肯定要全部收集的。收集整个集群各种节点的状态,是必然每个云计算都有的,都是大同小异的。

云计算解决的问题

为了解决虚拟化阶段遗留的问题,于是有了分久必合的过程。这个过程我们可以形象地称为池化。虚拟化将资源分得很细,但是如此细分的资源靠Excel去管理,成本太高。池化就是将资源打成一个大的池,当需要资源的时候,帮助用户自动地选择,而非用户指定。这个阶段的关键点:调度器Scheduler。

当然这个世界有闭源,就有开源,有windows就有linux,有apple就有andord,有Vmware,就有Xen和KVM。在开源虚拟化方面,Xen方面Citrix做的不错,后来Redhat在KVM发力不少。

所以人们想到的第一个办法叫做虚拟化。所谓虚拟化,就是把实的变成虚的。

然后,你还要找到可用性更好的节点,这需要有一些故障自检的功能。比如阿里云就遇到过磁盘用到一定时候就会莫名其妙的不稳定,有些磁盘的I/O会变慢。变慢的原因有可是硬盘不行了,于是硬盘控制器可能因为CRC校验出错需要要多读几次,这就好比TCP的包传过来,数据出错了,需要重新传。在这种硬盘处理半死不活的状态时,你肯定是需要一个自动检测或自动发现的程序去监控这种事情,当这个磁盘可能不行了,标记成坏磁盘,别用它,到别的磁盘上读复本去。我们要有故障自动检测、预测的措施,才能驱动故障,而不是被动响应故障,用户体验才会好。换句话说,我们需要自动化的、主动的运维。

私有云、公有云的两极分化

这样,Vmware有了自己的Vcloud;也有了基于Xen和KVM的私有云平台CloudStack(后来Citrix将其收购后开源)。

当这些私有云平台在用户的数据中心里卖得奇贵无比、赚得盆满钵盈的时候,有其他的公司开始了另外的选择。这就是AWS和Google,他们开始了公有云领域的探索。

AWS最初就是基于Xen技术进行虚拟化的,并且最终形成了公有云平台。也许AWS最初只是不想让自己的电商领域的利润全部交给私有云厂商吧,所以自己的云平台首先支撑起了自己的业务。在这个过程中,AWS严肃地使用了自己的云计算平台,使得公有云平台并不是对资源的配置更加友好,而是对应用的部署更加友好,最终大放异彩。

对于网络虚拟化,有Openvswitch,可以通过命令创建网桥,网卡,设置VLAN,设置带宽。

物理机变为虚拟机:cpu是虚拟的,内存是虚拟的。

为了数据的高可用性,你只能使用数据冗余,写多份到不同的节点——工业界标准写三份是安全。然而,你做了冗余,又有数据一致性问题。为了解决冗余带来的一致性问题,才有了paxos的投票玩法,大家投票这个能不能改,于是你就需要一个强大的控制系统来控制这些东西。

私有云厂商与公有云厂商的联系与区别

如果仔细观察就会发现,私有云和公有云虽然使用的是类似的技术,但在产品设计上却是完全不同的两种生物。

私有云厂商和公有云厂商也拥有类似的技术,但在产品运营上呈现出完全不同的基因。

私有云厂商是卖资源的,所以往往在卖私有云平台的时候伴随着卖计算、网络、存储设备。在产品设计上,私有云厂商往往会对客户强调其几乎不会使用的计算、网络、存储的技术参数,因为这些参数可以在和友商对标的过程中占尽优势。私有云的厂商几乎没有自己的大规模应用,所以私有云厂商的平台做出来是给别人用的,自己不会大规模使用,所以产品往往围绕资源展开,而不会对应用的部署友好。

公有云的厂商往往都是有自己大规模的应用需要部署,所以其产品的设计可以将常见的应用部署需要的模块作为组件提供出来,用户可以像拼积木一样,拼接一个适用于自己应用的架构。公有云厂商不必关心各种技术参数的PK,不必关心是否开源,是否兼容各种虚拟化平台,是否兼容各种服务器设备、网络设备、存储设备。你管我用什么,客户部署应用方便就好。

对于存储虚拟化,对于本地盘,有LVM,可以将多个硬盘变成一大块盘,然后在里面切出一小块给用户。

物理交换机变为虚拟交换机:网卡是虚拟的,交换机是虚拟的,带宽也是虚拟的。

另外,公有云人来人往,里面的资源和服务今天用明天不用,有分配有释放,有冻结,你还要搞一个资源管理系统来管理这些资源的生命状态。还有权限管理,就像AWS的IAM一样,如果没有像AWS的IAM权限管理系统,AWS可能会不会像今天这样有很多大的公司来用。企业级的云平台,你需要有企业级的运维和管理能力。

公有云生态及老二的逆袭

公有云的第一名AWS活的自然很爽,作为第二名Rackspace就不那么舒坦了。

没错,互联网行业基本上就是一家独大,那第二名如何逆袭呢?开源是很好的办法,让整个行业一起为这个云平台出力。于是Rackspace与美国航空航天局(NASA)合作创始了开源云平台OpenStack。

OpenStack现在发展的和AWS有点像了,所以从OpenStack的模块组成可以看到云计算池化的方法。

为了解决虚拟化阶段剩余的问题,于是有了分久必合的过程。这个过程我们可以形象的称为池化,也就是说虚拟化已经将资源分的很细了,但是对于如此细粒度的资源靠Excel去管理,成本太高,能不能打成一个大的池,当需要资源的时候,帮助用户自动的选择,而非用户指定。所以这个阶段的关键点:调度器Scheduler。

物理存储变成虚拟存储:多块硬盘虚拟成一个存储池,从中虚拟出多块小硬盘。

云计算的门槛

OpenStack的组件

计算池化模块Nova:OpenStack的计算虚拟化主要使用KVM,然而到底在哪个物理机上开虚拟机呢,这要靠nova-scheduler;

网络池化模块Neutron:OpenStack的网络虚拟化主要使用Openvswitch,然而对于每一个Openvswitch的虚拟网络、虚拟网卡、VLAN、带宽的配置,不需要登录到集群上配置,Neutron可以通过SDN的方式进行配置;

存储池化模块Cinder:
OpenStack的存储虚拟化,如果使用本地盘,则基于LVM,使用哪个LVM上分配的盘,也是通过scheduler来的。后来就有了将多台机器的硬盘打成一个池的方式Ceph,而调度的过程,则在Ceph层完成。

于是vmware有了自己的vcloud。

虚拟化很好的解决了上面的三个问题:

为啥云计算有这么多开源的东西,却不是人人都能做?我觉得有以下原因:

OpenStack带来私有云市场的红海

有了OpenStack,所有的私有云厂商都疯了,原来VMware在私有云市场赚的实在太多了,眼巴巴的看着,没有对应的平台可以和他抗衡。现在有了现成的框架,再加上自己的硬件设备,几乎所有的IT厂商巨头,全部都加入到社区里,将OpenStack开发为自己的产品,连同硬件设备一起,杀入私有云市场。

于是基于Xen和KVM的私有云平台CloudStack,后来Citrix将其收购后开源。

人工运维:虚拟机的创建和删除都可以远程操作,虚拟机被玩坏了,删了再建一个分钟级别的。虚拟网络的配置也可以远程操作,创建网卡,分配带宽都是调用接口就能搞定的。

一方面,这就跟盖楼一样。盖楼的技术没什么难的(当然,盖高楼是很难的),但是你没地你怎么盖?我觉得云计算也一样,带宽的价格贵得就像土地的价格。其实云计算跟房地产一样,要占地、占机房、占带宽。如果能把中国所有的机房、机柜、带宽资源都买了,你就不用做云计算了,卖土地就够了——因为这些是有限的。最简单的例子,IP地址是有限的。你有带宽、有机房,但是如果你没有IP,这就不好玩了。尤其是你要提供CDN服务,这个就更明显,因为有多少物理节点直接决定你的CDN服务质量。

公有or私有?网易的选择

网易当然也没有错过这次风口,上线了自己的OpenStack集群,网易蜂巢基于OpenStack自主研发了IaaS服务,在计算虚拟化方面,通过裁剪KVM镜像,优化虚拟机启动流程等改进,实现了虚拟机的秒级别启动。在网络虚拟化方面,通过SDN和Openvswitch技术,实现了虚拟机之间的高性能互访。在存储虚拟化方面,通过优化Ceph存储,实现高性能云盘。

但是网易并没有杀进私有云市场,而是使用OpenStack支撑起了自己的应用,这是互联网的思维。而仅仅是资源层面弹性是不够的,还需要开发出对应用部署友好的组件。例如数据库,负载均衡,缓存等,这些都是应用部署必不可少的,也是网易在大规模应用实践中,千锤百炼过的。这些组件称为PaaS。

当这些私有云平台在用户的数据中心里面卖的其贵无比,赚的盆满钵满的时候。有其他的公司开始了另外的选择,这就是AWS和Google,开始了公有云领域的探索。

浪费资源:虚拟化了以后,资源可以分配的很小很小,比如1个cpu,1G内存,1M带宽,1G硬盘,都可以被虚拟出来。

另一方面,正如前面所说的,运维是件很难的事,运维这个事并不是一般人能搞的事。没有足够的场景、经验和时间,这种能力很难出现。

第四阶段:分,即容器

现在来谈谈,应用层面,即PaaS层。

前面一直在讲IaaS层的故事,也即基础设施即服务,基本上在谈计算、网络、存储的事情。现在应该说说应用层,即PaaS层的事情了。

AWS最初就是基于Xen技术进行虚拟化的,并且最终形成了公有云平台。也许AWS最初只是不想让自己的电商领域的利润全部交给私有云厂商吧,于是自己的云平台首先支撑起了自己的业务,在这个过程中,AWS自己严肃的使用了自己的云计算平台,使得公有云平台不是对于资源的配置更加友好,而是对于应用的部署更加友好,最终大放异彩。

隔离性差:每个虚拟机有独立的cpu,
内存,硬盘,网卡,不同虚拟机的应用互不干扰。

从用户的角度来说呢,云计算是一种服务,你需要对用户企业内的解决方案要有很好的了解,这样才能提高很好的服务。能提供“好服务”的通常都是把自己真正当成用户公司。

1. PaaS的定义与作用

IaaS的定义比较清楚,PaaS的定义就没那么清楚了。有人把数据库、负载均衡、缓存作为PaaS服务;有人把大数据Hadoop,、Spark平台作为PaaS服务;还有人将应用的安装与管理,例如Puppet、
Chef,、Ansible作为PaaS服务。

其实PaaS主要用于管理应用层。我总结为两部分:一部分是你自己的应用应当自动部署,比如Puppet、Chef、Ansible、
Cloud
Foundry等,可以通过脚本帮你部署;另一部分是你觉得复杂的通用应用不用部署,比如数据库、缓存、大数据平台,可以在云平台上一点即得。

要么就是自动部署,要么就是不用部署,总的来说就是应用层你也少操心,就是PaaS的作用。当然最好还是都不用去部署,一键可得,所以公有云平台将通用的服务都做成了PaaS平台。另一些你自己开发的应用,除了你自己其他人不会知道,所以你可以用工具变成自动部署。

如果我们仔细观察就会发现,私有云和公有云使用的是类似的技术,却在产品设计上是完全不同的两种生物。私有云厂商和公有云厂商也拥有类似的技术,却在产品运营上呈现出完全不同的基因。

在虚拟化阶段,领跑者是VMware,可以实现基本的计算,网络,存储的虚拟化。

这跟做汽车一样,底层做引擎、轮子、油箱、控制系统,给你弄一堆零件,上层可以拼装。PaaS相当于给你一个很快可以打造成的汽车的工作台。而SaaS就是成品——两厢、三厢、卡车、轿车,最终用户要的是这个。后面什么Xen、存储、分布式,跟我一毛钱关系没有,我就要知道汽车是安全的,性能好的,省油的,不会抛锚、耐用的,千万别速度快了或者坡度大了或是别的怎么样就失灵了。

2. PaaS的优点

PaaS最大的优点,就是可以实现应用层的弹性伸缩。比如在双十一期间,10个节点要变成100个节点,如果使用物理设备,再买90台机器肯定来不及,仅仅有IaaS实现资源的弹性是不够的,再创建90台虚拟机,也是空的,还是需要运维人员一台一台地部署。所以有了PaaS就好了,一台虚拟机启动后,马上运行自动部署脚本,进行应用的安装,90台机器自动安装好了应用,才是真正的弹性伸缩。

私有云厂商都是卖资源的,所以往往在卖私有云平台的时候往往伴随着卖计算,网络,存储设备。在产品设计上,私有云厂商往往强调又长又详尽,但是客户几乎不会使用的计算,网络,存储的技术参数,因为这些参数可以用来和友商对标的过程中占尽优势。私有云的厂商几乎没有自己的大规模应用,所以私有云厂商的平台做出来是给别人用的,自己不会大规模使用,于是产品往往围绕资源展开,而不会对应用的部署友好。

永利酒店赌场,当然这个世界有闭源,就有开源,有Windows就有Linux,有iOS就有Andord,有VMware,就有Xen和KVM。在开源虚拟化方面,Citrix的Xen做的不错,后来Redhat在KVM发力不少。

卖汽车也是卖服务。造出汽车来,并不代表你搞定这个事了。如果没有公路、没有加油站、没有4s店、没有交通管理、规则等等,你要么用不了,要么就是乱七八糟。不能只让用户在那看着你的汽车好牛啊,但是用户不知道怎么用。所以说,云计算最终旁边必须要有一套服务设施,而这套服务设施也是今天被人低估的。

3. PaaS部署的问题

当然这种部署方式也有一个问题,就是无论Puppet、
Chef、Ansible把安装脚本抽象的再好,说到底也是基于脚本的,然而应用所在的环境千差万别。文件路径的差别,文件权限的差别,依赖包的差别,应用环境的差别,Tomcat、
PHP、
Apache等软件版本的差别,JDK、Python等版本的差别,是否安装了一些系统软件,是否占用了哪些端口,都可能造成脚本执行的不成功。所以看起来是一旦脚本写好,就能够快速复制了,但是环境稍有改变,就需要把脚本进行新一轮的修改、测试、联调。例如在数据中心写好的脚本移到AWS上就不一定直接能用,在AWS上联调好了,迁移到Google
Cloud上也可能会再出问题。

公有云的厂商往往都是有自己的大规模应用需要部署的,所以其产品的设计,可以将常见的应用部署所需要的模块作为组件提供出来,用户可以像拼积木一样,拼接一个适用于自己应用的架构。公有云厂商不必要关心各种技术参数的PK,不必关心是否开源,是否兼容各种虚拟化平台,兼容各种服务器设备,网络设备,存储设备。你管我用什么,客户部署应用方便就好。

对于网络虚拟化,有Open
vSwitch,可以通过命令创建网桥,网卡,设置VLAN,设置带宽。

云计算有两个东西我觉得是被人低估的,一个是运维,一个是那堆服务。做服务的需要有生态环境,有人帮你做。所以做云计算要落地并不简单。

容器的诞生

当然公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,没错,互联网行业嘛,基本上就是一家独大。第二名如何逆袭呢?开源是很好的办法,让整个行业大家一起为这个云平台出力,兄弟们,大家一起上。于是Rackspace与美国航空航天局(NASA)合作创始了开源云平台OpenStack。OpenStack现在发展的和AWS有点像了,所以从OpenStack的模块组成,可以看到云计算池化的方法。

对于存储虚拟化,对于本地盘,有LVM,可以将多个硬盘变成一大块盘,然后在里面切出一小块给用户。

这跟IBM一样。IBM有段时间也是快不行了,他们的CEO写了一本《谁说大象不能跳舞》,讲IBM的转型,从卖硬件的转成卖服务、解决方案,有流程、咨询,顺便卖硬件,带着一堆系统集成商一起玩。我给你解决方案,谁来实现呢,就是集成商帮你,然后顺便把硬件卖给你。一样。未来是什么样,历史上已经有了。你看,要干那么多事,而且还不是用人堆就可以堆出来的。这就是云计算的门槛。

1. 容器的定义

于是容器便应运而生。容器是Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。设想没有集装箱的时代,如果将货物从A运到B,中间要经过三个码头,换三次船的话,货物每次都要卸下船来,摆的七零八落,然后换船的时候,需要重新摆放整齐,在没有集装箱的时候,船员们都需要在岸上待几天再走。而在有了集装箱后,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,整体一个箱子搬过去就可以了,小时级别就能完成,船员再也不用长时间上岸等待了。

OpenStack包含哪些组件呢?

但是虚拟化也有缺点,通过虚拟化软件创建虚拟机,需要人工指定放在哪台机器上,硬盘放在哪个存储设备上,网络的VLAN
ID,带宽具体的配置,都需要人工指定。所以单单使用虚拟化的运维工程师往往有一个Excel表格,有多少台机器,每台机器部署了哪些虚拟机。所以,一般虚拟化的集群数目都不是特别的大。

总之,云计算是需要吃自己的狗食才能吃出来的,绝不是像手机上的Apps一样,你想一想、试一试就能搞出来的,你首先需要让自己有这样的场景,有这样的经历,你才可能会有这样的经验和能力。

2.容器在开发中的应用

设想A就是程序员,B就是用户,货物就是代码及运行环境,中间的三个码头分别是开发,测试,上线。假设代码的运行环境如下:

  1. Ubuntu操作系统

  2. 创建用户hadoop

  3. 下载解压JDK 1.7在某个目录下

  4. 将这个目录加入JAVA_HOME和PATH的环境变量里面

  5. 将环境变量的export放在hadoop用户的home目录下的.bashrc文件中

  6. 下载并解压tomcat 7

  7. 将war放到tomcat的webapp路径下面

  8. 修改tomcat的启动参数,将Java的Heap Size设为1024M

看,一个简单的Java网站,就需要考虑这么多零零散散的东西,如果不打包,就需要在开发,测试,生产的每个环境上查看,保证环境的一致,甚至要将这些环境重新搭建一遍,就像每次将货物打散了重装一样麻烦。中间稍有差池,比如开发环境用了JDK
1.8,而线上是JDK
1.7;比如开发环境用了root用户,线上需要使用hadoop用户,都可能导致程序的运行失败。

第五阶段,未完,待续~~欲知容器如何对应用打包,且听下回分解。

  • 计算池化模块Nova:OpenStack的计算虚拟化主要使用KVM,然而到底在那个物理机上开虚拟机呢,这要靠nova-scheduler。
  • 网络池化模块Neutron:OpenStack的网络虚拟化主要使用Openvswitch,然而对于每一个Openvswitch的虚拟网络,虚拟网卡,VLAN,带宽的配置,不需要登录到集群上配置,Neutron可以通过SDN的方式进行配置。
  • 存储池化模块Cinder:OpenStack的存储虚拟化,如果使用本地盘,则基于LVM,使用哪个LVM上分配的盘,也是用过scheduler来的。后来就有了将多台机器的硬盘打成一个池的方式Ceph,则调度的过程,则在Ceph层完成。

为了解决虚拟化阶段的问题,人们想到的一个方式为池化,也就是说虚拟化已经将资源分的很细了,但是对于如此细粒度的资源靠Excel去管理,成本太高,能不能打成一个大的池,当需要资源的时候,帮助用户自动的选择,而非用户指定。所以这个阶段的关键点:调度器Scheduler。

云计算的市场细分

有了OpenStack,所有的私有云厂商都疯了,原来VMware在私有云市场实在赚的太多了,眼巴巴的看着,没有对应的平台可以和他抗衡。现在有了现成的框架,再加上自己的硬件设备,你可以想象到的所有的IT厂商的巨头,全部加入到社区里面来,将OpenStack开发为自己的产品,连同硬件设备一起,杀入私有云市场。

于是VMware有了自己的vCloud。

市场细分必然是市场来驱动的。市场变化太快,说不清楚,不过大的方向应该会是这样的:有类是需要玩计算密集型的(比如大数据计算、网络游戏),有类是需要玩IO密集型的(比如视频网站),有类就是为了建网站的(比如电子商务、门户网站、无线),有类是为了数据安全和保密的(比如金融数据)。

网易当然也没有错过这次风口,上线了自己的OpenStack集群,网易蜂巢基于OpenStack自主研发了IaaS服务,在计算虚拟化方面,通过裁剪KVM镜像,优化虚拟机启动流程等改进,实现了虚拟机的秒级别启动。在网络虚拟化方面,通过SDN和Openvswitch技术,实现了虚拟机之间的高性能互访。在存储虚拟化方面,通过优化Ceph存储,实现高性能云盘。

于是基于Xen和KVM的私有云平台CloudStack,后来Citrix将其收购后开源。

从更高的层面来看,社会也需要分工。有的人卖土地,有的人卖房子,有的人装修,有的人是中介。我相信没人愿意把所有的赌注都押在一个地方。云计算也是一样。上面也说过,无论IaaS、PaaS、SaaS,后面的S都是service,本质上都是提供服务。所以,我认为,市场的细分本质上就是服务的细分。

但是网易并没有杀进私有云市场,而是使用OpenStack支撑起了自己的应用,这是互联网的思维,没错。仅仅是资源层面弹性是不够的,还需要开发出对应用部署友好的组件。例如数据库,负载均衡,缓存等,这些都是应用部署必不可少的,也是网易在大规模应用实践中,千锤百炼过的。这些组件称为PaaS。

当这些私有云平台在用户的数据中心里面卖的其贵无比,赚的盆满钵满的时候。有其他的公司开始了另外的选择,这就是AWS和Google,开始了公有云领域的探索。

看看历史我们知道,细分永远是跟着行业走的,也是跟着业务走的,所以,在业务层会出现更多的细分。

前面一直在讲IaaS层的故事,也即基础设施即服务,基本上在谈计算,网络,存储的事情。现在应该说说应用层的事情了。

AWS最初就是基于Xen技术进行虚拟化的,并且最终形成了公有云平台。也许AWS最初只是不想让自己的电商领域的利润全部交给私有云厂商吧,于是自己的云平台首先支撑起了自己的业务,在这个过程中,AWS自己严肃的使用了自己的云计算平台,使得公有云平台不是对于资源的配置更加友好,而是对于应用的部署更加友好,最终大放异彩。

对阿里云产业细分的看法

IaaS的定义比较清楚,PaaS的定义就没那么清楚了,有的把数据库,负载均衡,缓存作为PaaS服务,有的把大数据Hadoop,
Spark平台作为PaaS服务,有的讲应用的安装与管理,例如Puppet, Chef,
Ansible作为PaaS服务。

公有云的第一名AWS活的很爽,第二名Rackspace就不太爽了,没错,互联网行业嘛,基本上就是一家独大。第二名如何逆袭呢?开源是很好的办法,让整个行业大家一起为这个云平台出力,兄弟们,大家一起上。于是Rackspace与美国航空航天局(NASA)合作创始了开源云平台OpenStack。OpenStack现在发展的和AWS有点像了,所以从OpenStack的模块组成,可以看到云计算池化的方法。

政府云、金融云不太清楚,不过我很清楚电商云——就是我之前负责的聚石塔。聚石塔时间不长,2012年9月正式上线,去年是大发展的一年,作为垂直云解决的很好。天猫和淘宝做的都是下单前的东西,下单后,商家每天处理好几百单,需要做订单合并、筛选,有的商家规模不大但订单很多。海尔有ERP,这些商家没有,但是每天也1000多单,如果没有信息化的系统,人肉是处理不了的,必然要有ERP系统处理订单。另外还要管理用户,给用户做营销、发展忠实用户。总之,都是卖东西以后的事情。咋办?

其实PaaS主要用于管理应用层的,我总结两部分:一部分是你自己的应用应当自动部署,比如Puppet,
Chef, Ansible, Cloud
Foundry等,可以通过脚本帮你部署,一部分是你觉得复杂的通用应用不用部署,比如数据库,缓存,大数据平台,可以在云平台上一点即得。

永利酒店赌场 2

淘宝天猫给了一堆开放API,你可以调我的API接入,在你那边有ISV帮你做一套东西远程访问淘宝API,把订单拉过去,仓库进货了之后,通过API把库存改一下,就可以连起来了。天猫用户下单,到他的系统、他的仓库,他就发货了,仓库补完货,在他的系统里一改,自动就到天猫店了。这是电子信息化。

要么就是自动部署,要么不用部署,总的来说就是应用层您也少操心,就是PaaS的作用。当然最好是都不用部署,一键可得,所以公有云平台将通用的服务都做成了PaaS平台。另一些应用,是您自己开发的,除了你自己,其他人都不知道,所以您可以用工具变成自动部署。

OpenStack包含哪些组件呢?

但是一到双十一就受不了:订单量太大。正好云平台出现了,再怎么样,阿里的运维能力也要比你商家的要强吧。你看,聚石塔卖的是服务,不是主机。另外是数据安全:商家的系统天天被黑客盯着,如果我们把用户信息都给商家,不是所有的商家的系统安全都做得很好,内部的人插个什么U盘,上面一堆木马,数据就被偷走了。偷走了之后,别人还说是阿里搞丢的,这当然不行。所以,我们又要开放,还要保证安全,聚石塔这个云平台就这样出来的:你来我这儿,我才开放给你,因为安全很重要。

有了PaaS最大的优点,就是可以实现应用层的弹性伸缩。比如双十一来了,10个节点要变成100个节点,如果使用物理设备,再买90台机器固然来不及,仅仅只有IaaS实现资源的弹性是不够的,再创建90台虚拟机,也是空的啊,还是需要运维人员一台一台的部署。所以有了PaaS就好了,一台虚拟机启动后,马上运行自动部署脚本,进行应用的安装,90台机器自动安装好了应用,才是真正的弹性伸缩。

计算池化模块Nova:OpenStack的计算虚拟化主要使用KVM,然而到底在那个物理机上开虚拟机呢,这要靠nova-scheduler。

保证性能和安全也是商家的利益诉求也在里面,商家也不希望用户数据被偷,他也希望双十一能抗住。

当然这种部署方式也有一个问题,就是无论Puppet, Chef,
Ansible把安装脚本抽象的再好,说到底也是基于脚本的,然而应用所在的环境千差万别,文件路径的差别,文件权限的差别,依赖包的差别,应用环境的差别,Tomcat,
PHP,
Apache等软件版本的差别,JDK,Python等版本的差别,是否安装了一些系统软件,是否占用了哪些端口,都可能造成脚本执行的不成功。所以看起来是一旦脚本写好,就能够快速复制了,但是一旦环境稍有改变,就需要把脚本进行新一轮的修改,测试,联调。例如在数据中心写好的脚本,移到AWS上就不一定直接能用,在AWS上联调好了,迁移到Google
Cloud上去也可能再会出问题。

网络池化模块Neutron:OpenStack的网络虚拟化主要使用Openvswitch,然而对于每一个Openvswitch的虚拟网络,虚拟网卡,VLAN,带宽的配置,不需要登录到集群上配置,Neutron可以通过SDN的方式进行配置。

另外,很多商家自己不会做,所以要ISV(第三方软件开发商)来做,所以这个是卖解决方案,跟IBM很相似。银行要一套系统,IBM提供硬件和解决方案,系统集成商来帮银行写代码和集成系统。聚石塔也很像,聚石塔提供API、ECS、数据库,第三方的ISV进来帮商家集成一个系统。这是很经典的也是很传统的IBM的玩法,只不过是玩在了云端。

于是容器应运而生。容器是Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。设想没有集装箱的时代,如果从A将货物运到B,中间要经过三个码头,换三次船的话,每次货物都要卸下船来,摆的七零八落,然后再换船的时候,需要重新整齐摆好,所以没有集装箱的时候,船员们都能够在岸上待几天再走。然而有了集装箱,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,整体一个箱子搬过去就可以了,小时级别就能完成,船员再也不能上岸长时间休息了。所以设想A就是程序员,B就是用户,货物就是代码及运行环境,中间的三个码头分别是开发,测试,上线。

存储池化模块Cinder:OpenStack的存储虚拟化,如果使用本地盘,则基于LVM,使用哪个LVM上分配的盘,也是用过scheduler来的。后来就有了将多台机器的硬盘打成一个池的方式Ceph,则调度的过程,则在Ceph层完成。

你看,这也是做自己的长项做出来的细分市场。所以说,吃自己的狗食很重要。

 

有了OpenStack,所有的私有云厂商都疯了,原来VMware在私有云市场实在赚的太多了,眼巴巴的看着,没有对应的平台可以和他抗衡。现在有了现成的框架,再加上自己的硬件设备,你可以想象到的所有的IT厂商的巨头,全部加入到社区里面来,将OpenStack开发为自己的产品,连同硬件设备一起,杀入私有云市场。

对PaaS的看法

假设代码的运行环境如下:

网易当然也没有错过这次风口,上线了自己的OpenStack集群,网易云基础服务(网易蜂巢)基于OpenStack自主研发了IaaS服务,在计算虚拟化方面,通过裁剪KVM镜像,优化虚拟机启动流程等改进,实现了虚拟机的秒级别启动。在网络虚拟化方面,通过SDN和Openvswitch技术,实现了虚拟机之间的高性能互访。在存储虚拟化方面,通过优化Ceph存储,实现高性能云盘。

无论是Google的GAE还是新浪的SAE都是给个容器,给个容器的好处是不用管数据连接、CPU什么,程序一传就能用,什么水平扩展都不用管。不爽的是,一个是在编程上限制太多:AppEngine总会阉割很多系统相关的功能,比如Java、PHP、Python的很多系统调用都阉割了,因为如果给你这些系统调用,你就可以突破沙箱;另一个是有故障的时候:技术人遇到问题都恨不得自己上去解决,想看看后面在忙啥,但是看不到,很无助,只能等你解决,就看你的人解决的好不好、快不快。所以如果IaaS没做好,运维、故障自动处理、迁移没做好,出了问题用户只能干瞪眼,PaaS必然不好用。当然IaaS层也有这个问题,但是至少你还可以登到机器上看一看,大不了重启一下。像AWS,你重启一下就跑到别的物理机,问题也许就解决了。

1.        Ubuntu操作系统

但是网易并没有杀进私有云市场,而是使用OpenStack支撑起了自己的应用,仅仅是资源层面弹性是不够的,还需要开发出对应用部署友好的组件。

其实,对于PaaS中间这层的确很尴尬。怎么解决?我觉得还是要依赖某种业务场景。单纯一个平台要阉割很多功能,搞得用户不舒服,还不如干脆一步到位,根据业务场景给一个编程框架。比如SAE可以就做微博app,上来就调API,数据库都ready;或者微信如果做个PaaS,上面只玩微信公众平台上的东西,也可以。我觉得PaaS层更贴合业务会更成功。给新浪微博做个插件,你去买个VM、买数据库?这种时候很需要PaaS。我觉得PaaS层要成功就要贴近业务场景。比如:腾讯的风铃系统(虽然不知道企业帐号看见是什么样的),就做无线建站,这样多好。干巴巴的PaaS有点高不成低不就。

2.        创建用户hadoop

永利酒店赌场 3

对SDN的看法

3.        下载解压缩JDK 1.7在某个目录下

随着公有云和基于OpenStack的私有云越来越成熟,构造一个成千上万个物理节点的云平台以及不是问题,而且很多云厂商都会采取多个数据中心部署多套云平台,总的规模数量就更加大了,在这个规模下,对于客户感知来说,基本上可以实现想什么时候要什么时候要,想要多少要多少。

SDN其意图是想改变目前超级复杂的网络结构。意图是挺好的。想一想,如果以后我家的网络不用因为买个新的路由器都要重新设计一把,只要一次设置,然后对所有的路由器都通过,的确是挺方便的,这点对企业非常好。不过,不知道在操作上怎么做,也许会从企业内部开始这场革命,这个不得而知。

4.        将这个目录加入JAVA_HOME和PATH的环境变量里面

云计算解决了基础资源层的弹性伸缩,却没有解决应用随基础资源层弹性伸缩而带来的批量、快速部署问题。比如在双十一期间,10个节点要变成100个节点,如果使用物理设备,再买90台机器肯定来不及,仅仅有IaaS实现资源的弹性是不够的,再创建90台虚拟机,也是空的,还是需要运维人员一台一台地部署。于是有了PaaS层,PaaS主要用于管理应用层。我总结为两部分:一部分是你自己的应用应当自动部署,比如Puppet、Chef、Ansible、
Cloud
Foundry,CloudFormation等,可以通过脚本帮你部署;另一部分是你觉得复杂的通用应用不用部署,比如数据库、缓存等可以在云平台上一点即得。

就像开车一样,机械式的方向盘和刹车油门系统这么多年都没什么变化,也提过很多更好更高科技的解决方案,但是传统还是这样延续下来了。所以,SDN真不知道未来会怎么样。总之,一个老的事物到一个新的事物需要有一个过程,这个过程中会出现很多过渡产品或是过渡方案,如果没有这些过渡产品和方案,也就没法达到新的事物。未来是什么样,无法预知。

5.        将环境变量的export放在hadoop用户的home目录下的.bashrc文件中

要么就是自动部署,要么就是不用部署,总的来说就是应用层你也少操心,就是PaaS的作用。当然最好还是都不用去部署,一键可得,所以公有云平台将通用的服务都做成了PaaS平台。另一些你自己开发的应用,除了你自己其他人不会知道,所以你可以用工具变成自动部署。

对私有云的看法

6.        下载并解压缩tomcat 7

当然这种部署方式也有一个问题,就是无论Puppet、
Chef、Ansible把安装脚本抽象的再好,说到底也是基于脚本的,然而应用所在的环境千差万别。文件路径的差别,文件权限的差别,依赖包的差别,应用环境的差别,Tomcat、
PHP、
Apache等软件版本的差别,JDK、Python等版本的差别,是否安装了一些系统软件,是否占用了哪些端口,都可能造成脚本执行的不成功。所以看起来是一旦脚本写好,就能够快速复制了,但是环境稍有改变,就需要把脚本进行新一轮的修改、测试、联调。例如在数据中心写好的脚本移到AWS上就不一定直接能用,在AWS上联调好了,迁移到Google
Cloud上也可能会再出问题。

私有云跟公有云,都会存在。这跟人一样,私人生活和公众生活都会需要的。大公司有1万、2万人,这么多数据,要存,需要一个很稳定的解决方案。要稳定可以买IBM,但是贵。云计算出来说,我可以写三份,但他不想上公有云,我的数据放在别人那里,总感觉不好的,所以有了私有云做物理隔离,他觉得安全。

7.        将war放到tomcat的webapp路径下面

于是容器应运而生。

安全这个词对应两个英文,security和safety,其实security和safety不一样:云计算解决safety,保证数据不丢;宁可数据丢也不让人看到,那是security。比如私人照片我更愿意存家里,有一个小的云存储,所有设备同步,跟老家父母同步,这样比较好。放公网很恐怖。

8.        修改tomcat的启动参数,将Java的Heap Size设为1024M

永利酒店赌场 4

一定会有公司不愿意上云的,比如金融方面的企业,他们觉得互联网不安全,他们要的更多的是安全。在公网上你的系统的安全攻防能力都要跟上,但如果物理不通的话就不用考虑的太复杂。企业内部私有云肯定有市场。你看,好些企业内部目前还被EMC、IBM所垄断着呢。计算机发展史就是廉价的东西取代昂贵的东西,所以私有云一定没问题,而降低私有云的运维复杂度、提供一个或多个方便的运维系统和工具就是重中之重中。其中,SDN之类的东西肯定会是其中一个很重要的一块。

 

容器是Container,Container另一个意思是集装箱,其实容器的思想就是要变成软件交付的集装箱。集装箱的特点,一是打包,二是标准。

另外,还是那句话,云就是服务,只要提供了好的服务,无论公有还是私有都是会有价值的。

看,一个简单的Java网站,就需要考虑这么多零零散散的东西,如果不打包,就需要在开发,测试,生产的每个环境上查看保证环境的一致,甚至要将这些环境重新搭建一遍,就像每次将货物打散了重装一样麻烦,中间稍有差池,比如开发环境用了JDK
1.8,而线上是JDK
1.7,比如开发环境用了root用户,线上需要使用hadoop用户,都可能导致程序的运行失败。

永利酒店赌场 5

本文转载自infoQ

容器如何对应用打包呢?还是要学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,互相隔离,这样装货卸货才方便。好在ubuntu中的lxc技术早就能做到这一点,这里主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个namespace中的应用看到的是不同的IP地址,用户空间,进程号等。另一种是用起来是隔离的,称为cgroup,也即明明整台机器有很多的CPU,内存,而一个应用只能用其中的一部分。

在没有集装箱的时代,假设将货物从A运到B,中间要经过三个码头、换三次船。每次都要将货物卸下船来,摆的七零八落,然后搬上船重新整齐摆好。因此在没有集装箱的时候,每次换船,船员们都要在岸上待几天才能走。

有了这两项技术,集装箱的铁盒子我们是焊好了,接下来是决定往里面放什么的时候了。最简单粗暴的方法,就是将上面列表中所有的都放到集装箱里面。但是这样太大了,因为虚拟机的镜像就是这样的,动辄几十G,如果你安装一个干干静静的ubuntu操作系统,什么都不装,就很大了。这其实相当于把船也放到了集装箱里面,答案当然是NO.

永利酒店赌场 6

所以撇下第一项操作系统,剩下的所有的加起来,也就几百M,就轻便多了。所以一台服务器上的容器是共享操作系统内核的,容器在不同机器之间的迁移不带内核,这也是很多人声称容器是轻量级的虚拟机的原因。轻不白轻,自然隔离性就差了,一个集装箱把船压漏水了,所有的集装箱一起沉。

有了集装箱以后,所有的货物都打包在一起了,并且集装箱的尺寸全部一致,所以每次换船的时候,一个箱子整体搬过去就行了,小时级别就能完成,船员再也不能上岸长时间耽搁了。

另一个需要撇下的就是随着应用的运行而产生并保存在本地的数据,多以文件的形式存在,例如数据库文件,文本文件。这些文件会随着应用的运行,越来越大,如果这些数据也放在容器里面,会让容器变得很大,影响容器在不同环境的迁移。而且这些数据在开发,测试,线上环境之间的迁移是没有意义的,生产环境不可能用测试环境的文件,所以往往这些数据也是保存在容器外面的存储设备上。也是为什么人们称容器是无状态的。

这是集装箱“打包”、“标准”两大特点在生活中的应用。

至此集装箱焊好了,货物也装进去了,接下来就是如何将这个集装箱标准化,从而在哪艘船上都能运输。这里的标准一个是镜像,一个是容器的运行环境。所谓的镜像,就是将你焊好集装箱的那个时刻,将集装箱的状态保存下来,就像孙悟空说定,集装箱里面就定在了那一刻,然后将这一刻的状态保存成一系列文件。这些文件的格式是标准的,谁看到这些文件,都能还原当时定住的那个时刻。将镜像还原成运行时的过程,就是读取镜像文件,还原那个时刻的过程,也就是容器的运行的过程。除了大名鼎鼎的Docker,还有其他的容器,例如AppC,Mesos
Container,都能运行容器镜像。所以说容器不等于Docker。

部署任何一个应用,也包含很多零零散散的东西,权限,用户,路径,配置,应用环境等!这就像很多零碎地货物,如果不打包,就需要在开发、测试、生产的每个环境上重新查看以保证环境的一致,有时甚至要将这些环境重新搭建一遍,就像每次将货物卸载、重装一样麻烦。中间稍有差池,都可能导致程序的运行失败。

总而言之,容器是轻量级的,隔离差的,适用于无状态的,基于镜像标准实现跨主机,跨环境的随意迁移。

永利酒店赌场 7

有了容器,使得PaaS层对于用户自身应用的自动部署变得快速而优雅。容器快,快在了两方面,第一是虚拟机启动的时候要先启动操作系统,容器不用启动操作系统,因为是共享内核的。第二是虚拟机启动后使用脚本安装应用,容器不用安装应用,因为已经打包在镜像里面了。所以最终虚拟机的启动是分钟级别,而容器的启动是秒级。容器咋这么神奇。其实一点都不神奇,第一是偷懒少干活了,第二是提前把活干好了。

那么容器如何对应用打包呢?还是要学习集装箱,首先要有个封闭的环境,将货物封装起来,让货物之间互不干扰,互相隔离,这样装货卸货才方便。

因为容器的启动快,人们往往不会创建一个个小的虚拟机来刚刚部署应用,因为这样太费时间了,而是创建一个大的虚拟机,然后在大的虚拟机里面再划分容器,而不同的用户不共享大的虚拟机,可以实现操作系统内核的隔离。

封闭的环境主要使用了两种技术,一种是看起来是隔离的技术,称为namespace,也即每个namespace中的应用看到的是不同的IP地址、用户空间、程号等。另一种是用起来是隔离的技术,称为cgroup,也即明明整台机器有很多的CPU、内存,而一个应用只能用其中的一部分。

 这又是一次合久必分的过程。由IaaS层的虚拟机池,划分为更细粒度的容器池。

有了这两项技术,集装箱的铁盒子我们是焊好了,接下来就是如何将这个集装箱标准化,从而在哪艘船上都能运输。这里的标准一个是镜像,一个是容器的运行环境。

 容器的粒度更加细,管理起来更难管,甚至是手动操作难以应对的。假设你有100台物理机,其实规模不是太大,用Excel人工管理是没问题的,但是一台上面开10台虚拟机,虚拟机的个数就是1000台,人工管理已经很困难了,但是一台虚拟机里面开10个容器,就是10000个容器,你是不是已经彻底放弃人工运维的想法了。

所谓的镜像,就是将你焊好集装箱的那个时刻,将集装箱的状态保存下来,就像孙悟空说定,集装箱里面就定在了那一刻,然后将这一刻的状态保存成一系列文件。这些文件的格式是标准的,谁看到这些文件,都能还原当时定住的那个时刻。将镜像还原成运行时的过程(就是读取镜像文件,还原那个时刻的过程)就是容器的运行的过程。

所以容器层面的管理平台是一个新的挑战,关键字就是自动化:

有了容器,云计算才真正实现了应用层和资源层的完全弹性。

  • 自发现:容器与容器之间的相互配置还能像虚拟机一样,记住IP地址,然后互相配置吗?这么多容器,你怎么记得住一旦一台虚拟机挂了重启,IP改变,应该改哪些配置,列表长度至少万行级别的啊。所以容器之间的配置通过名称来的,无论容器跑到哪台机器上,名称不变,就能访问到。
  • 自修复:容器挂了,或是进程宕机了,能像虚拟机那样,登陆上去查看一下进程状态,如果不正常重启一下么?你要登陆万台docker了。所以容器的进程挂了,容器就自动挂掉了,然后自动重启。
  • 弹性自伸缩 Auto
    Scaling:当容器的性能不足的时候,需要手动伸缩,手动部署么?当然也要自动来。

在云计算的发展过程中,云计算逐渐发现自己除了资源层面的管理,还能够进行应用层面的管理,而大数据应用作为越来越重要的应用之一,云计算也可以放入PaaS层管理起来,而大数据也发现自己越来越需要大量的计算资源,而且想什么时候要就什么时候要,想要多少就要多少,于是两者相遇,相识,相知,走在了一起。

如果有了容器的管理平台,又是一次分久必合。

永利酒店赌场 8

当前火热的容器管理平台有三大流派:

说到大数据,首先我们来看一下数据的分类,我们生活中的数据总体分为两种:
结构化数据和非结构化数据。

  • 一个是Kubernetes,我们称为段誉型。段誉(Kubernetes)的父亲(Borg)武功高强,出身皇族(Google),管理过偌大的一个大理国(Borg是Google数据中心的容器管理平台)。作为大理段式后裔,段誉的武功基因良好(Kubernetes的理念设计比较完善),周围的高手云集,习武环境也好(Kubernetes生态活跃,热度高),虽然刚刚出道的段誉武功不及其父亲,但是只要跟着周围的高手不断切磋,武功既可以飞速提升。
  • 一个是Mesos,我们称为乔峰型。乔峰(Mesos)的主要功夫降龙十八掌(Mesos的调度功能)独步武林,为其他帮派所无。而且乔峰也管理过人数众多的丐帮(Mesos管理过Tweeter的容器集群)。后来乔峰从丐帮出来,在江湖中特例独行(Mesos的创始人成立了公司Mesosphere)。乔峰的优势在于,乔峰的降龙十八掌(Mesos)就是在丐帮中使用的降龙十八掌,相比与段誉初学其父的武功来说,要成熟很多。但是缺点是,降龙十八掌只掌握在少数的几个丐帮帮主手中(Mesos社区还是以Mesosphere为主导),其他丐帮兄弟只能远远崇拜乔峰,而无法相互切磋(社区热度不足)。
  • 一个是Swarm,我们称为慕容型。慕容家族(Swarm是Docker家族的集群管理软件)的个人功夫是非常棒的(Docker可以说称为容器的事实标准),但是看到段誉和乔峰能够管理的组织规模越来越大,有一统江湖的趋势,着实眼红了,于是开始想创建自己的慕容鲜卑帝国(推出Swarm容器集群管理软件)。但是个人功夫好,并不代表着组织能力强(Swarm的集群管理能力),好在慕容家族可以借鉴段誉和乔峰的组织管理经验,学习各家公司,以彼之道,还施彼身,使得慕容公子的组织能力(Swarm借鉴了很多前面的集群管理思想)也在逐渐的成熟中。

结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。

三大容器门派,到底鹿死谁手,谁能一统江湖,尚未可知。

非结构化数据:指不定长或无固定格式的数据,如邮件, word 文档等

欲知后事,且听下回分解。

当然有的地方还会提到第三种,半结构化数据,如 XML, HTML
等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。

随着互联网的发展,非结构化数据越来越多,当我们遇到这么多数据的时候,怎么办呢?分为以下的步骤:

数据的收集:即将散落在互联网世界的数据放到咱们的系统中来。数据收集分两个模式,推和拉,所谓的推,即推送,是在互联网世界里面放很多自己的小弟程序,这些小弟程序收集了数据后,主动发送给咱们的系统。所谓的拉,即爬取,通过运行程序,将互联网世界的数据下载到咱们的系统中。

数据的传输:收到的数据需要通过一个载体进行传输,多采用队列的方式,因为大量的数据同时过来,肯定处理不过来,通过队列,让信息排好队,一部分一部分的处理即可。

数据的存储:好不容易收集到的数据,对于公司来讲是一笔财富,当然不能丢掉,需要找一个很大很大的空间将数据存储下来。

数据的分析:收到的大量的数据,里面肯定有很多的垃圾数据,或者很多对我们没有用的数据,我们希望对这些数据首先进行清洗。另外我们希望挖掘出数据之间的相互关系,或者对数据做一定的统计,从而得到一定的知识,比如盛传的啤酒和尿布的关系。

数据的检索和挖掘:分析完毕的数据我们希望能够随时把我们想要的部分找出来,搜索引擎是一个很好的方式。另外对于搜索的结果,可以根据数据的分析阶段打的标签进行分类和聚类,从而将数据之间的关系展现给用户。

当数据量很少的时候,以上的几个步骤其实都不需要云计算,一台机器就能够解决。然而量大了以后,一台机器就没有办法了。

所以大数据想了一个方式,就是聚合多台机器的力量,众人拾柴火焰高,看能不能通过多台机器齐心协力,把事情很快的搞定。

对于数据的收集,对于IoT来讲,外面部署这成千上万的检测设备,将大量的温度,适度,监控,电力等等数据统统收集上来,对于互联网网页的搜索引擎来讲,需要将整个互联网所有的网页都下载下来,这显然一台机器做不到,需要多台机器组成网络爬虫系统,每台机器下载一部分,同时工作,才能在有限的时间内,将海量的网页下载完毕。开源的网络爬虫大家可以关注一下Nutch。

对于数据的传输,一个内存里面的队列肯定会被大量的数据挤爆掉,于是就产生了Kafka这样基于硬盘的分布式队列,也即kafka的队列可以多台机器同时传输,随你数据量多大,只要我的队列足够多,管道足够粗,就能够撑得住。

对于数据的存储,一台机器的硬盘肯定是放不下了,所以需要一个很大的分布式存储来做这件事情,把多台机器的硬盘打成一块大硬盘(而非存储池,注意两者的区别),hadoop的HDFS可以做到,也有很多地方用对象存储,同样可以有非常大的空间保存海量的数据。

永利酒店赌场 9

这个图描述的HDFS的一个架构,可以产出来,HDFS将很多个DataNode管理在一起,将数据分成很多小块,分布在多台机器上,从而实现了海量数据的存储。

永利酒店赌场 10

这个图描述的是swift对象存储的架构,也是将很多的storage
node聚合在一起,实现海量的存储。

对于数据的分析,一台机器一篇一篇的分析,那要处理到猴年马月也分析不完,于是就有了map-reduce算法,将海量的数据分成多个部分,使用大规模的hadoop集群,每台机器分析一部分,这个过程叫做map,分析完毕之后,还需要汇总一下,得到最终结果,汇总的过程称为reduce。最初的map-reduce算法是每一轮分析都将结果写入文件系统的,后来人们发现往往复杂的分析需要多轮计算才能有结果,而每一轮计算都落盘对速度影响比较大,于是有了Spark这种中间计算全部放入内存的分布式计算框架。对于数据的分析有全量的离线的计算,例如将所有的用户的购买行为进行分类,也有需要实时处理实时分析的,例如股票资讯的分类,实时的计算框架有storm,spark
streaming等等。

永利酒店赌场 11

对于数据的搜索,如果使用顺序扫描法 (Serial Scanning),
比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。为什么慢呢?其实是由于我们想要搜索的信息和非结构化数据中所存储的信息不一致造成的。

非结构化数据中所存储的信息是每个文件包含哪些字符串,也即已知文件,欲求字符串相对容易,也即是从文件到字符串的映射。而我们想搜索的信息是哪些文件包含此字符串,也即已知字符串,欲求文件,也即从字符串到文件的映射。两者恰恰相反。

如果我们通过对于非结构化数据进行处理,形成索引文件,里面保存从字符串到文件的映射,则会大大提高搜索速度。

由于从字符串到文件的映射是文件到字符串映射的反向过程,于是保存这种信息的索引称为反向索引

永利酒店赌场 12

当数据量非常大的时候,一个索引文件已经不能满足大数据量的搜索,所以要分成多台机器一起搜索,如图所示,将索引分成了多个shard也即分片,分不到不同的机器上,进行并行的搜索。

永利酒店赌场 13

所以说大数据平台,什么叫做大数据,说白了就是一台机器干不完,大家一起干。随着数据量越来越大,很多不大的公司都需要处理相当多的数据,这些小公司没有这么多机器可怎么办呢?

于是大数据人员想起来想要多少要多少,想什么时候要什么时候要的云平台。空间的灵活性让大数据使用者随时能够创建一大批机器来计算,而时间的灵活性可以保证整个云平台的资源,不同的租户你用完了我用,我用完了他用,大家都不浪费资源。

于是很多人会利用公有云或者私有云平台部署大数据集群,但是完成集群的部署还是有难度的,云计算的人员想,既然大家都需要,那我就把他集成在我的云计算平台里面,当大家需要一个大数据平台的时候,无论是Nutch,
Kafka,hadoop,ElasticSearch等,我能够马上给你部署出来一套。我们管这个叫做PaaS平台。

大数据平台于是作为PaaS融入了云计算的大家庭。

永利酒店赌场 14

作为国内最早诞生的互联网公司之一,网易在过去十余年的产品研发、孵化和运维过程中,各个部门对数据有着不同且繁杂的需求。而如何把这些繁杂的需求用统一的手段来解决,网易在大数据分析方面同样进行了十余年的探索,并自去年开始通过“网易云”将这些能力开放出来

“网易猛犸”与“网易有数”两大数据分析平台就是在这个阶段逐渐成型的。

网易猛犸大数据平台可以实现从各种不同数据源提取数据,同步到内核存储系统,同时对外提供便捷的操作体验。现在每天约有130亿条数据进入网易猛犸平台,经过数据建模和清洗,进行数据分析预测。

网易的另一大数据分析平台,网易有数则可以极大简化数据探索,提高数据可视化方面的效率,提供灵活报表制作等,以帮助分析师专注于自己的工作内容。

有了大数据平台,对于数据的处理和搜索已经没有问题了,搜索引擎着实火了一阵,当很多人觉得搜索引擎能够一下子帮助用户搜出自己想要的东西的时候,还是非常的开心的。

但是过了一阵人们就不满足于信息仅仅被搜索出来了。信息的搜索还是一个人需要适应机器的思维的过程,要想搜到想要的信息,有时候需要懂得一些搜索或者分词的技巧。机器还是没有那么懂人。什么时候机器能够像人一样懂人呢,我告诉机器我想要什么,机器就会像人一样的体会,并且做出人一样的反馈,多好啊。

这个思想已经不是一天两天了,在云计算还不十分兴起的时候,人们就有了这样的想法。那怎么做的这件事情呢?

人们首先想到的是,人类的思维方式有固有的规律在里面,如果我们能够将这种规律表达出来,告诉机器,机器不就能理解人了吗?

人们首先想到的是告诉计算机人类的推理能力,在这个阶段,人们慢慢的能够让机器来证明数学公式了,多么令人欣喜的过程啊。然而,数学公式表达相对严谨的,推理的过程也是相对严谨,所以比较容易总结出严格个规律来。然而一旦涉及到没有办法那么严谨的方面,比如财经领域,比如语言理解领域,就难以总结出严格的规律来了。

看来仅仅告知机器如何推理还不够,还需要告诉机器很多很多的知识,很多知识是有领域的,所以一般人做不来,专家可以,如果我们请财经领域的专家或者语言领域的专家来总结规律,并且将规律相对严格的表达出来,然后告知机器不就可以了么?所以诞生了一大批专家系统。然而专家系统遭遇的瓶颈是,由人来把知识总结出来再教给计算机是相当困难的,即便这个人是专家。

于是人们想到,看来机器是和人完全不一样的物种,干脆让机器自己学习好了。机器怎么学习呢?既然机器的统计能力这么强,基于统计学习,一定能从大量的数字中发现一定的规律。

其实在娱乐圈有很好的一个例子,可见一斑

有一位网友统计了知名歌手在大陆发行的 9 张专辑中 117
首歌曲的歌词,同一词语在一首歌出现只算一次,形容词、名词和动词的前十名如下表所示(词语后面的数字是出现的次数):

如果我们随便写一串数字,然后按照数位依次在形容词、名词和动词中取出一个词,连在一起会怎么样呢?

例如取圆周率
3.1415926,对应的词语是:坚强,路,飞,自由,雨,埋,迷惘。稍微连接和润色一下:

坚强的孩子,

依然前行在路上,

张开翅膀飞向自由,

让雨水埋葬他的迷惘。

是不是有点感觉了?当然真正基于统计的学习算法比这个简单的统计复杂的多。

然而统计学习比较容易理解简单的相关性,例如一个词和另一个词总是一起出现,两个词应该有关系,而无法表达复杂的相关性,并且统计方法的公式往往非常复杂,为了简化计算,常常做出各种独立性的假设,来降低公式的计算难度,然而现实生活中,具有独立性的事件是相对较少的。

于是人类开始从机器的世界,反思人类的世界是怎么工作的。

永利酒店赌场 15

人类的脑子里面不是存储着大量的规则,也不是记录着大量的统计数据,而是通过神经元的触发实现的,每个神经元有从其他神经元的输入,当接收到输入的时候,会产生一个输出来刺激其他的神经元,于是大量的神经元相互反应,最终形成各种输出的结果。例如当人们看到美女瞳孔放大,绝不是大脑根据身材比例进行规则判断,也不是将人生中看过的所有的美女都统计一遍,而是神经元从视网膜触发到大脑再回到瞳孔。在这个过程中,其实很难总结出每个神经元对最终的结果起到了哪些作用,反正就是起作用了。

于是人们开始用一个数学单元模拟神经元

永利酒店赌场 16

这个神经元有输入,有输出,输入和输出之间通过一个公式来表示,输入根据重要程度不同(权重),影响着输出。

永利酒店赌场 17

于是将n个神经元通过像一张神经网络一样连接在一起,n这个数字可以很大很大,所有的神经元可以分成很多列,每一列很多个排列起来,每个神经元的对于输入的权重可以都不相同,从而每个神经元的公式也不相同。当人们从这张网络中输入一个东西的时候,希望输出一个对人类来讲正确的结果。例如上面的例子,输入一个写着2的图片,输出的列表里面第二个数字最大,其实从机器来讲,它既不知道输入的这个图片写的是2,也不知道输出的这一系列数字的意义,没关系,人知道意义就可以了。正如对于神经元来说,他们既不知道视网膜看到的是美女,也不知道瞳孔放大是为了看的清楚,反正看到美女,瞳孔放大了,就可以了。

对于任何一张神经网络,谁也不敢保证输入是2,输出一定是第二个数字最大,要保证这个结果,需要训练和学习。毕竟看到美女而瞳孔放大也是人类很多年进化的结果。学习的过程就是,输入大量的图片,如果结果不是想要的结果,则进行调整。如何调整呢,就是每个神经元的每个权重都向目标进行微调,由于神经元和权重实在是太多了,所以整张网络产生的结果很难表现出非此即彼的结果,而是向着结果微微的进步,最终能够达到目标结果。当然这些调整的策略还是非常有技巧的,需要算法的高手来仔细的调整。正如人类见到美女,瞳孔一开始没有放大到能看清楚,于是美女跟别人跑了,下次学习的结果是瞳孔放大一点点,而不是放大鼻孔。

听起来也没有那么有道理,但是的确能做到,就是这么任性。

神经网络的普遍性定理是这样说的,假设某个人给你某种复杂奇特的函数,f(x):

永利酒店赌场 18

不管这个函数是什么样的,总会确保有个神经网络能够对任何可能的输入x,其值f(x)(或者某个能够准确的近似)是神经网络的输出。

如果在函数代表着规律,也意味着这个规律无论多么奇妙,多么不能理解,都是能通过大量的神经元,通过大量权重的调整,表示出来的。

这让我想到了经济学,于是比较容易理解了。

我们把每个神经元当成社会中从事经济活动的个体。于是神经网络相当于整个经济社会,每个神经元对于社会的输入,都有权重的调整,做出相应的输出,比如工资涨了,菜价也涨了,股票跌了,我应该怎么办,怎么花自己的钱。这里面没有规律么?肯定有,但是具体什么规律呢?却很难说清楚。

基于专家系统的经济属于计划经济,整个经济规律的表示不希望通过每个经济个体的独立决策表现出来,而是希望通过专家的高屋建瓴和远见卓识总结出来。专家永远不可能知道哪个城市的哪个街道缺少一个卖甜豆腐脑的。于是专家说应该产多少钢铁,产多少馒头,往往距离人民生活的真正需求有较大的差距,就算整个计划书写个几百页,也无法表达隐藏在人民生活中的小规律。

基于统计的宏观调控就靠谱的多了,每年统计局都会统计整个社会的就业率,通胀率,GDP等等指标,这些指标往往代表着很多的内在规律,虽然不能够精确表达,但是相对靠谱。然而基于统计的规律总结表达相对比较粗糙,比如经济学家看到这些统计数据可以总结出长期来看房价是涨还是跌,股票长期来看是涨还是跌,如果经济总体上扬,房价和股票应该都是涨的。但是基于统计数据,无法总结出股票,物价的微小波动规律。

基于神经网络的微观经济学才是对整个经济规律最最准确的表达,每个人对于从社会中的输入,进行各自的调整,并且调整同样会作为输入反馈到社会中。想象一下股市行情细微的波动曲线,正是每个独立的个体各自不断交易的结果,没有统一的规律可循。而每个人根据整个社会的输入进行独立决策,当某些因素经过多次训练,也会形成宏观上的统计性的规律,这也就是宏观经济学所能看到的。例如每次货币大量发行,最后房价都会上涨,多次训练后,人们也就都学会了。

然而神经网络包含这么多的节点,每个节点包含非常多的参数,整个参数量实在是太大了,需要的计算量实在太大,但是没有关系啊,我们有大数据平台,可以汇聚多台机器的力量一起来计算,才能在有限的时间内得到想要的结果。

于是工智能程序作为SaaS平台进入了云计算。

永利酒店赌场 19

网易将人工智能这个强大的技术,应用于反垃圾工作中,从网易1997年推出邮箱产品开始,我们的反垃圾技术就在不停的进化升级,并且成功应用到各个亿量级用户的产品线中,包括影音娱乐,游戏,社交,电商等产品线。比如网易新闻、博客相册、云音乐、云阅读、有道、BOBO、考拉、游戏等产品。总的来说,反垃圾技术在网易已经积累了19年的实践经验,一直在背后默默的为网易产品保驾护航。现在作为云平台的SaaS服务开放出来。

回顾网易反垃圾技术发展历程,大致上我们可以把他分为三个关键阶段,也基本对应着人工智能发展的三个时期:

第一阶段主要是依赖关键词,黑白名单和各种过滤器技术,来做一些内容的侦测和拦截,这也是最基础的阶段,受限于当时计算能力瓶颈以及算法理论的发展,第一阶段的技术也能勉强满足使用。

第二个阶段时,基于计算机行业里有一些更新的算法,比如说贝叶斯过滤(基于概率论的算法),一些肤色的识别,纹理的识别等等,这些比较优秀成熟的论文出来,我们可以基于这些算法做更好的特征匹配和技术改造,达到更优的反垃圾效果。

最后,随着人工智能算法的进步和计算机运算能力的突飞猛进,反垃圾技术进化到第三个阶段:大数据和人工智能的阶段。我们会用海量大数据做用户的行为分析,对用户做画像,评估用户是一个垃圾用户还是一个正常用户,增加用户体验更好的人机识别手段,以及对语义文本进行理解。还有基于人工智能的图像识别技术,更准确识别是否是色情图片,广告图片以及一些违禁品图片等等。

永利酒店赌场 20

以上由网易企业服务,企业信息化服务提供商:湖南领先网络科技有限公司
整理发布。

网易企业服务(

永利酒店赌场 21

网站地图xml地图