Spring Cloud

特点
- 微服务是SOA思想的一种扩展。
- 更加强调服务个体的独立性,拆分粒度更小。
思想
- 将单一应用程序拆分为一组小型服务的方法。
- 服务之间采取轻量级的通信机制来沟通。
六边形架构
- 六边形架构又称为端口-适配器。
- 六边形架构将系统分为内部(内部六边形)和外部
- 内部代表了应用的业务逻辑。
- 外部代表应用的驱动逻辑、基础设施或其他应用。
- 内部通过端口和外部系统通信,端口代表了一定协议,以API呈现。一个端口可能对应多个外部系统,不同的外部系统需要使用不同的适配器,适配器负责对协议进行转换。
Eureka:服务治理与服务发现
-
@EnableEurekaServer:启动了Eureka模块。
-
@EnableDiscoveryClient:启用服务发现,新版本不需要注解。
-
运行流程:
- Eureka客户端启动后,定期向Eureka服务端注册自己的信息(包括服务名,IP,端口)。
- Eureka客户端定时拉取服务端已保存的服务注册信息。
- 拉取服务端保存的注册信息后,就可以调用其他的服务。
-
客户端如何注册
- Eureka客户端启动后,首先会创建一个心跳的定时任务向Eureka服务器发送心跳信息。
- Eureka服务端响应客户端心跳,如果状态码为404,表示服务端没有客户端的信息,客户端注册服务名,IP,端口等信息带服务端中。
-
服务端如何保存信息
- 服务实例信息注册到了register变量(ConcurrentHashMap)中。
-
客户端如何拉取信息
- Eureka客户端通过定时任务拉取Eureka服务端服务信息。
- 拉取后刷新本地已保存的信息。
- 使用时从本地直接获取。
-
高可用的Eureka集群
- Eureka集群配置,指定其他Eureka服务端的地址
eureka.client.service-url.defaultZone= http://localhost:10000/eureka/,http://localhost:10001/eureka/,http://localhost:10002/eureka/- Eureka集群的信息同步死循环问题
- 注册中心判断收到的注册信息来源。
- 如果是客户端的注册信息,则同步到其他注册中心。
- 否则不操作。
-
心跳机制
- Eureka客户端启动后,会定时向服务端发送心跳数据,告知自己仍然存活。
-
服务剔除机制
- 针对非正常关闭服务的情况,超过一定阈值没有检查到心跳,Eureka服务器会剔除该服务。
-
自我保护机制
- Eureka服务端检查心跳正常占比,低于一定阈值就会触发。
- 触发自我保护机制后,Eureka服务端锁定该服务,不让服务列表内的服务过期。
Feign:声明式服务调用
-
基于动态代理机制,调用接口会调用Feign创建的动态代理。
-
基于接口的注解,整合了Ribbon和Hystrix,提供接口式的声明服务调用编程。
-
使用:启动类@EnableFeignClients,调用的服务(@FeignClient(name="......"))
Ribbon:客户端负载均衡
-
@LoadBalanced:使用@LoadBalanced注解的RestTemplate使用调用调用微服务请求时,会自动实现负载均衡。
-
通过负载均衡的算法使每个节点能够比较平均地分摊请求。
-
某个节点故障,通过负载均衡的算法可以将故障节点排除,使后续请求分散到其他可用的节点上。
-
负载均衡算法:随机、轮询、随机轮询、加权轮询。
Hystrix:断路器
-
@EnableCircuitBreaker:启动断路器。
-
@HystrixCommad:指定方法启用断路机制,超过一定时间(可自定义)用降级方法做请求响应,避免请求的积压。
-
保证在一个依赖出问题的情况下,不会导致整体服务的失败,避免级联故障,提高分布式系统的弹性。
-
通过HystrixCommand注解实现服务熔断:
- 失败的次数达到阈值,熔断该节点微服务的调用,调用服务降级方法响应。
-
服务降级
- 保证重要服务运行,对不重要的服务延迟使用或暂停使用。
- 触发自动降级:超时降级,失败次数降级,故障降级,限流降级。
- 降级后的处理策略:页面降级,延迟服务,读/写降级,缓存降级,fallback处理逻辑。
-
通过fallbackMethod(回退函数)具体实现服务降级:
- 在客户端完成,与服务器无关。
- 服务熔断后,客户端准备本地的fallback回调,返回一个缺省值。
Zuul: API网关
-
EnableZuulProxy:将网关服务注册到服务注册中心中。
-
将请求的地址映射为真实服务器的地址。
-
路由分发,降低单个节点的负载。
-
过滤验证码错误的请求,降低网站服务的风险。
-
限流算法:
- 漏桶算法:请求进入到漏桶中,漏桶限制数据的传输速率。不能实现某种程度的突发传输。
- 令牌桶算法:以特定的速率向令牌桶投放令牌;不符合匹配规则的报文直接发送;符合匹配规则的报文需要令牌桶处理,桶中有足够的令牌,则报文可以继续被发送,令牌数量按报文长度相应地减少,达到限流的目的。

如何安全调用微服务
- 用户提供信息给认证服务器。
- 服务器验证成功,返回token。
- 用户携带token访问受保护的接口。
你知道的越多,你不知道的越多。

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