分布式、集群、微服务
什么是集群
集群是指将多台服务器集中在一起,每台服务器都实现相同的业务,做相同的事情。但是每台服务器并不是缺一不可,存在的作用主要是缓解并发压力和单点故障转移问题。
集群主要具有以下特性:
(1)伸缩性
(2)高可用性:高可用集群,同样的服务部署到多个服务器上,再部署一个带有负载均衡算法的服务(如:nginx),就可以将访问的压力分布在各个服务器上,从而提高服务的抗压能力。
(3)负载均衡:负载均衡集群,
(4)高性能
什么是分布式
分布式服务是指将多台服务器集中在一起,每台服务器都实现总体中的不同业务,做不同的事情。服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向 SOA 的架构,服务之间也是通过 RPC(一般通过网络进行调用不是部署在同一台机器的服务)来交互或者是webservice来交互的。
维基百科:RPC是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互。许多技术(通常是不兼容)都是基于这种概念而实现的。
逻辑架构设计完后就该做物理架构设计(分布式架构),系统应用部署在超过一台服务器或虚拟机上,且各分开部署的部分彼此通过各种通讯协议交互信息,也就是分布式部署。
分布式部署的每台服务器都缺一不可,如果某台服务器故障,则部分功能缺失,或导致整体无法运行。
分布式存在的主要作用是大幅度的提高效率,缓解服务器的访问和存储压力。同时分布式中的每一个节点,都可以做集群。
例如:将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。
上图中 Service A、B、C、D 分别是业务组件,通过 API Geteway 进行业务访问。
什么是微服务
微服务是一种架构风格,从开发的角度来说,微服务的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务。彻底地去解耦,每一个微服务能够自行独立启动或者销毁,拥有自己独立的数据库。
微服务的设计目的:为了不因为某个模块的升级和 BUG 影响现有的整个系统业务。
微服务的概念和分布式比较相似,微服务是一种架构风格。简单来说微服务就是很小的服务,小到一个服务只对应一个单一的功能,每个微服务仅关注于完成一件任务并很好地完成该任务,这个服务可以单独部署运行, 各个微服务之间是松耦合的。服务之间可以通过 RPC 来相互交互,可以使用不同的编程语言,只要按照约定的规范发送请求和接收数据。
微服务与分布式的区别
微服务架构的应用不一定是分布式部署,它也可以部署在同一台服务器,但生产环境下的微服务一般都采用分布式部署。
分布式架构/部署的应用不一定是微服务架构,比如集群部署,它是把相同应用复制到不同服务器上,但是逻辑功能上还是单体应用而非微服务。
微服务架构重在解耦,它的粒度更小,服务之间耦合度更低。每个微服务都有独立的生命周期(由独立的小团队负责,包括开发、测试、部署、上线),因此它敏捷性更高。分散能力。
分布式架构重在资源共享与加快计算机计算速度。缓解服务器因服务集中带来的压力。分散压力。
分布式服务最后都会向微服务架构演化,这是一种趋势。不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维难度会增大。
集群与分布式的区别
简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率**。**
例如:如果一个任务由 10 个子任务组成,每个子任务单独执行需 1 小时,则在一台服务器上执行该任务需 10 小时。
采用分布式方案:提供 10 台服务器,每台服务器只负责处理一个子任务(任务拆分),不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是 Hadoop 的 Map/Reduce 分布式计算模型)。
采用集群方案:同样提供 10 台服务器,每台服务器都能独立处理这个任务。假设有 10 个任务同时到达,10 个服务器将同时工作,1 小时后,10 个任务同时完成,这样,整身来看,还是 1 小时内完成一个任务!
注:分布式需要做好事务管理。