用互联网上的计算机的中央处理器的闲置处理能力来解决大型计算问题的一种计算科学
用分布在不同局域网的多个服务器共同完成业务 其中某几个服务器是用户直接访问,为了防止用户访问量大的时候直接访问的服务器挂掉–单点失败,用多个服务器分担用户的访问量
对应于集中式系统,分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。简单来说就是一群独立计算机集合共同对外提供服务,但是对于系统的用户来说,就像是一台计算机在提供服务一样
通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。
集群系统中的单个计算机通常称为节点,通常通过局域网连接,但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机,比如工作站或超级计算机性能价格比要高得多
集群分为同构与异构两种,它们的区别在于:组成集群系统的计算机之间的体系结构是否相同。
1. 高可用性集群 High-availability (HA) clusters 一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行 负责进行负载均衡的服务器可以是一个高可用性集群
2. 负载均衡集群 Load balancing clusters 负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到整个系统的高性能和高可用性。这样的计算机集群有时也被称为服务器群(Server Farm)。 一般高可用性集群和负载均衡集群会使用类似的技术,或同时具有高可用性与负载均衡的特点。
3. 高性能计算集群 High-performance (HPC) clusters 高性能计算集群采用将计算任务分配到集群的不同计算节点儿提高计算能力,因而主要应用在科学计算领域。比较流行的HPC采用Linux操作系统和其它一些免费软件来完成并行运算。这一集群配置通常被称为Beowulf集群。这类集群通常运行特定的程序以发挥HPC cluster的并行能力。这类程序一般应用特定的运行库, 比如专为科学计算设计的MPI库。
Linux虚拟服务器(LVS)项目在Linux操作系统上提供了最常用的负载均衡软件
4. 网格计算 Grid computing 网格计算或网格集群是一种与集群计算非常相关的技术。网格与传统集群的主要差别是网格是连接一组相关并不信任的计算机,它的运作更像一个计算公共设施而不是一个独立的计算机。还有,网格通常比集群支持更多不同类型的计算机集合。
网格计算是针对有许多独立作业的工作任务作优化,在计算过程中作业间无需共享数据。网格主要服务于管理在独立执行工作的计算机间的作业分配。资源如存储可以被所有结点共享,但作业的中间结果不会影响在其他网格结点上作业的进展
在云端创建虚拟服务器,可以轻松创建删除,根据用户的需求动态地增减服务器
由于服务有状态,每个用户对应一个数据状态,例如购物车,或是账户。如果这个账户信息或是购物车信息没有在集群中的各个服务器间进行同步,那么会造成失效转移失败,导致用户端频繁出现登录界面的情况。
如何解决?
一种方法是把状态信息在集群的各个服务器间复制(使用Webspher,Weblogic这样的应用服务器)
一种办法就是把服务状态相关的数据集中存储在一个地方,让集群中的各个服务器都能访问到(如Redis)
指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性) 这三个基本需求,最多只能同时满足其中的2个。
一致性: 数据在多个副本之间能够保持一致的特性(严格的一致性)可用性: 系统提供的服务必须一直处于可用的状态,每次请求都能获取到非错的响应(不保证获取的数据为最新数据)分区容错性: 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,除非整个网络环境都发生了故障如图所示,网络中有两个节点N1和N2,可以简单的理解N1和N2分别是两台计算机,他们之间网络可以连通,N1中有一个应用程序A,和一个数据库V,N2也有一个应用程序B和一个数据库V。现在,A和B是分布式系统的两个部分,V是分布式系统的数据存储的两个子数据库。 在满足一致性的时候,N1和N2中的数据是一样的,V0=V0。 在满足可用性的时候,用户不管是请求N1或者N2,都会得到立即响应。 在满足分区容错性的情况下,N1和N2有任何一方宕机,或者网络不通的时候,都不会影响N1和N2彼此之间的正常运作。 如图所示,这是分布式系统正常运转的流程,用户向N1机器请求数据更新,程序A更新数据库V0为V1。分布式系统将数据进行同步操作M,将V1同步的N2中V0,使得N2中的数据V0也更新为V1,N2中的数据再响应N2的请求。