一、概述

一、什么是集群?

集群(cluster)是一种计算机系统/一组计算机,它们作为一个整体连接起来协作完成计算工作。在某种意义上也被看做是一台计算机,这些单个的计算机系统就是集群的节点,每个节点都提供相同的服务,那么系统的处理能力就提升了好几倍。

集群技术的特点:

  • 通过多台计算机完成同一个工作,达到更高的效果。
  • 两机或多机内容、工作过程完全一样,如果一台宕机,另一台可以起作用。

简单来说,就是将同一个系统,部署在多个服务器上,每一台服务器提供相同的服务。

  • 优点
  • 分担了服务器之间的压力。
  • 如果其中一台宕机也不会影响程序的运行。

集群结构的优势:

集群结构的好处就是系统扩展非常容易。随着系统业务的发展,当前系统支持不住了,就给这个集群再增加节点就可以了。

集群存在的问题:

当业务发展到了一定的程度的时候,就会发现一个问题——无论怎么增加节点,貌似整个集群性能的提升效果并不名称,这时候,就需要结合分布式了。

二、什么是分布式?

分布式系统是一组计算机,通过网络相互连接传递信息与通信后并协调它们的行为而形成的系统,组件之间彼此进行交互以实现一个共同的目标。

简单来说,分布式就是把单体应用拆分成多个模块部署在不同的服务器上。

优点:

  • 资源利用率高。
  • 某一个模块不可用了,其他的模块可以继续提供服务。

分布式的优势

  1. 系统之间的耦合度大大降低,可以独立开发、部署、测试,系统与系统之间的边界非常明确,排错也变的相当容易,开发效率大大提升。
  2. 系统更易于扩展,我们可以针对性的扩展某些服务。
  3. 服务的复用性更高。

分布式: 一个模块拆分成多个子模块,部署在多台服务器上。

集群: 同一个模块,部署在多个服务器上。

三、什么是 SOA?

SOA 全称为 Servcie-Oriented Architecture,面向服务的架构。它是一种设计方式,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在与操作系统进程中,各个服务之间通过网络调用。

目的:把优先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。

SOA的特点:分布式、可重用性、扩展灵活、松耦合。

四、什么是微服务?

微服务是一种架构风格,主张把一个大型复杂软件应用拆分成一个或多个微服务,各个服务之间是松耦合的,可以进行独立的开发、测试和部署等。每个微服务只关注于完成一件事情,服务之间通过基于 Http 的 Restful API 进行通信协作。

由于各个独立的服务之间使用的是基于 Http 的 Json 作为数据通信协作的基础,所以这些微服务可以使用不同的语言来开发。

微服务架构 = 80%的 SOA 服务架构思想 + 100%的组件化架构思想 + 80%的领域建模思想。


微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是 “业务需要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。

微服务并没有一个统一的标准定义,它是一种思想,由 Martin Fowler (马丁. 福勒)提出。

五、CAP 理论?

CAP 是理论,不是协议。

  • Consistency 一致性:
  • 数据在分布式环境的多个副本/服务之间能否保持一致性,这里的一致性更多的是指强一致性。在任何服务中对数据完成写操作后任何读操作都必须获取到最新的数据,相当于要求分布式系统中的各个节点时刻保持数据的一致性。
  • Availability 可用性:
  • 不间断对外提供服务,分布式系统一直处于可用状态,对于请求总是能在有限的时间内返回结果。
  • Partition tolerance 分区容错性:
  • 数据冗余备份,分布式系统在任何网络或者单节点故障时,仍能对外提供满足一致性和可用性的服务,也就是说除非整个系统发生故障,不然是影响不了整体使用的。

CAP 理论只能同时满足两个:

  • CA (放弃 P):将所有的数据放在一个节点,避免因网络引起的负面影响,充分保证系统的一致性、可用性,但放弃 P 则意味着放弃了系统的可扩展性。
  • AP (放弃 C):放弃强一致性,保证最终一致性,也就是说可能会因为网络传输暂时看到不用数据,不过最终还是能读取到正确的数据。
  • CP (放弃 A):当节点故障或网络故障时,受到影响的服务需要等待一段时间,在恢复期间不能对外提供服务。

架构师的精力往往就花在怎么根据业务场景在 A 和 C 之间寻求平衡。

六、什么是 Spring Cloud?

Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙的简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以使用 Spring Boot 的开发风格做到一键启动和部署。

Spring Cloud 提供的功能都是组件化的,想要哪个功能就导入哪个功能的依赖,并在启动类上开启。