云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按照需求提供给计算机和其他网络设备。用户不需要了解“云”中的基础设施细节,不必具有相应的专业知识,也无需直接控制。云计算描述了一种基于互联网的新的IT服务增加、使用和交互模式。
元计算本质是希望解决资源利用率、计算能力不足和成本的问题
1、有效解决硬件单点故障问题
- 单点故障会造成服务的中断,要解决单点故障,需要为每个硬件准备备用硬件,不但增加了硬件购置成本,部署与维护成本也大。
2、按需增加资源
这里的按需指的是硬件、带宽等。自己管理服务器会面另一个很头疼的问题
- 增加服务的时候,需要购买服务器,购买服务器需要时间;使用云服务器的时候,可随时增加素驱动的结果:需求拉动和技术推动。业务需求的拉动,希望解决业务应用的问题。技术发展的推动,是的云计算具备了技术上的可行性。
- 减少服务的时候,需要把购置的服务器取下,服务器会退还给厂商或者闲置下来,而云服务器不用的时候,直接不续费就好了(比如阿里云、腾讯云)
- 未使用云服务器之前,加入我们需要一台低配置的服务器运行一个服务,服务器需要空间存放,每年的耗电量也不小,因此都是使用一台服务器来运行多个服务来见底服务器的购买和维护成本,而使用云服务之后,需要什么样的配置,直接购买即可,对服务器的指责进行分离,减少各个服务之间的相互影响,效率更高。
- 再托管云服务的时候,我们需要购买带宽,一般在与ISP服务商签订合同之前需要确定带宽大小,当后期发现想改变带宽大小时,是不被支持的。使用云服务之后,可以灵活增减带宽,可以随时对带宽进行增减。
3、更好的费用支付方式
- 一般在IDC托管服务器的时候,合同都是以年为单位签订合同,一次制度一个季度的费用;而是用云服务,可以支付更短时间内的费用,像阿里云可以按照月为单位进行支付或者按照使用量购买(比如网络流量支付费用)
4、BGP解决南北线路问题
- 宽带市场一直有“南电信北联通”的问题,所以我们需要考虑南北互通的问题,即路由问题。比如说,南方的联通用户,在访问上海电信机房的服务器的时候,先要绕路到联通的北京总出口(假设),再回到上海。虽然光纤的速度很快,但是当联通的总出口出现瓶颈,无法负担巨大的网络流量时,联通的用户访问电信网络的服务器就会很慢。BGP就解决了南北互通时的绕路问题,优化了线路。
云计算包含三种模式
- IaaS:基础设置即服务------消费者使用“基础计算资源”,如处理能力、存储空间、网络组件或中间件。消费者能掌控操作系统、存储空间、一部书的应用程序及网络组建(如防火墙、负载平衡器等),但并不掌握云基础架构。例如:Amzon AWS、Rackspace。
- PasS:平台即服务------消费者使用主机操作应用程序。消费者掌控运作应用程序的环境(也拥有部分掌控权),但并不掌握系统、硬件或运作的网络基础架构。平台通常是应用程序基础架构。例如:Google App Engine。
- SaaS:软件即服务------消费者使用应用程序,但并不掌握操作系统、硬件或运作的网络基础架构。是一种服务观念的基础,软件服务供应商,以租凭的概念提供客户服务,而非购买,比较常见的模式是提供一组账号密码。例如:Microsoft CRM与Salesforce.com。
- 公有云 ------ 公有云服务可通过网络及第三方服务供应者,开放给客户使用,“公有”一词并不一定代表“免费”,但也可能代表免费或相当廉价,公有云并不表示用户数据可供任何人查看,公有云供应者通常会对用户实施使用访问控制机制,公有云作为解决方案,既有弹性,又具备成本效益。
- 私有云 ------ 私有云具备许多公有云环境的特点,例如弹性、适合提供服务,两者差别在于私有云服务中,数据与程序皆在组织内管理,切于公有云服务不同,不会收到网络带宽、安全疑虑、法规限制影响;此外,私有云让供应者及用户更能掌握云基础架构、改善安全与弹性,因为用户与网络都收到特殊限制。
- 云物联 ----- “物联网就是物物相连的互联网”。这有两层意思:第一,物联网的核心和基础仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信。
- 云存储 ------ 云存储是在云计算概念上延伸和发展出来的一个新的概念,是指通过集群应用、网格技术或分布式文件系统等功能,将网络中大量各种不同类型的存储设备通过应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能的一个系统。当云计算系统运算和处理的核心是大量数据的存储和管理时,云计算系统中就需要配置大量的存储设备,那么云计算系统就变成了一个云存储系统,所以云存储是一个以数据存储和管理为核心的云计算系统。
- 云游戏 ------ 云游戏是以云计算为基础的游戏方式,在云游戏的运行模式下,所有游戏都在服务器运行,并将渲染完毕后的游戏画面压缩后通过网络传送给用户。在客户端,用户的游戏设备不需要任何高端处理器和显卡,只需要基本的视频解压能力就可以了。
- 云安全 ------ 云安全是以一个从云计算演变而来的新名词。云安全的策略构想是:使用者越多,每个使用者就越安全,因为如此庞大的用户群,足以覆盖互联网的每个角落,只要某个网站被挂马或密欧哥新木马病毒出现,就会立刻被截获。“云安全”通过网络的大量客户端对网络中软件行为的异常检测,获取到互联中木马、恶意程序的最新信息,推送到Server端进行自动分析和处理,再把木马和病毒的解决方案分发到每一个客户端。
- 混合云 ------ 混合云结合公有云和私有云,这个模式中,用户通常将非企业关键信息外包,并在公有云上处理,但同时掌握企业关键服务及数据。
OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开源代码项目,旨在为公共及私有云的建设与管理提供软件的开源项目,帮助服务商和企业内部实现类似于Amazon EC2和S3的云基础架构服务(infrastructure as a Service,IaaS)
1、控制台
服务名:Dashboard
项目名:Horzon
功能:提供一个Web前端控制台,以此来展示OpenStack的功能
2、计算
服务名:计算(Compute)
项目名:Nova
功能:一套控制起,用于为单个用户或使用群组管理虚拟机实例的整个生命周期,根据哟哦难怪乎需求来提供虚拟服务。负责虚拟机创建、开机、关机、挂起、暂停、调整、迁移、重启、销毁等操作,配置CPU、内存等信息规格。
3、网络
服务名:网络&地址管理(Network)
项目名:Neutron
功能:提供云计算的网络虚拟化技术,为OpenStack其他服务提供网络链接服务。为用户提供接口,可以定义Network、Subnet、Router,配置DHCP、DNS、负载均衡、L3服务,网络支持GRE、VLAN。插件架构支持许多主流的网络厂家和技术,如OpenvSwitch
4、对象存储
服务名:对象存储(Object Storage)
项目名:Swift
功能:一套用于在大规模可扩展系统中通过内置冗余及高容错机制实现对象存储的系统,允许进行存储或者检索文件。可谓Glance提供镜像存储,为Cinder提供卷备份服务。
5、块存储
服务名:块存储(Block Storage)
项目名:Cinder
功能:为运行时力提供稳定的数据块存储服务,他的插件驱动架构有利于块设备的创建和管理,如创建卷、删除卷。在实例上挂载和卸载卷。
6、认证服务
服务名:认证服务(Identity Service)
项目名:Keystone
功能:为OpenStack其他服务提供身份认证、服务规则和服务令牌的功能,管理Domains、Projects、Users、Groups、Roles。
7、镜像服务
服务名:镜像服务(Image Service)
项目名:Glance
功能:一套虚拟机镜像查找及检索系统,支持多种虚拟机镜像格式(AKi、AMI、ARI、ISO、QCOW2、Raw、VDI、VHD、VMDK),有创建上传镜像、删除镜像、编辑镜像基本信息的功能。
8、计费服务
服务名:计费(Metering)
项目名:Ceilometer
功能:功能是把OpenStack内部发生的几乎所有的事件都收集起来,然后为计费和监控以及其他服务提供数据支撑。
9、编排服务
服务名:部署编排(Orchestration)
项目名:Heat
功能:提供了一种通过模板定义的协同部署方式,实现云基础设施软件运行环境(计算、存储和网络资源)的自动化部署。
10、数据库服务
服务名:数据库服务(Database Service)
项目名:Trove
功能:为用户在OpenStack的环境提供可扩展和可靠的关系和非关系数据库引擎服务。
keystone–认证节点提供身份认证;
Glance–镜像节点提供镜像管理;
Nova–计算节点能让虚拟机运行起来;
Neutron–网络节点可以让虚拟机连网上网;
Horizon–控制节点提供了web端的控制台;
Cinder–存储节点可以创建虚拟硬盘;
swift–对象存储节点能让文件直接存储在云端
通常这些组件可以组合放到一台服务器:
keystone+glance+horizon放置在一台服务器称为控制节点
Nova单独放置称为计算节点
Neutron单独放置称为网络节点
Cinder和Swift放置在一起称为存储节点
名词解释:
本地DNS服务器:
根DNS服务器:
顶级DNS服务器:
NameServer服务器:
当在浏览器输入一个url后发生的DNS解析过程
1、本地电脑检查浏览器缓存中有没有对这个域名对应的解析过的IP地址,如果有,解析结束;
2、如果没有,浏览器则会查找操作系统有无对应的DNS解析结果,即/etc/hosts文件中存储。
3、如果前两个无法解析,那么用到网络配置的“DNS服务器地址”。操作系统吧域名发给本地服务器。每个完整的内网都会配置本地DNS服务器,Linux在这设置:/etc/resolv.conf本地DNS服务器地址
4、如果本地服务器仍然没有命中,那么直接就到根DNS服务器请求解析
5、根DNS将会返回给本地DNS服务器一个顶级DNS服务器地址,它是国际顶级的域名,如com、cn、org等,全球仅13台左右
6、本地DNS服务器在向顶级DNS服务器发起解析请求
7、接收请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器地址,这个Name Server服务器就是我们要访问的网站域名提供商的服务器,其实该域名的解析任务就是通过域名提供商的服务器来完成。
8、Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等信息,连同一个TTL值返回给本地DNS服务器
9、返回该域名对应的IP和TTL值,本地DNS缓存域名和IP的对应关系
10、把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地系统缓存中,域名解析过程解束在实际的DNS解析过程中,可能还不止这10步,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能影响域名解析的过程
在软件开发中,最麻烦的事情之一就是环境部署。在正常情况下,如果要保证程序能运行,我们需要设置好操作系统,以及各种库和组件的安装。但是实际开发迭代项目之后,不同版本环境的兼容,以及不同机器环境的部署多是令人头疼的问题
如果我们费心巴力的给一台服务器配置好了运行环境,但是同样要给另外一台服务器安装,那么又得重复一次安装,而且并不能保证每台服务器都是同样的环境,这个时候是不是心里就有万马崩腾的场景了。
那么Docker镜像的设计,使得Docker得以打破过去[程序即应用]的观念。通过镜像(images)将作业系统核心除外,运作应用程序所需要的系统环境,有下而上打包,达到应用程序跨平台的无缝接轨运行。
针对部署困难的问题,出现了虚拟机和Linux容器来解决
虚拟机简单来讲就是在一个操作系统上模拟另外一个操作系统。在虚拟机上搭建环境,就可以保证环境一致。
但是虚拟机也有自身的一些缺点:
1、资源占用:虚拟机只要开着就会占用资源,并不会因为虚拟机上只使用一小部分资源就占用这一小部分资源。
2、各种冗余步骤:因为虚拟机就是一个完整的系统。因此会需要类似用户登录等各种冗余操作。
3、启动慢:为了运行特点环境中的软件,虚拟机必须先运行系统,而系统占用的资源往往很多(网络、GUI、IO等),自然会影响运行速度
为了解决虚拟机的各种问题,Linux容器(Linux Containers, LXC)出现了。LXC容器并不是模拟一个完整的操作系统,二是对进程进行隔离。或者说,就是在正常进程的外面套用了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层程序的隔离。由于容器是进程级别的,相比虚拟机有更多优势
容器的优点:
1、启动快:由于并不需要启动一个操作系统,容器会比虚拟机的启动快很多,只是启动一个进程
2、资源占用小:没有操作系统占用资源,容器占用的就是需要的资源,而且多个容器之间可以共享资源。相比之下虚拟机的资源是独享的
3、资源利用率高:虚拟机资源都是独享资源,电脑需要为每个虚拟环境单独分配资源,不仅仅占用空间大,而且资源的利用率很低。而容器之间可以共享资源,最大化资源的利用率。
Docker属于Linux容器的一种封装,提供简单易用的容器使用接口,他也是目前最流行的Linux容器解决方案。Docker将软件和其依赖,全打包在一个文件中。运行单个文件,就会生成虚拟容器。在这个虚拟容器里,不管本地的操作系统如何的不同,此容器都能照常运行。
简而言之,Docker的接口非常简单,可以帮助用户更好的创建和使用容器,让相同的代码在不同的环境上正常运行。
1、提供一次性的环境:本地测试别人的软件、持续集成的时候提供单元测试和构建的环境
2、提供弹性的云服务:因为Docker容器可以随时启动或关闭,所以非常适合动态规划和缩容。
3、组建为服务建构:通过多个容器,服务的部署能更加灵活,帮助实现微服务架构。
由于容器不需要进行硬件虚拟以及运行完整操作系统外的开销,Docker对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
传统的虚拟机技术启动服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间
开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现“我的代码在我机器上跑没啥问题啊”的这类问题
对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。
使用Docker可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成(Continuous Intergration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署改镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署。
而且使用Dockerfile使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像。
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行的结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。
Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制大大降低了应用服务的镜像成本制作。
特性 | 容器 | 虚拟机 |
---|---|---|
启动 | 秒级 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
- 更高效的利用系统资源
- 更快速的启动时间
- 一致的运行环境
- 持续交付和部署
- 更轻松的迁移
- 更轻松的维护和扩展
理解了这三个概念,就理解了Docker的整个生命周期
我们都知道,操作系统分为内核和用户空间。对于Linux而言,内核启动后,会挂载root文件系统为其提供用户空间支持。而Docker镜像(Image),相当于一个root文件系统。 它是一个特殊的文件系统,除了提供容器运行时所需要的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
也就是说镜像就是一个只读的模版。可以用来创建很多Docker容器
镜像和容器的关系,就像是面向对象程序设计中的类和实例一样。镜像是静态的定义,容器是镜像运行的实体。容器可以被创建、删除、启动、停止、暂停等。
容器的实质是进程,但与直接在宿主机执行的进程不同,容器进程运行于属于自己独立的命名空间。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其他服务上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry就是这样的服务。一个Docker Registry中可以包含多个仓库(repository);每个镜像可以包含多个标签 (tag);每个标签对应一个镜像。
仓库分为私有仓库(Private)和公有仓库(Public)两种形式。最大的公开仓库是Docker Hub(https://hub.docker.com),存放了数量庞大的镜像供用户下载。而国内公开的仓库包括阿里云、网易云等。
需要正确理解 镜像、容器、仓库这几个概念,Docker本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置文件打包好行程一个可交付的运行环境,这个打包好的运行环境就叫做image镜像。只有通过这个镜像文件才能生成Docker容器。image文件可以看作是容器的模板,Docker根据image文件生成容器的实例。同一个image文件,可以同时生成多个同事运行的容器实例。而image文件生成的容器实例,本身也是一个文件。一个容器运行一种服务,当我们需要的时候,就可以通过Docker客户端创建一个对应的运行实例,也就是我们的容器。至于仓储,就是放了一堆镜像的地方,我们可以吧镜像发布到仓储中,需要的时候从仓储中拉下来就可以