集群、负载均衡、分布式和微服务的概念及异同

摘要:分布式系统是当前比较热门的话题,说到分布式就不得不提集群和单机,如果要学习分布式就要先对它的概念和功能有所了解,本文主要介绍集群、负载均衡、分布式和微服务的概念及异同。

分布式系统是当前比较热门的话题,说到分布式就不得不提集群和单机,如果要学习分布式就要先对它的概念和功能有所了解,本文主要介绍集群、负载均衡、分布式和微服务的概念及异同。

单机就是把 Web 需要的服务,部署到一台服务器上,所有的请求业务都由这台服务器处理。

这种架构优点显而易见,学习成本较低,方便部署维护,但当业务增长到一定程度的时候,请求处理变多,服务器资源会无法满足业务需求。

集群

集群就是单机的多实例,将多台实现相同功能的服务器集中在一起,实现同一业务,在逻辑上可以看做是一台服务器对外进行服务,这些服务器组合就是集群。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

  • 集群中每台服务器称为节点,所有节点构成集群,每个节点都提供相同的服务。
  • 节点存在的主要作用是缓解并发能力和单点故障转移等问题。
  • 并发:是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。
    单点故障:是指系统中一点失效,就会让整个系统无法运作的部件,换句话说,单点故障即会整体故障。
  • 通过叠加多个节点的能力,从而实现整个集群能力的提升。
  • 集群需要做好 Session 共享,也就是接口要具有无状态特征,确保在不同节点切换的过程中,不会因为没有获取到 Session 而引起服务终止。

集群主要分成三大类(高可用集群, 负载均衡集群,高性能计算集群)

高可用集群(High Availability Cluster)

高可用集群是保障集群持续对外提供服务的能力,把因软件、硬件或人为造成的故障对业务的影响降低到最小程度。

常见的有由 2 个节点做成的 HA 集群,分为主、次节点,俗称“双机热备”、“双机”,是集群的最小组成单位。

如果主节点发生了故障,那么这段时间内由次节点代替它。次节点通常是主节点的镜像,所以当它代替主节点时,它可以完全接管其身份。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

负载均衡集群(Load Balance Cluster)

负载均衡集群为企业需求提供了更实用的系统,该系统可使负载(如网络流量负载)在集群中尽可能被平均分摊处理。

每个节点都可以处理一部分负载,并且可以在节点之间动态分配负载,以实现平衡,还可以根据每个节点上不同的可用资源或网络的特殊环境来进行优化。

这类集群在接收到用户请求时,会检查接受请求较少、不繁忙的服务器,并把请求转到这些服务器上,非常适合于运行同一组应用程序的大量用户。

关于负载均衡的更多说明请浏览 负载均衡的分发算法及 ip hash 配置方法 这篇文章。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

高性能计算集群(High Performance Computing Cluster)

高性能计算集群,简称 HPC 集群。

这类集群致力于提供单个计算机所不能提供的强大的计算能力,使用很多的处理器或集群中的多个计算机的硬件资源、计算系统和环境,将大规模的运算任务拆分成很多的小任务分发到各个节点并行计算,再将计算结果汇总成最终的一个结果。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

集群结构的好处就是系统易于扩展,如果随着业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了。

但是,当业务发展到一定程度的时候,会产生一个问题——无论怎么增加节点,整个集群性能的提升效果并不明显了。这时候,就需要使用分布式结构了。

分布式

