服务器连接的进化:RPC(远程过程调用)->Web Service->SOA->RESTful平台->PaaS与SaaS
云端
一款采用应用程序虚拟化技术(Application Virtualization)的软件平台,集软件搜索、下载、使用、管理、备份等多种功能为一体。通过该平台,各类常用软件都能够在独立的虚拟化环境中被封装起来,从而使应用软件不会与系统产生耦合,达到绿色使用软件的目的。
云计算
它不只是计算机概念,还有运营服务等概念。它是分布式计算、并行计算和网络计算的发展,或者说是这些概念的商业实现。云计算不但包括分布式计算还包括分布式存储和分布式缓存。特点:虚拟化、网格计算、自动化管理分布式存储又包括分布式文件存储和分布式数据存储。
NIST对云计算定义如下:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用和服务等)并提高其可用性的模式,这些资源来自一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。这种模式具有5个关键功能,还包括3种服务模式和4种部署方式。
1.狭义云计算指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需资源;
2.广义云计算指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需服务。
这种服务可以是IT和软件、互联网相关,也可是其他服务。
3.云计算的核心思想,是将大量用网络连接的计算资源统一管理和调度,
构成一个计算资源池向用户按需服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
4.云计算的产业三级分层:云软件、云平台、云设备。白话点说:和我们用水用电一样,当我们需要水需要电的时候,我们打开水龙头或者灯开关直接用水用电,不用管水电来自哪个水厂电厂,只要简单的按照我们自身需求使用即可,用多少付多少钱。云计算其实就是这么回事,只是水电变成了数据、服务、软件等东西而已,用户面也更多的是企业这样的大型机构。
云计算的五大核心特点
按需自助服务(On Demand Self-Service):供应商的资源保持高可用和高就绪的状态,用户可以按需方便地自助地获得资源。
泛在的网络访问(Broad Network Access):可以通过各种网络渠道,以统一标准的机制(如浏览器,相同的API等)获取服务,但是客户端可以是多种多样的瘦客户端或富客户端(例如移动电话、笔记本电脑、PDA等)。
动态的资源池(Resource Pooling):供应商的计算资源可以被整合为一个动态资源池,以多租户模式服务所有客户,不同的物理和虚拟资源可根据客户需求动态分配。服务商需实现资源的位置无关性,客户一般不需要知道所使用的资源的确切地理位置,但在需要的时候客户可以指定资源位置(如哪个国家,哪个数据中心等)的要求。
快速弹性(Rapid Elasticity):可以迅速、弹性地提供服务,能快速扩展,也可以快速释放实现快速缩小。对客户来说,可以租用的资源看起来似乎是无限的,可在任何时间购买任何数量的资源。
可计量的服务(Measured Service):服务的收费可以是基于计量的一次一付,或基于广告的收费模式。系统以针对不同服务需求(例如,CPU时间、存储空间、带宽、甚至按用户账号的使用率高低)来计量资源的使用情况和定价,以提高资源的管控能力和促进优化利用。整个系统资源可以通过监控和报表的方式对服务提供者和使用者透明化。
云计算三种服务模式
SaaS:Software-as-a-Service(软件即服务)
提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设备上通过瘦客户端界面访问,如浏览器。消费者不需要管理或控制任何云计算基础设施,包括网络、服务器、操作系统、存储,等等。
Saas与hosted software(托管软件)所具有相似的含义。它是一种通过Internet提供软件的模式,厂商将应用软件统一部署在自己的服务器上,客户可以根据自己实际需求,通过互联网向厂商定购所需的应用软件服务,按定购的服务多少和时间长短向厂商支付费用,并通过互联网获得厂商提供的服务。用户不用再购买软件,而改用向提供商租用基于Web的软件,来管理企业经营活动,且无需对软件进行维护,服务提供商会全权管理和维护软件,软件厂商在向客户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让用户随时随地都可以使用其定购的软件和服务。对于许多小型企业来说,SaaS是采用先进技术的最好途径,它消除了企业购买、构建和维护基础设施和应用程序的需要。SaaS 应用软件的价格通常为“全包”费用。
PaaS:Platform-as-a-Service(平台即服务)
提供给消费者的服务是把客户采用提供的开发语言和工具(例如Java、Python、.Net等)开发的或收购的应用程序部署到供应商的云计算基础设施上。客户不需要管理或控制底层的云基础设施,包括网络、服务器、操作系统、存储等,但客户能控制部署的应用程序,也可能控制运行应用程序的托管环境配置。是一种中间件服务。PaaS能将现有各种业务能力进行整合,具体可以归类为应用服务器、业务能力接入、业务引擎、业务开放平台,向下根据业务能力需要测算基础服务能力,通过IaaS提供的API调用硬件资源,向上提供业务调度中心服务,实时监控平台的各种资源,并将这些资源通过API开放给SaaS用户。Paas的三个特点:
①平台即服务:
PaaS所提供的服务与其他的服务最根本的区别是PaaS提供的是一个基础平台,而不是某种应用。在传统的观念中,平台是向外提供服务的基础。一般来说,平台作为应用系统部署的基础,是由应用服务提供商搭建和维护的,而PaaS颠覆了这种概念,由专门的平台服务提供商搭建和运营该基础平台,并将该平台以服务的方式提供给应用系统运营商;
②平台及服务:
PaaS运营商所需提供的服务,不仅仅是单纯的基础平台,而且包括针对该平台的技术支持服务,甚至针对该平台而进行的应用系统开发、优化等服务。PaaS的运营商最了解他们所运营的基础平台,所以由PaaS运营商所提出的对应用系统优化和改进的建议也非常重要。而在新应用系统的开发过程中,PaaS运营商的技术咨询和支持团队的介入,也是保证应用系统在以后的运营中得以长期、稳定运行的重要因素;
③平台级服务:
PaaS运营商对外提供的服务不同于其他的服务,这种服务的背后是强大而稳定的基础运营平台,以及专业的技术支持队伍。这种“平台级”服务能够保证支撑SaaS或其他软件服务提供商各种应用系统长时间、稳定的运行。PaaS的实质是将互联网的资源服务化为可编程接口,为第三方开发者提供有商业价值的资源和服务平台。有了PaaS平台的支撑,云计算的开发者就获得了大量的可编程元素,这些可编程元素有具体的业务逻辑,这就为开发带来了极大的方便,不但提高了开发效率,还节约了开发成本。有了PaaS平台的支持,WEB应用的开发变得更加敏捷,能够快速响应用户需求的开发能力,也为最终用户带来了实实在在的利益。
IaaS:Infrastructure as a Service(基础设施即服务)
提供给消费者的服务是对所有设施的利用,包括CPU、内存、存储、网络和其他基本的计算资源,用户能够部署和运行任意软件,包括操作系统和应用程序。消费者不管理或控制任何云计算基础设施,但能控制操作系统的选择、储存空间、部署的应用,也有可能获得有限制的网络组件(例如,防火墙、负载均衡器等)的控制。目前世界大多数互联网公司都开始布局云计算,Google,华为,BAT,亚马逊也都已经将云计算成熟运用与自己的生态系统,并产生巨大的效益。国内外关于云计算的研究都在火热的进行中。无论是收费的云计算服务还是开源云计算研究都趋于白热化,可见云计算在未来各个领域非同一般的潜力。
按照操作由多到少:IaaS>PaaS>SaaS。Saas是上层,Paas是中间层,Iaas是下层。
分布式计算、并行计算及集群、网络、云计算的区别
并行计算:
并行计算是相对于串行计算来说的。可分为时间上的并行和空间上的并行。 时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。例如基于CUDA编程。并行计算的目的就是提供单处理器无法提供的性能(处理器能力或存储器),使用多处理器求解单个问题。
总结:并行的主体 -- 处理器;进程/线程级并行。
分布式计算:
分布式计算研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命等。
总结:并行的主体 -- 计算机;各个计算机并行
并行计算与分布式计算的区别:
(1)简单的理解,并行计算借助并行算法和并行编程语言能够实现进程级并行(如MPI)和线程级并行(如openMP)。而分布式计算只是将任务分成小块到各个计算机分别计算各自执行。
(2)粒度方面,并行计算中,处理器间的交互一般很频繁,往往具有细粒度和低开销的特征,并且被认为是可靠的。而在分布式计算中,处理器间的交互不频繁,交互特征是粗粒度,并且被认为是不可靠的。并行计算注重短的执行时间,分布式计算则注重长的正常运行时间。
(3)联系,并行计算和分布式计算两者是密切相关的。某些特征与程度(处理器间交互频率)有关,而我们还未对这种交叉点(crossover point)进行解释。另一些特征则与侧重点有关(速度与可靠性),而且我们知道这两个特性对并行和分布两类系统都很重要。
(4)总之,这两种不同类型的计算在一个多维空间中代表不同但又相邻的点。
集群计算:
计算机集群使将一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,它们可以被看作是一台计算机。集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性价比要高得多。根据组成集群系统的计算机之间体系结构是否相同,集群可分为同构与异构两种。集群计算机按功能和结构可以分为,高可用性集群(High-availability (HA) clusters)、负载均衡集群(Loadbalancing clusters)、高性能计算集群(High-performance (HPC)clusters)、网格计算(Grid computing)。
高可用性集群:
一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。
负载均衡集群:
负载均衡集群运行时,一般通过一个或者多个前端负载均衡器,将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。 一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。Linux虚拟服务器(LVS)项目在Linux操作系统上提供了最常用的负载均衡软件。
高性能计算集群:
高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC cluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。HPC集群特别适合于在计算中各计算节点之间发生大量数据通讯的计算作业,比如一个节
点的中间结果或影响到其它节点计算结果的情况。
网络计算:
网格计算是分布式计算的一种,也是一种与集群计算非常相关的技术。如果我们说某项工作是分布式的,那么,参与这项工作的一定不只是一台计算机,而是一个计算机网络,显然这种“蚂蚁搬山”的方式将具有很强的数据处理能力。网格计算的实质就是组合与共享资源并确保系统安全。网格计算通过利用大量异构计算机的未用资源
(CPU周期和磁盘存储),将其作为嵌入在分布式电信基础设施中的一个虚拟的计算机集群,为解决大规模的计算问题提供一个模型。网格计算的焦点放在支持跨域管理计算的能力,这使它与传统的计算机集群或传统的分布式计算相区别。网格计算的目标是解决对于任何单一的超级计算机来说仍然大得难以解决的问题,并同时保持解决多个较小的问题的灵活性。这样,网格计算就提供了一个多用户环境。
集群计算与网络计算的区别:
(1)简单地,网络与传统集群的主要差别是网络是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。网络通常比集群支持更多不同类型的计算机集合。
总结:网络--灵活,集群--相对死板。比集群支持更多类型计算机集合。
(2)网络本质上就是动态的,集群包含的处理器和资源的数量通常都是静态的。在网络上,资源则可以动态出现,资源可以根据需要添加到网络中或从网络中删除。
总结:网络--动态,集群--静态
(3) 网络天生就是在本地网、城域网或广域网上进行分布的。网络可以分布在任何地方。而集群物理上都包含在一个位置的相同地方,通常只是局域网互连。集群互连技 术可以产生非常低的网络延时,如果集群距离很远,这可能会导致产生很多问题。物理临近和网络延时限制了集群地域分布的能力,而网络由于动态特性,可以提供 很好的高可扩展性。
总结:网络--范围广,集群--范围近,少带宽
(4)集群仅仅通过增加服务器满足增长的需求。然而,集群的服务器数量、以及由此导致的集群性能是有限的:互连网络容量。也就是说如果一味地想通过扩大规模来提高集群计算机的性能,它的性价比会相应下降,这意味着我们不可能无限制地扩大集群的规模。 而网络虚拟出空前的超级计算机,不受规模的限制,成为下一代Internet的发展方向。
总结:网络可以无限虚拟集成计算机,集群不可以无限集成。
(5)集群和网络计算是相互补充的。很多网络都在自己管理的资源中采用了集群。实际上,网络用户可能并不清楚他的工作负载是在一个远程的集群上执行的。尽管网络与集群之间存在很多区别,但是这些区别使它们构成了一个非常重要的关系,因为集群在网络中总有一席之地—— 特定的问题通常都需要一些紧耦合的处理器来解决。然而,随着网络功能和带宽的发展,以前采用集群计算很难解决的问题现在可以使用网络计算技术解决了。理解网络固有的可扩展性和集群提供的紧耦合互连机制所带来的性能优势之间的平衡是非常重要的。
总结:网络--可扩展,集群--紧耦合
关于WebService
webservice是广义的,没有一个确切的定义。
定义一:Web Service是自包含的、模块化的应用程序,它可以在Web中被描述、发布、查找以及调用。
定义二:Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得WebService能与其他兼任的组件进行操作。
定义三:所谓Web Service是指由企业发布的完成其特别商务需求的在线应用服务,其他公司或应用软件通过Internet来访问并使用这项应用服务。
定义四:Web Service是一种`面向服务的架构技术`,`通过标准的Web协议提供服务`,目的是`保证不同平台的应用服务可以互操作`。
Web Service包括:
①SOAP:(Simple Object Access Protocol)
它是一种标准化的通讯规范,主要用于Web服务(web service)中。这里之所以说是简单,是因为它是基于已经广泛使用的两个协议:HTTP和XML,所以业界把这种技术称为“它是第一个没有发明任何新技术的技术"。
②WSDL:(Web Services Description Language)它是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。
③UDDI(Universal Description, Discovery, and Integration)它是一个基于XML的跨平台的描述规范,可以使世界范围内的企业在互联网上发布自己所提供的服务。
使用Web Service的方式:
RPC(Remote Procedure Call Protocol)
Web Service提供一个分布式函数或方法接口供用户调用,这是一种比较传统的方式。通常,在WSDL中对RPC接口进行定义。尽管最初的Web Service广泛采用RPC这种方式部署,但是针对其过于紧密之耦合性的批评声也络绎不绝。原因是RPC式的Web Service服务是利用一个简单的映射,把用户请求直接转换为一个特定语言编写的函数或方法。
SOA(Service-Oriented Architecture)
相比RPC式的Web Service,面向服务架构(SOA)得到了大部分主要软件供应商以及业界专家的支持和肯定。因为SOA方式更加关注如何去连接服务而不是去特地某个实现的细节。SOA指面向服务的体系架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。SOAP是简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。
客户端和服务器端的通讯方式:
REST(Representational state transfer)
表达性状态转移(Representational state transfer,REST)类似于HTTP协议,REST把接口限定在一组HTTP操作中,比如GET、PUT、DELETE等以供调用,此种服务可以通过WSDL来描述SOAP消息内容,通过HTTP限定动作接口;或者完全在SOAP中对动作进行抽象。restful是一种架构风格,其核心是面向资源;而webService底层SOAP协议,主要核心是面向活动。REST对于资源型服务接口来说很合适,同时特别适合对于效率要求很高,但是对于安全要求不高的场景。而SOAP的成熟性可以给需要提供给多开发语言的,对于安全性要求较高的接口设计带来便利。所以我觉得纯粹说什么设计模式将会占据主导地位没有什么意义,关键还是看应用场景。
REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为:
1.网络上的所有事物都可以被抽象为资源(resource)
2.每一个资源都有唯一的资源标识(resource identifier),对资源的操作不会改变这些标识
3.所有的操作都是无状态的
SOAP的成熟度:
SOAP虽然发展到现在已经脱离了初衷,但是对于异构环境服务发布和调用,以及厂商的支持都已经达到了较为成熟的情况。
不同平台,开发语言之间通过SOAP来交互的web service都能够较好的互通。
幂等
概念:
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。幂等与你是不是分布式高并发还有JavaEE都没有关系。关键是你的操作是不是幂等的。
幂等举例:
“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的。把编号为5的记录的A字段设置为0,这种操作不管执行多少次都是幂等的。
非幂等举例:
把编号为5的记录的A字段增加1,这种操作显然就不是幂等的。要做到幂等性,从接口设计上来说不设计任何非幂等的操作即可。比如:当用户点击赞同时,将答案的赞同数量+1。改为:当用户点击赞同时,确保答案赞同表中存在一条记录,用户、答案。赞同数量由答案赞同表统计出来。更复杂的操作幂等保证是利用唯一交易号(流水号)实现:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣钱了,流水记录也变成了两条。