## 什么是Spring cloud
[详细简介](https://blog.csdn.net/qq_44969643/article/details/106810281)
构建分布式系统不需要复杂、不容易出错。Spring Cloud 为最常见的分布式系统模式提供了一种简单且易于接受的编程模型,帮助开发人员构建有弹性的、可靠的、协调的应用程序。Spring Cloud 构建于 Spring Boot 之上,使得开发者很容易入手并快速应用于生产中。
## Spring Cloud 的服务发现框架——Eureka
[Eureka Server](https://blog.csdn.net/qq_44969643/article/details/106864351)
[Eureka Client具体配置](https://blog.csdn.net/qq_44969643/article/details/106904168)
**总的来说,Eureka 就是一个服务发现框架。**
举一个生活中的例子,就比如我们平时租房子找中介的事情。
在没有中介的时候我们需要一个一个去寻找是否有房屋要出租的房东,这显然会非常的费力,一你找凭一个人的能力是找不到很多房源供你选择,再者你也懒得这么找下去(找了这么久,没有合适的只能将就)。
这里的我们就相当于微服务中的 Consumer ,而那些房东就相当于微服务中的 Provider 。消费者 Consumer 需要调用提供者 Provider 提供的一些服务,就像我们现在需要租他们的房子一样。
**服务注册 Register:**
官方解释:当 Eureka 客户端向 Eureka Server 注册时,它提供自身的元数据,比如IP地址、端口,运行状况指示符URL,主页等。
结合中介理解:房东 (提供者 Eureka Client Provider)在中介 (服务器 Eureka Server) 那里登记房屋的信息,比如面积,价格,地段等等(元数据 metaData)。
## 负载均衡之 Ribbon
[Ribbon配置](https://blog.csdn.net/qq_44969643/article/details/107282521)
**什么是 RestTemplate?**
[RestTemplate配置](https://blog.csdn.net/qq_44969643/article/details/106916528)
RestTemplate是Spring提供的一个访问Http服务的客户端类,怎么说呢?就是微服务之间的调用是使用的 RestTemplate 。比如这个时候我们 消费者B 需要调用 提供者A 所提供的服务我们就需要这么写。
Eureka 框架中的 注册、续约 等,底层都是使用的 RestTemplate 。
**为什么需要 Ribbon?**
Ribbon 是 Netflix 公司的一个开源的负载均衡 项目,是一个客户端/进程内负载均衡器,运行在消费者端。
我们再举个例子,比如我们设计了一个秒杀系统,但是为了整个系统的 高可用 ,我们需要将这个系统做一个集群,而这个时候我们消费者就可以拥有多个秒杀系统的调用途径了
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200721191153500.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)
如果这个时候我们没有进行一些 均衡操作 ,如果我们对 秒杀系统1 进行大量的调用,而另外两个基本不请求,就会导致 秒杀系统1 崩溃,而另外两个就变成了傀儡,那么我们为什么还要做集群,我们高可用体现的意义又在哪呢?
所以 Ribbon 出现了,注意我们上面加粗的几个字——运行在消费者端。指的是,Ribbon 是运行在消费者端的负载均衡器,如下图。
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/20200721191224379.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTY5NjQz,size_16,color_FFFFFF,t_70)
其工作原理就是 Consumer 端获取到了所有的服务列表之后,在其内部使用负载均衡算法,进行对多个系统的调用。
Nginx 是接收了所有的请求进行负载均衡的,而对于 Ribbon 来说它是在消费者端进行的负载均衡。
**Ribbon 的几种负载均衡算法**
RoundRobinRule:轮询策略。Ribbon 默认采用的策略。若经过一轮轮询没有找到可用的 provider,其最多轮询 10 轮。若最终还没有找到,则返回 null。
RandomRule: 随机策略,从所有可用的 provider 中随机选择一个。
RetryRule: 重试策略。先按照 RoundRobinRule 策略获取 provider,若获取失败,则在指定的时限内重试。默认的时限为 500 毫秒。
更换只需要修改配置
```yaml
providerName:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
```
## 微服务网关——Zuul
[添加链接描述](https://blog.csdn.net/qq_44969643/article/details/106941694)
网关是系统唯一对外的入口,介于客户端与服务器端之间,用于对请求进行鉴权、限流、 路由、监控等功能。
## 什么是Feign
[Feign配置](https://blog.csdn.net/qq_44969643/article/details/107321511)
有了 Eureka,RestTemplate,Ribbon 我们就可以愉快地进行服务间的调用了,但是使用 RestTemplate 还是不方便,我们每次都要进行这样的调用。
## 什么是 Hystrix之熔断
[Hystrix配置](https://blog.csdn.net/qq_44969643/article/details/107344970)
在分布式环境中,不可避免地会有许多服务依赖项中的某些失败。Hystrix是一个库,可通过添加等待时间容限和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止服务之间的级联故障并提供后备选项来实现此目的,所有这些都可以提高系统的整体弹性。
## pring Cloud配置管理——Config
[远程配置](https://blog.csdn.net/qq_44969643/article/details/107407660)
[本地配置](https://blog.csdn.net/qq_44969643/article/details/107383847)
Spring Cloud Config 为分布式系统中的外部化配置提供服务器和客户端支持。使用 Config 服务器,可以在中心位置管理所有环境中应用程序的外部属性。
我们的应用只有启动的时候才会进行配置文件的加载,那么我们的 Spring Cloud Config 就暴露出一个接口给启动应用来获取它所想要的配置文件,应用获取到配置文件然后再进行它的初始化工作。
## Spring Cloud Zipkin
Zipkim是一个可以采集并且跟踪分布式系统中请求数据的组件,让开发者可以更加
直观的监控到请求在各个微服务所耗费的时间等
[Zipkin详解](https://blog.csdn.net/qq_44969643/article/details/107423105)