分布式就是将一个完整的系统,按照业务功能拆分成多个业务模块,分别部署到不同的服务器上,各个业务模块之间通过接口进行数据交互,进而对外提供服务。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

  • 分布式中每个业务模块称为节点,这些节点能够独立运行在 Web 容器中,它们之间通过 RPC 方式通信。
  • 每个节点需要通信与协作,如果节点间互相没有交互,那就是集群。
  • 分布式的组织比较松散,不像集群有一个组织性,一个节点垮了,其它的节点可以顶上来。
  • 分布式中的一个节点垮了,其所属的节点业务就不可访问了,所以要用分布式+集群
  • 分布式中的每一个节点,都可以做集群,而集群并不一定就是分布式的。(如下图:宝宝成长服务系统)
  • 分布式系统具有高度的内聚性和透明性。
  • 分布式系统的体系结构可用处理机之间的耦合度为主要标志来加以描述。
  • RPC(Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法。
    内聚性 是指每一个数据库分布节点高度自治,有本地的数据库管理系统。
    透明性 是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。
    耦合度 是系统模块之间互联的紧密程度,它是数据传输率、响应时间、并行处理能力等性能指标的综合反映,主要取决于所选用体系结构的互联拓扑结构和通信链路的类型。
    互联拓扑结构 是指网络中各个节点相互连接的形式,常见的拓扑结构主要有:总线型结构、环形结构、星形结构、树形结构和网状结构等。
    通信链路 是网络中两个节点之间的物理通道,通信链路的传输介质主要有双绞线、光纤和微波。
    关于耦合度和内聚度的更多说明请浏览 耦合度和内聚度的类型及强弱关系 这篇文章。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。

如何拆呢?有两种方式:水平拆分,或垂直拆分(也称为“横向拆分”和“纵向拆分”),具体如下:

水平拆分

水平拆分是根据“分层”的思想进行拆分。

例如,可以将一个项目根据“三层架构”拆分成:

  • 表示层(jsp + servlet)
  • 业务逻辑层(service)
  • 数据访问层(dao)

然后再分开部署:把表示层部署在服务器 A 上,把业务逻辑层和数据访问层部署在服务器 B 上,然后服务器 A 和服务器 B 之间通过 RPC(如:Dubbo)进行进行整合,如图所示。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

Dubbo 是阿里巴巴公司开源的一款高性能、轻量级的 Java RPC 框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。
它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。

纵向拆分

纵向拆分是根据业务进行拆分。

例如,可以根据业务逻辑,将“电商项目”拆分成“订单项目”、“用户项目”和“秒杀项目”,然后把每个项目部署到不同的节点上。

显然这三个拆分后的项目,仍然可以作为独立的项目使用。像这种拆分的方法,就称为纵向拆分。

集群和分布式的区别

  • 集群是种物理形态,分布式是种工作方式
  • 集群强调的是任务的同一性,分布式强调的是任务的差异性
  • 集群是“串行”工作的,分布式是“并行”工作的。
  • 集群的核心是冗余,分布式的核心是协作
  • 集群是对服务的横向扩展,分布式是对业务的纵向拆分

微服务

微服务,从字面理解,就是非常微小的服务。

微服务属于分布式架构的一种,是对系统架构的一种细粒度拆分,它的粒度更小,服务之间耦合度更低,内聚性也更高。

例如,以下“订单项目”本来就是垂直拆分后的子项目,但实际上“订单项目”还能进一步拆分为“购物项目”、“结算项目”和“售后项目”,如图。

织梦tag标签添加自定义seo标题、关键词、描述、缩略图

现在看图中的“订单项目”,它完全可以作为一个分布式项目的组成元素,但就不适合作为微服务的组成元素了(因为它还能再拆,而微服务应该是不能再拆的“微小”服务,类似于“原子性”)。

总结

  • 集群:是对服务的横向扩展,目的是增强服务能力,降低服务压力。但每个节点负载相同(耦合度高),容易造成了资源浪费。
  • 负载均衡:是为了解决集群节点之间如何分工的问题,即将客户端请求根据某个算法分发到部署的节点上,充当“调度者”的角色。
  • 分布式:是对业务的纵向拆分,目的是为了降低维护成本,方便后期点对点的纠错或者优化,资源利用率高。
  • 微服务:属于分布式架构的一种,是对系统架构的一种细粒度拆分,它的粒度更小,服务之间耦合度更低,内聚性也更高。

分布式的主要功能是将我们的系统模块化,将系统进行解耦,方便维护和开发,但并不能解决系统的并发性和高可用性问题。

而集群恰好弥补了分布式的缺陷,一方面可以解决或者说改善系统的并发问题,另一方可以解决服务器如果出现宕机后,系统仍然可以正常运转,提高了服务的高可用性

好的设计应该是分布式和集群相结合,具体实现就是用分布式将业务拆分成很多子业务,然后针对每个子业务进行集群部署。

总结:为了使服务更加灵活,我们希望每种业务都有自己独立的服务,可供任何项目调用,所以用到了分布式;想要使服务高可用,就需要再以集群的方式部署,那么管理请求时,自然会用到负载均衡

版权声明:本文为博主原创文章,未经博主允许不得转载。http://www.dedenotes.com/html/distributed-cluster.html
(1)
打赏 微信扫一扫 微信 支付宝 QQ 扫码打赏

HTTP消息结构 HTTP请求报文和响应报文的格式

Dedenotes 赞(3)

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等),所有的 WWW(World Wide Web)文件都必须遵守这个标准。

防止表单重复提交的 4 种方法

Dedenotes 赞(3)

平时开发的项目中可能会出现下面这些情况:由于用户误操作,多次点击表单提交按钮;由于网速等原因造成页面卡顿,用户重复刷新提交页面;黑客或恶意用户使用 Postman 等工具重复恶意提交表单(攻击网站)。

meta

Dedenotes 赞(3)

meta 是 html 语言 head 区的一个辅助性标签,位于文档的头部,不包含任何内容,标签的属性定义了与文档相关联的名称/值对。meta 标签可提供相关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词。