springcloud整理笔记

springcloud是一套分布式系统框架与doubbo的功能类似但是springcloud中的组件更加丰富,注册发现服务中心、熔断器、负责均衡、调用连式追踪等。

想要用springcloud就一定要学习springboot

https://blog.csdn.net/forezp/article/details/70148833

1.服务注册发现中心eureka

作为服务注册发现中心与zookeeper不同的是eureka的集群没有使用master+slaver的模式,每个eureka服务器都是平级的

我们可以想象一下如果集群环境中出现了每个zk间的通讯故障,有一个或者一部分zk找不到自己的leader了,只能在他们中间在选举出一个,当网络恢复了又会发现出现了两个leader,这种现象称为“脑裂”,在生产环境这是很麻烦的。

而在eureka中这种情况就不会出现了,因为每个eureka之间都是平级的,所以当出现eureka间通讯故障时是不会影响他们的正常运作的,当eureka集群上线时先启动的那个服务器会报错纯属正常,当所有的服务器都启动完成时就不会报错了,下面我做了一个小demo:

https://gitee.com/study_and_discussion_group/spring-cloud-eureka

2.声明式客户端调用feign

说到feign就不得不提到spring的有个内部bean,RestTemplate这个是spring中访问restful api的工具类,他可以将json格式的响应数据直接转换成你所需要的实体

User user = restTemplate.getForObject("http://www.xxx.com",User.class);

feign的底层使用的就是这个,我们知道feign既然是声明式的用起来肯定会很方便,那么性能怎么样呢,这就涉及到了一个概念”负载均衡“,nginx中也有负载均衡,实现原理是路由式的根据设置我方案来进行分配,那么spring-cloud中的负载均衡是怎样做到的呢?

feign调用

开启feign客户端

feign中内置了负载均衡组件Ribbon,他是通过注册发现中心拉取服务器列表,然后通过算法对目标服务器进行请求

https://gitee.com/study_and_discussion_group/spring-cloud-feign

3.负载均衡Ribbon

上文说了负载均衡组件ribbon,负载均衡有很多策略方案适用不同的场景,而ribbon是通过eureka中的信息动态选择的。

4.熔断器Hystrix

在学习spring-cloud之前我并没有觉得熔断器在一个分布式系统中的重要性,觉得他是个可有可无的东西,其实不然,有时候熔断器会在生产环境中起到重要作用,例如一个下游系统集群中10个服务器中有一个启动是失败了或者一个接口没上线,当有请求访问到了这个服务器就会报错,而且这种错误很难发现,毕竟不是100%的必现。这时熔断器会将报错的服务器从集群中剥离出去,避免影响整个服务集群。

在feign调用时

错误处理

https://gitee.com/study_and_discussion_group/spring-cloud-hystrix

hystrix的监听线程是与feign线程同时进行的,所以刚开始使用调整了feign的connetion时间和read时间后

feign.client.config.default.connectTimeout=10000
feign.client.config.default.readTimeout=10000

可能会发现feign的请求明明成功了,但是fallback还是执行了,由于使用的是两个独立的线程所以springcloud也使用了两套配置:

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000

有了断路器当分布式环境中某个系统出现问题的时候我们怎么发现他呢?这时我们需要一个监控面板能查看哪些服务器的断路器是打开的,hystrix-dashborad应运而生

hystrix-dashboard监控页面

https://gitee.com/study_and_discussion_group/spring-cloud-hystrix-dashboard

这里踩过一个springboot2.0版本的坑

springboot2.0中需要添加一个servlet

有了监控面板另一个问题又出现了,生产环境集群时我们不可能一个一个服务器的监控面板去查看,我们需要把这些信息统一起来,这时就需要另一个组件turbine聚合监控

turbine监控页面

https://gitee.com/study_and_discussion_group/spring-cloud-turbine

5.路由组件Zuul

zuul组件类似nginx,可以通过反向代理的方式将请求转发到目标服务器上,通过简单的配置实现一个路由功能。

使用的过程中发现了很多问题,当给application启动类上加zuul标签的时候我发现了两个@EnableZuulProxy @EnableZuulServer,我们要使用哪个呢?两者有什么区别呢?

我百度了一下zuul作为一个组件,是可以单独使用的不局限于spring-cloud,然而如果要跟spring-cloud的其他组件比如eureka,ribbin等一起使用的时候就需要使用@EnableZuulProxy了

zuul组件配置没什么好说的,网上有些例子是错误的,很容易误导人

zuul.routes.servicea.path=/service-a/**

zuul.routes.servicea.service-id=service-a

zuul.routes.servicea.stripPrefix=false

zuul.routes.serviceb.path=/service-b/**

zuul.routes.serviceb.service-id=service-b

zuul.routes.serviceb.stripPrefix=false

path和service-id就不需要多说了,stripPrefix属性很重要,当stripPrefix=true(默认)的时候,请求路由的时候会把”path匹配到的值“(不是“service-id”)去掉的,还有一个属性zuul.stripPrefix这个属性不要与上边的属性弄反

applicationp配置

stripPrefix=false

stripPrefix=true

demo:https://gitee.com/study_and_discussion_group/spring-cloud-zuul

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值