目录
Spring Cloud Eureka 和 Zookeeper 的区别(面试)
SpringCloud为了管理、治理好我们的微服务,从多个角度提供了很多组件给我们用。

SpringCloud是微服务思想的实现。SpringCloud是Java语言的微服务框架。什么是微服务在为什么要学SpringCloud中介绍。它依赖于 Spring Boot,简化了很多配置文件的编写。
Spring Cloud 就是通过提供一系列开发组件和框架,帮助开发者迅速搭建 一个分布式的微服务系统。主要由三家公司Spring Netflix Alibaba提供一些组件。

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
单体架构应用的缺点大于优点,所以推出了分布式架构应用:将一个应用拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务,每个模块都是一个微小的服务用来服务整体应用。
而为了更好的管理和治理这些个微服务,就需要使用SpringCloud中提供的各个组件。

1、有很多个服务,客户端该怎么访问?
2、这么多服务,各个服务之间该如何通信完成功能?
3、这么多服务,应该如何管理?
4、这么多服务,要是有一个服务挂了怎么办?
而我们的SpringCloud生态中的各个组件就是为了解决这四个问题而出现的。
服务的注册和发现。(eureka, nacos, consul)
服务的负载均衡。 (ribbon, dubbo)
服务的相互调用。(openFeign, dubbo)
服务的容错。(hystrix, sentinel)
服务网关。(gateway, zuul)
服务配置的统一管理。(config-server, nacos, apollo)
服务消息总线。 (bus)
服务安全组件。 (security, Oauth2 . 0)
服务监控。 (admin) (jvm)
链路追踪。 (sleuth+zipkin)
SpringCloud用哪个版本需要对应版本的SpringBoot,然后如果用了Alibaba的某个版本的组件,也需要对应版本的SpringBoot,所以版本一定要注意。可以去spring官网参考。
SpringCloud和SpringBoot的对应版本:

Alibaba、cloud、boot的版本对应:

1、有很多个服务,客户端该怎么访问?
2、这么多服务,各个服务之间该如何通信完成功能?
3、这么多服务,应该如何管理?
4、这么多服务,要是有一个服务挂了怎么办?
而我们的SpringCloud生态中的各个组件就是为了解决这四个问题而出现的。
API网关:zuul组件
Feign--HttpClient--服务间采用Http通信方式,同步,阻塞
服务注册和发现:使用Euraka管理服务
熔断机制:Hystrix
API网关:没有,需要借助第三方组件(如zuul组件)或自己编码实现
服务通信:Dubbo
服务注册中心:Zookeeper
熔断机制:没有,借助第三方Hystrix

SpringBoot用来开发微服务架构中的一个个微服务,而Spring Cloud是用来协同管理治理这些微服务。
SpringCloud依赖SpringBoot,离不开。
服务注册与服务发现的组件
Eureka 来源于古希腊词汇,意为“发现了”。在软件领域, Eureka 是 Netflix 公司开源的一个 服务注册与发现 的组件,和其他 Netflix 公司的服务组件(例如负载均衡、 熔断器、网关等) 一起,被 Spring Cloud 社区整合为 Spring Cloud Netflix 模块。
Eureka 是 Netflix 贡献给 Spring Cloud 的一个框架! Netflix 给 Spring Cloud 贡 献了很多框架,后面我们会学习到!
什么是CAP原则?
CAP 原则又称 CAP 定理,指的是在一个分布式系统中,
一致性(Consistency)、
可用性(Availability)、
分区容错性(Partition tolerance)(这个特性是不可避免的);
CAP 原则指的是,在一个分布式系统中这三个要素最多只能同时实现两点,不可能三者兼顾,所以要有取舍。CAP原则的精髓就是要么AP,要么CP,要么AC,但是不存在CAP。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):保证每个请求不管成功或者失败都有响应。
分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。
分区容错性是必须要的,所以一般都是CP或AP,Zookeeper注重数据的一致性,采用CP原则。而Eureka注重服务的可用性,采用AP原则。
区别?
Euraka是服务的注册中心和服务发现的组件,Zookeeper是服务注册中心。
Euraka注重服务的可用性,采用AP原则,每个服务节点都是平级的,没有主从关系,所以只要还有一个服务的服务器没挂,整个系统还是可以用的。
Zookeeper注重各个服务间数据的一致性,采用CP原则,在zookeeper里面,若主机挂掉了,则zk集群整体不对外提供服务了,需要选一个新leader的出来(120s)才能继续对外提供服务!不保证高可用。
Eureka Server提供服务注册 服务,各个服务节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
就像饿了吗软件,就可以理解为一个注册中心,各个商家在里面注册,
Lombok常用注解
@Getter/@Setter: 作用类上,生成所有成员变量的getter/setter方法。@ToString : 作用于类,覆盖默认的toString()方法 ,可以通过of属性限定显示某些字段,通过。
exclude属性排除某些字段。
@AllArgsConstructor:生成全参构造器。
@NoArgsConstructor:生成无参构造器。
@Data: 该注解使用在类上,该注解会提供 getter 、 setter 、 equals 、 hashCode 、
toString 方法。
