# SpringCloud
SpringCloud整体核心架构只有一点:Rest服务。
既然核心是Rest架构,那么如果想更好的去使用Rest服务需要考虑如下问题:
1:所有的微服务地址一定非常多,所以为了统一管理这些地址服务,也为了即时的告诉用户哪些服务不可用,所以应该准备一个分布式注册中心,并且该注册中心支持有HA机制,为了告诉并且方便的进行微服务的注册操作,在SpringCloud里面提供有一个Eureka 的注册中心。
2:对于整个WEB端的架构可以轻松方便的实现WEB程序的编写,而后利用Nginx或者Apache实现负载均衡,但是WEB端出现了负载均衡,业务端呢?应该也提供有多个业务进行负载均衡,那么这个时候需要将需要参与到负载均衡的业务端在Eureka中进行注册,负责均衡可以使用Ribbon实现。
3:在进行客户端使用Rest架构调用的时候,往往都需要一个调用地址,即使使用了Eureka作为注册中心,那么它也需要一个明确的调用地址,可以所有的操作如果都用调用地址的方式来处理,程序的开发者最方便的应用工具是接口,所以现在就希望可以将所有的Rest服务的内容以接口的方式出现调用,所以它又提供一个feign技术,利用此技术可以伪造接口。
4:在进行微服务的设计过程里面还需要考虑一个问题:如果客户端调用了微服务A,而后微服务A又调用了微服务B,微服务B又调用了微服务C,如果现在C坏了,但是A和B没坏,那么此时A和B一定也无法进行正常操作,所以需要提供有熔断机制(Hystrix)。
5:随后还需要去考虑访问的路由处理机制,所以又提供有zuul配置。
6:既然是微服务,就必须考虑到负载的监控。
## Eureka服务治理
对于服务发现框架可以简单的理解为服务的注册和使用的操作步骤,Eureka和zookeeper的作用基本相同,在SpringCloud之中所有的微服务都向Eureka进行注册,而后客户端直接利用Eureka进行服务的获取。
## Ribbon负载均衡
现在所有的服务都通过了Erueka进行了注册,这样所有的微服务汇集到了Eureka之中,而客户端的调用也应该通过Eureka完成,这种调用可以通过Ribbon技术来实现。Ribbon是一个服务调用组件,并且是一个客户端实现负载均衡的处理的组件。
二:Ribbon负载均衡:
注解@LoadBalanced。其实这个就是一个负载均衡的注解。也就意味着现在可以实现负载均衡的处理了。
## Feign接口转换
但是现在所进行的Rest服务都是通过url调用的。例如:consumer-80中的调用。所有数据的调用和转换都必须由用户自己来完成,而我们本身不擅长这些,我们习惯于通过接口来实现业务操作,而不是通过具体的Rest数据,说的直白一点就是JSON数据。在springcloud中,将Rest技术转换为接口的技术是用Feign来实现的。
总结:
还可以使用Feign进行配置文件的修改实现Rest数据的压缩,Feign最核心的作用是将Rest服务的信息转换为接口,并且自动实现负载均衡。所有Feign=RestTemplate+HttpHeader+Ribbon的综合体。
##Hystrix熔断机制
一:基本配置
所谓的熔断机制就是指当我们的服务提供方出现了问题之后整个程序出现的信息显示,不要是默认的白板信息:错误,500之类的,而是替换为我们希望为用户展现的页面。
二:服务降级
负载均衡和服务降级是RPC技术里面最为重要的一个话题,所谓的服务降级指的是当服务提供方不可使用的时候,程序不会出现异常,而是我们故意设计的错误提示。而服务的降级是在客户端实现的,与你的服务器端没有关系。此时我们要结合Feign一起使用所以这次我们在Feign客户端进行熔断的配置。
三:Hystrix Dashboard
在Hystrix里面提供有一种监控的功能,这个功能就是“Hystrix Dashboard”,可以利用它进行微服务的监控操作。
##Zuul路由访问:
路由是微服务架构
不可或缺的一部分。
所有的微服务都是通过Eureka完成,但是在很多的开发之中,为了规范,提供有一个路由的处理控制组件:Zuul。
也就是Zuul大部分时间只作为中间的一个代理层出现。
例如:”/” 可能映射到你应用主页,/api/users映射到用户服务,/api/contract映射到合同服务。
在实际使用之中,所有的微服务一定都有自己的认证信息,那么就必须访问的时候追加有认证的头部信息,这样的功能也可以通过Zuul的过滤功能实现。
##分布式配置中心:Spring Cloud Config
在操作中发现,我们的配置文件有大量的重复,这个时候可以考虑将配置文件做成一个配置中心,服务从配置中心读取文件,配置中从远程Git读取配置文件,当服务很多时,都需要同时从配置中心读取文件的时候,可以考虑将配置中心做成一个单独的微服务。
##消息总线:Spring Cloud Bus
Spring Cloud Bus 将分布式的节点和轻量的消息代理连接起来,这可以用于广播配置文件的更改或者其他的管理工作。消息总线还可以为微服务做监控,也可以作为应用程序之间相互通讯。
##Spring Cloud Sleuth
服务链路追踪。