前言

如何清晰分辨集群、分布式与微服务?这三大概念虽有关联,但侧重点截然不同。本文将通过对比表格,一次厘清它们的核心定义与应用场景。

区别与联系

集群

分布式

微服务

概念

集群一般是物理集中、统一管理的机器。

分布式是指服务部署在不同的机器上,一个服务可以提供一个或多个功能,服务之间也是通过RPC来交互或者是WebService来交互的。

而用户是无感知的,就像访问一台计算机一样。

微服务是指很小的服务,可以小到只完成一个功能,这个服务可以单独部署运行,不同服务之间通过RPC调用。

系统部署方式

系统部署方式,是个物理形态。

1.只要是一堆机器,就可以叫集群;

2.集群可能运行着一个或多个分布式系统,也可能运行的不是分布式系统;

系统部署方式,是个工作方式。

1.分布式是部署层面的东西,即强调物理层面的组成。

2.将一个大的系统划分为多个模块,这些业务模块会分别部署到不同的机器上,通过接口进行数据交互。即系统由不同物理上分离的计算机(服务器)组成。

针对应用层面的架构设计方式

1.微服务架构是一种架构设计模式,将系统从逻辑上进行拆分(垂直拆分)成多个微服务,这些服务是围绕业务功能构建的。这些小型服务都在各自独立的进程中运行。

2.可以部署在是同一个服务器,也可以分散在多个服务器上。

3.微服务可以是分布式的,即可以将不同服务部署在不同计算机上,当然如果量小也可以部署在单机上。

耦合度

耦合小,集群中某个机器宕机不影响其他机器中程序的正常运行。

1.分布式的核心就一个字:拆。拆成多模块,并分开部署。

有两种拆分方式:水平拆分,或垂直拆分。

2.分布式服务最后都会向微服务架构演化,这是一种趋势。

微服务化后带来的挑战:服务粒度小,数量大,后期运维将会很难。

粒度更小,服务之间耦合度更低;

每个微服务都由独立的小团队负责,敏捷性更高;

解决问题

缓解单个机器部署的系统的业务压力和性能压力,增加若干台计算机部署同样的程序联合起来工作,这些程序/服务可以是并行的,也可以是做备份。

分布式解决的是系统性能问题: 即解决系统部署上单点的问题,尽量让组成系统的子系统分散在不同的机器上进而提高系统的吞吐能力。

微服务解决的是系统复杂度问题: 一般来说是业务问题,即在一个系统中承担职责太多了,需要打散,便于理解和维护。

特征

  • 可扩展性:集群的性能不限于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。
  • 高可用性:集群当中一个节点发生故障时,这台节点上面所运行的应用程序将在另一个节点被自动接管,消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。
  • 内聚性:指每一个数据库分布节点高度自治,有本地的数据库管理系统。
  • 透明性:指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程,用户不须知道关系是否分割、有无副本、数据存于哪个。
  • 组件化与服务
  • 围绕业务功能的组织
  • 产品不是项目
  • 智能端点和哑管道
  • 分散治理/去中心化治理
  • 分散数据管理/去中心化数据管理
  • 基础设施自动化
  • 容错性设计
  • 演进性设计

补充

分布式系统可能运行在一个集群上,也可能运行在不属于一个集群的多台(2台也算多台)机器上。

简单粗暴的理解,一个程序或系统,只要运行在不同的机器上,就可以叫分布式,比如,C/S架构也可以叫分布式。

分布式部署的不一定是微服务架构,微服务的应用不一定是分布式部署的。

不过实际业务场景中,分布式部署的通常就是微服务架构的项目。

常见的互联网分布式架构

更多推荐