SpringCloud学习心得

SpringCloud

初衷

最近公司的老项目基本维护稳定了,规划一个资讯项目,我打算用众望所归的cloud提升下技术b格,之前只会用boot,做技术的就要一直保持学习,不吃老本,开始学习cloud。写篇博客记录下。

介绍

SpringCloud为开发人员提供了快速构建分布式系统的常用工具,包括配置管理、服务发现、服务熔断、智能路由、总线、鉴权等。SpringCloud基于SpringBoot实现微服务架构,它是Java项目从单体应用架构向微服务架构变迁的主流选择之一。

特性

(1) 分布式/版本化配置

(2) 服务注册和发现

(3) 路由

(4) service - to - service 调用

(5) 负载均衡

(6) 断路器

(7) 分布式消息传递

打比方

单体应用:个人开发者

微服务:开发公司

主要组件

(1)服务注册、发现 Eureka -- 公司通讯录

(2)微服务应用 -- 小组成员

(3)断路器Hystrix--员工绩效考核制度

(4)断路器监控Hystrix Dashboard和Turbine--员工绩效考核表

(5)客户端负载均衡器Ribbon--小组组长的工作安排机制

(6)路由/网关Zuul--项目经理的工作安排机制

(7)统一配置Config--管理部的开发规范

(8)链路追踪Sleuth--工作进度统计

CAP定理 (一致性、可用性、分区容错性)

zk   CP (追求强一致性)

eureka  AP(强可用性)

eureka 服务治理 (服务注册、发现)

(1) 接下来重点讲一下 eureka服务端,要声明自己是eureka 的服务端,在启动类注解

yml配置:

  client:

    register-with-eureka: false  (为别人提供注册服务的,自己不需要)

    fetch-registry: false  (不需要同步别人的服务)

    service-url: (比如是一个map,可以查看源码)

      default-zone : http://${}:${}/eureka/    (如果不配置默认加载8761的 eureka)

region(大区)  zone(具体的小区)

(2) 如何去注册:

比如说hello-service ,要声明自己是eureka 的客户端,在启动类注解

yml配置:

  server.port : 8081  

  spring.application.name=hello

  eureka.client.service-url.defaultZone=http://${}:${}/eureka/  (去哪里注册,就是上面所说的服务端) 

同理,可以注册多个 eureka 的客户端 的服务。

 

心跳和续约区别:

(1) 心跳是 服务端请求客户端: 哥们你还活着吗?

(2) 续约是 客户端来服务端续约,在过期时间到来前 不访问就被服务端干掉

Ribbon 客户端的负载均衡(知道哪些服务是高可用的)

主要是进行请求转发,默认的负载均衡算法就是轮巡,可以修改负载的规则(随机等)

yml:

  server.port= 9000

  spring.application.name:=ribbon-consumer

  # stores.rabbon.listOfServers=localhost:8081,localhost:8082 (写死是不合适的、要跟eureka 结合使用)

  stores.ribbon.NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule (这种配置后就是随机)

hystrix 请求熔断 服务降级  依赖隔离(舱壁模式 docker)  请求缓存  请求合并

@EnableCircuitBreaker  在启动类上配置

@HystrixCommand(fallbackMethod = "b" [服务降级])

public String a() {

  return "";

}

public String b() {

  return "";

}

如果a 坏了、就降级到b。

Feign 声明式服务调用

zuul  api网关

原文地址:https://www.cnblogs.com/pzyin/p/10980857.html