当前位置: 首页 > 科技观察

浅谈集群、分布式、微服务的异同

时间:2023-03-20 16:48:27 科技观察

什么是集群?集群是指将多台服务器聚合在一起,每台服务器实现相同的业务,做相同的事情。但是每台服务器都不是缺一不可的,其作用主要是缓解并发压力和单点故障转移问题。我们可以使用一些廉价的工业标准硬件来构建高度可扩展、高性能、低成本和高可用的系统。集群主要有以下特点:可扩展性(Scalability)在一些大型系统中,预测终端用户的数量和行为是非常困难的。可扩展性是指系统适应不断增长的用户数量的能力。提高这种并发会话能力最直观的方法之一就是增加资源(CPU、内存、硬盘等)。集群是解决这个问题的另一种方法。它允许将一组服务器组合在一起并像单个服务器一样共享。要处理繁重的任务,我们只需要向集群添加新服务器即可。从客户的角度来看,服务连续性或性能几乎没有变化,就好像系统在不知不觉中升级了一样。高可用性(Highavailability)单服务器解决方案并不是一个健壮的方法,因为它很容易出现单点故障。银行和计费处理等一些关键应用程序甚至不能容忍几分钟的停机时间。他们要求此类服务随时可用,并在合理可预测的时间内做出响应。高可用集群的出现是为了让集群的整体服务尽可能的可用,以此来考虑计算硬件和软件的易错性。如果高可用性集群中的主节点发生故障,则在此期间将由辅助节点代替。从节点通常是主节点的镜像,因此当它取代主节点时,可以完全接管其身份。所以系统环境对用户来说是一致的。负载均衡(Loadbalancing)负载均衡集群为企业需求提供了更实用的系统。顾名思义,该系统将处理负载尽可能均匀地分布在计算机集群中。此负载可以是应用程序处理负载或需要平衡的网络流量负载。这样的系统非常适合大量用户运行同一组应用程序。每个节点可以处理一部分负载,负载可以在节点之间动态分配以达到平衡。高性能(HighPerformance)通常,这种设计的集群用于开发并行编程应用程序以解决复杂的科学问题。并行计算(或并行计算)是相对于串行计算而言的,并行计算能力的目的是为了提高计算速度。它实际上是一个计算机集群,其处理能力相当于一台真正的超级计算机。什么是分布式分布式服务是指多台服务器的集合,服务分布部署在不同的机器上。每个服务器在人口中实现不同的服务并做不同的事情。一个服务可能负责几个功能,这是一个面向SOA的架构。分散部署的部分通过各种通信协议相互交换信息,各个服务器缺一不可。如果一台服务器出现故障,就会导致部分功能缺失,或者整体无法运行。分布式存在的主要作用是大大提高效率,缓解服务器访问和存储压力。区分分布式的方式就是一个业务拆分出多个子服务,分别部署在不同的服务器上。例如:将一个大系统分成多个业务模块,将业务模块部署在不同的机器上,业务模块之间通过接口交换数据。上图中ServiceA、B、C、D为业务组件,通过APIGeteway访问。什么是微服务?微服务的概念类似于分布式。微服务是一种架构风格。简单的说,微服务是非常小的服务,小到一个服务只对应一个功能。每个微服务只专注于完成一个任务并且很好地完成那个任务,这个服务可以独立部署和运行。每个微服务都是松耦合的,服务之间可以通过RPC进行交互。每个微服务都由一个独立的小团队开发、测试、部署和上线,负责其整个生命周期。在做架构设计的时候,你预估了最大用户数和最大并发数之后,计算单台应用服务器是否能满足需求。对于一个只有几百个用户的小应用,一个应用就可以搞定,也就是所有的应用都部署在一个应用服务器上。如果用户量大,有些功能会被频繁访问,或者有些功能计算量大,建议将应用拆解成多个子系统,每个子系统负责自己的功能。这就是微服务架构。微服务的设计是为了不因为某个模块的升级和BUG而影响到整个系统已有的业务。微服务和分布式的细微差别在于,微服务的应用不一定分散在多台服务器上,也可以是同一台服务器。与分布式服务相比,微服务的粒度更小,服务之间的耦合度更低。由于每个微服务都由一个独立的小团队拥有,因此更加敏捷。分布式服务最终会演变成微服务架构,这是一个趋势。但是微服务带来的挑战也很明显,比如服务粒度小,数量大,会增加后期运维的难度。集群、分布式、微服务的异同和联系1、分布式通过缩短单个任务的执行时间来提高效率,而集群通过增加单位时间内执行的任务数来提高效率。示例:如果一个任务由10个子任务组成,每个子任务单独执行需要1小时,则该任务在一台服务器上执行需要10小时。采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务之间的依赖关系,完成这个任务只需要一个小时。(这种工作模式的典型代表是Hadoop的Map/Reduce分布式计算模型)采用集群方案,同时提供10台服务器,每台服务器可以独立处理这个任务。假设有10个任务同时到达,10台服务器同时工作,1小时后,10个任务同时完成。这样,一个任务可以在1小时内完成。注意:分布式需要良好的事务管理。2、集群模式下,不同服务器部署同一套服务对外访问,实现服务的负载均衡。区分集群的方式是根据部署的多台服务器的业务是否相同,分布式系统中的每个节点都可以作为一个集群。而且集群不一定是分布式的。例子:比如访问新浪网的人比较多,他可以做一个集群。前面放一个响应服务器,后面几个服务器完成同样的业务。如果有业务访问,响应服务器会把任务分派给哪台服务器,看哪台服务器负载不重。而分布式,从狭义上讲,类似于集群。但是,它的组织比较松散,不像集群那样只有一个组织。如果一台服务器崩溃,其他服务器可以接管。每个分布式节点完成不同的服务。如果一个节点宕机,服务将无法访问。注意:集群模式需要很好的共享session,保证在切换不同服务器的过程中不会因为没有获取到session而终止服务。3、分布式和微服务的关系分布式和微服务的架构非常相似,只是部署方式不同。生产环境中的微服务一定是分布式部署的,而分布式部署的应用不一定就是微服务。比如集群部署,将同一个应用复制到不同的服务器上,但逻辑功能仍然是单个应用。4.开发上能不能把分布式和集群分开?针对这个问题,我们从分布式的介绍中可以看出,它的主要作用就是模块化我们的系统,解耦系统。方便我们以后的维护和开发。但是它不能解决我们的并发问题,也不能保证服务器宕机后我们系统的正常运行。集群恰好弥补了分布式的不足。集群是处理同一业务的多台服务器。一方面,这样可以解决或改善我们系统的并发问题。另一方面可以解决如果我们的服务器出现一定的宕机时间,系统仍然可以正常运行的问题。一个好的设计应该是分布式和集群的结合,先分布式再集群。具体实现是将业务拆分成很多子服务,然后对每个子服务进行集群部署。这样,即使每个子业务出现问题,也不会影响到整个系统。所以,分布式和集群是一对好朋友,谁也离不开谁。