最近有朋友面试被问到这个问题,好像自己也没好好想过这个问题,所以大概整理了下。
微服务准确的说是微服务架构,而分布式则有分布式系统和分布式架构之说,为了不引起不必要的误会,这里统一指分布式架构。
先看下定义:
1、微服务架构
微服务最早由软件开发大师Martin Flower提出,以下是中文翻译:
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
https://blog.csdn.net/jason_wang1989/article/details/88321698
微服务的九大特征:
演进性设计
2、分布式架构
网上搜了一圈也没有准确的定义,我们简单点,如果是分布式系统, 我们说说这个系统是分布式架构,看下分布式系统的定义:
分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统 分布式系统原理与范型
即整个系统是由不同的计算机组成,而用户是无感知的,就像访问一台计算机一样。这里强调的是系统由不同物理上分离的计算机(服务器)组成。
举个例子,下面这个系统是分布式架构的,它由WEB集群、数据库集群、缓存集群组成,各个子系统是由不同的计算机组成的,但这个系统不是微服务的。
微服务解决的是系统复杂度问题,一般来说是业务问题,即在一个系统中承担职责太多了,需要打散,便于理解和维护,进而提升系统的开发效率和运行效率,微服务一般来说是针对应用层面的。微服务如果用在其它系统,如存储系统感觉怪怪的,就像说Mysql集群是微服务的,总觉得哪里不舒服。
分布式解决的是系统性能问题,即解决系统部署上单点的问题,尽量让组成系统的子系统分散在不同的机器上进而提高系统的吞吐能力。
两者概念层面也是不一样的,微服务是设计层面的东西,一般考虑如何将系统从逻辑上进行拆分,也就是垂直拆分;
而分布式是部署层面的东西,即强调物理层面的组成,即系统的各子系统部署在不同计算机上。
微服务可以是分布式的,即可以将不同服务部署在不同计算机上,当然如果量小也可以部署在单机上。