集群/分布式

集群是多台计算机为了完成同一个工作,组合在一起达到更高的效率的系统

分布式是为了完成一个工作,将工作拆分为多个服务,分别运行在不同机器上的系统

分布式系统的CAP理论

强一致性、高可用性、分区容错性无法同时达到极致

强一致性指的是多个节点间的数据是实时一致的

高可用性指的是单位时间内我们的分布式系统能够提供服务的时间

分区容错性指的是分布式系统中一部分节点出现问题以后,我们仍然可以提供正常服务。

SpringCloud的基础功能

  • 服务治理:Eureka
  • 客户端负载均衡:Ribbon
  • 服务容错保护:Hystrix
  • 声明式服务调用:Feign
  • API网关服务:Zuul
  • 分布式配置中心:Config

Eureka(服务治理)

这是一个根据服务名字提供IP和端口的服务器,和DNS服务器比较像,我们的节点分为3类,服务提供者、服务消费者、EurekaServer

服务提供者

这些节点提供服务,他们在EurekaServer上注册自己,并定时通过心跳机制来表明自己正常,当他下机的时候也会通知EurekaServer, 这些分别叫做服务注册、服务续约、服务下线

服务消费者

这些节点调用服务提供者的服务,但是他们不知道IP和Port是多少,所以他们需要先向EurekaServer询问自己想要调用的服务在哪些机器上,然后才可以调用服务。这些叫做获取服务和服务调用

EurekaServer

他们支持服务提供者的注册,支持服务消费者的询问,还要支持监视服务提供者的心跳,当他们发现某服务提供者心跳出现问题的时候,将其剔除,如果某些服务提供者的心跳不正常但是不致死,他们就会将这些服务提供者的信息保护起来,尽量不让他们过期。

Ribbon(客户端负载均衡)

摘自撸一撸Spring Cloud Ribbon的原理

说起负载均衡一般都会想到服务端的负载均衡,常用产品包括LBS硬件或云服务、Nginx等,都是耳熟能详的产品。
而Spring Cloud提供了让服务调用端具备负载均衡能力的Ribbon,通过和Eureka的紧密结合,不用在服务集群内再架设负载均衡服务,很大程度简化了服务集群内的架构。

Hystrix(服务器容错)

问题提出

在高并发的情况下,某个服务延迟,导致其他请求延迟,最终引发雪崩

断路器

当某个服务单元故障,即50%的请求失败的时候,就会触发熔断,直接返回错误调用,熔断期间的请求都会直接返回错误,5秒以后重新检测该服务是否正常,判断熔断是否关闭

线程隔离

为了保证服务之间尽量不要相互影响,每个服务的线程池是独立的

Feign(声明式服务调用)

我们可以直接使用注解构造接口来指定服务,非常简单,你只需要声明一下就可以了
当然他整合了Ribbon和Hystrix

Zuul(API网关服务)

看得不是太懂

我们的微服务实现了Eureka,但是入口的第一个服务缺没有,,Nginx必须手动维护IP,然后Nginx执行负载均衡以后,我们还需要对每一个请求验证签名、登陆校验冗余,这就导致了重复的代码。

Zuul出现了,他整合了Eureka、Hystrix、Ribbon,通过Eureka解决IP问题,通过调用微服务解决代码重复的问题

Config(分布式配置中心)

功能和Zookeeper比较相似

入门结束

下次再深入学习,我康康SpringMVC去

参考资料

外行人都能看懂的SpringCloud,错过了血亏!
Spring Cloud Feign设计原理
SOA和微服务架构的区别?
分布式、集群、微服务、SOA 之间的区别
微服务Springcloud超详细教程+实战(一)