• SpringCloud之旅


     

    现在大部分公司的项目架构都选择了微服务,我们公司也不例外,那么什么是微服务呢?今天就来开启SpringCloud之旅!

    SpringCloud是基于SpringBoot的一整套的微服务架构。他提供了微服务开发所需的配置服务(SpringCloud Config)、服务发现(Eureka)、服务容错保护(Hystrix)、服务网关(Zuul)、负载均衡(Ribbon)、声明式服务调用(Fegin)等组件;

    一、服务发现(Eureka)

      作用:服务治理---服务的注册与发现;

      组成:Eureka服务端和Eureka客户端;

    二、客户端负载均衡(Ribbon)

      Ribbin从Eureka注册中心获取服务列表信息,缓存到本地,在本地实现负载均衡策略;

      说到这里,我印象里还有个Nginx也可以实现负载均衡,那么他们有什么区别呢?

        Nginx是将客户端的所有请求统一交给Nginx进行处理,实现负载均衡请求转发。

        

        废话不多说直接上图↓

                  

    三、服务容错保护(Hystrix)

      1、主动超时:设置一个请求时间,超时就返回;

      2、限流:限制最大并发数;

      3、熔断:当错误超过一定阈值时快速返回失败,不调用后端服务,同时隔一定时间放几个请求重试这个后端服务时候恢复。如果正常就关闭熔断,失败则直接返回;

      4、隔离:把每个依赖或者调用的服务都隔离开,防止整体服务不可用;

      5、降级:服务失败后,返回指定的默认信息;

     四、声明式服务调用(Fegin)

      Fegin是一个声明式、模板化的Http客户端,整合了Eureka、Robbin和Hystrix,方便Fegin的使用;

    @FeignClient(name = "eureka-service")
    public interface UserFeignClient {
      @RequestMapping(value = "/{id}", method = RequestMethod.GET)
      public User findById(@PathVariable("id") Long id);
    }
    @RestController
    public class MovieController {
      @Autowired
      private UserFeignClient userFeignClient;
     
      @GetMapping("/user/{id}")
      public User findById(@PathVariable Long id) {
        
    return this.userFeignClient.findById(id); } }
    @EnableDiscoveryClient //注册发现服务
    @SpringBootApplication
    @EnableFeignClients //启动Fegin项目
    public class ConsumerMovieApplication {
      public static void main(String[] args) {
        SpringApplication.run(ConsumerMovieApplication.class, args);
      }
    }

    五、服务网关(Zuul)

      微服务网关是介于客户端和服务器端之间的中间层, 所有的外部请求都会先经过微服务网关;

      优点:

    • 易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
    • 易于认证。可在微服务网关上进行认证,然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
    • 减少了客户端与各个微服务之间的交互次数。

      

    Zuul的核心是一系列的过滤器,这些过滤器可以完成以下功能。

      1、身份认证与安全;识别每个资源的验证要求,并拒绝那些与要求不符的请求。
      2、审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。
      3、动态路由:动态地将请求路由到不同的后端集群。
      4、压力测试:逐渐增加指向集群的流量,以了解性能。
      5、负载分配:为每一种负载类型分配对应容量,并弃用超岀限定值的请求。
      6、静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
      7、多区域弹性:跨越AWS Region进行请求路由,旨在实现ELB ( Elastic Load Balancing) 使用的多样化,以及让系统的边缘更贴近系统的使用者。

  • 相关阅读:
    Django -- 多对多建表增删改查
    Django -- 一对多建表增删改查
    Django -- 图书管理系统
    Django -- 基础
    前端 -- jQuery
    前端 -- JavaScript-BOM
    前端 -- JavaScript-DOM
    前端 -- JavaScript基础
    前端 -- HTML块级标签
    linux目录结构
  • 原文地址:https://www.cnblogs.com/jiangbaoyabo/p/15103202.html
Copyright © 2020-2023  润新知