当前位置: 首页 > news >正文

怎么用服务器做局域网网站呼伦贝尔市建设网站

怎么用服务器做局域网网站,呼伦贝尔市建设网站,免费网站如何做推广,有赞分销平台目录 隔离和降级 FeignClient整合Sentinel 通过Feign设置服务降级 1.创建类实现FallbackFactory接口,并让这个类和使用FeignClient的接口类绑定 2.让order-service服务的feign开启sentinel 3.测试,只开启order-service服务,而不开启user-…

目录

隔离和降级

FeignClient整合Sentinel

通过Feign设置服务降级

 1.创建类实现FallbackFactory接口,并让这个类和使用@FeignClient的接口类绑定

2.让order-service服务的feign开启sentinel

3.测试,只开启order-service服务,而不开启user-order服务

总结:

 线程隔离

线程隔离的实现方式

 sentinel的线程隔离

1)配置隔离规则

2)jemter测试

 总结


隔离和降级

虽然限流可以尽量避免因高并发而引起的服务故障,但服务还是会因为某些原因(服务自己出现问题)而故障。而要将这些故障控制在一定范围内,避免雪崩,就要靠线程隔离(舱壁模式)和熔断降级手段了

线程隔离就是:调用者在调用服务提供者时,给每个调用的请求分配独立线程池,出现故障时,最多消耗这个线程池内资源,避免把调用者的所有资源耗尽。

可以看到下图,我们已经规定了访问其他服务可以使用的最大线程数为10个,服务C出现问题,就只会有10个线程无法使用,而不会导致服务A中的所有线程都不可用,导致线程A宕机。

熔断降级:是在调用方这边加入断路器,统计对服务提供者的调用,如果调用的失败比例过高,则熔断该业务,不允许访问该服务的提供者了。

由下图可以看到,当服务A向服务D由两个请求都出现异常时,在服务A和服务D之间就会出现一道熔断墙,阻止服务A的其他请求向服务D(直接报错,抛异常)

 我们发现不能处理的请求都是直接抛异常,终止请求,我们可以设置降级服务

如:如果访问queryById接口失败,就去访问queryByIdFalback接口作为备选

FeignClient整合Sentinel

SpringCloud中,微服务调用都是通过Feign来实现的,因此做客户端保护必须整合Feign和Sentinel。

通过Feign设置服务降级

 在orderService微服务中会使用UserFeignClient去访问用户的信息

我们需要给UserFiegnClient的方法设置服务降级

User user = userFeignClient.queryById(order.getUserId());

 1.创建类实现FallbackFactory接口,并让这个类和使用@FeignClient的接口类绑定

不要导错包 ,是feign.hystrix.FallbackFactory包下的FallbackFactory

import feign.hystrix.FallbackFactory;
//直接加@Component不能被启动类扫描到,因为与启动类不在同一个包
public class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient> {//cause为远程调用UserFeignClient时出现的异常@Overridepublic UserFeignClient create(Throwable cause) {cause.printStackTrace();return new UserFeignClient() {
//重写UserFeign的所有方法,作为服务降级的备选处理方法@Overridepublic User queryById(Long id) {//设置默认用户信息User user = new User();user.setId(null);user.setAddress(null);user.setUsername("默认用户");return user;}@Overridepublic String getUser(String username, Integer age) {return "没有这个用户";}};}
}

 维护到IoC容器中

  @Beanpublic UserFeignClientFallbackFactory userFeignClientFallbackFactory(){return new UserFeignClientFallbackFactory();}

让UserFeignClient与UserFeignClientFallbackFactory绑定服务降级

//与FallbackFactory绑定降级服务
@FeignClient(value = "user-service",configuration = FeignConfig.class,fallbackFactory = UserFeignClientFallbackFactory.class)
public interface UserFeignClient {@RequestMapping("/user/{id}")//使用Get方式发送请求,获取到的响应数据反序列化成User类型User queryById(@PathVariable("id")Long id);//这里是把方法参数放到请求路径中,与controller相反@RequestMapping("/user/getUser")//使用@RequestParam注解让Feign知道这两个请求参数值是要加到url地址中的String getUser(@RequestParam("username") String username, @RequestParam("age") Integer age);
}

2.让order-service服务的feign开启sentinel

feign:httpclient:enabled: true # 开启feign对HttpClient的支持max-connections: 200 # 最大的连接数max-connections-per-route: 50 # 每个路径的最大连接数sentinel:enabled: true #与sentinel整合,开启服务降级

3.测试,只开启order-service服务,而不开启user-order服务

如果我们之前没有编写服务降级,就会直接报错,查不到用户信息,但是我们已经开启的服务降级

访问接口,返回的用户信息是我们设置的默认用户信心,服务降级成功 

 

总结:

Feign整合Sentinel的步骤:

  • 在application.yml中配置:feign.sentienl.enable=true
  • 给FeignClient编写FallbackFactory并注册为Bean
  • 将FallbackFactory配置到FeignClient

 线程隔离

线程隔离的实现方式

线程隔离有两种方式实现:

  • 线程池隔离

  • 信号量隔离(Sentinel默认采用)

线程池隔离:给每个服务调用业务分别分配一个线程池,利用线程池本身实现隔离效果

优点:

  • 支持主动超时:服务I的请求主线程到线程池时,如果线程池没有及时给出响应,就直接报错,支持主动超时
  • 支持异步调用:服务I的请求主线程,访问到访问服务A的线程池时,线程池会自己抽出一个空闲线程去访问服务A,而不用请求主线程主动访问

缺点:

线程的二外开销大

信号量隔离:不创建线程池,而是计数器模式,记录业务使用的线程数量,达到信号量上限时,禁止新的请求。

 优点:

轻量级,不需要额外的线程开销,一个线程执行到底

缺点:

  • 不支持主动超时
  • 不支持异步调用

 sentinel的线程隔离

在添加限流规则时,可以选择两种阈值类型:

 

  • QPS:就是每秒的请求数,在快速入门中已经演示过

  • 线程数:是该资源能使用用的tomcat线程数的最大值。也就是通过限制线程数量,实现线程隔离(舱壁模式)。

案例需求:给 order-service服务中的UserClient的查询用户接口设置流控规则,线程数不能超过 2。然后利用jemeter测试。

1)配置隔离规则

因为order-service服务的feign已经整合的sentinel,也会把feign接口的方法作为资源

选择feign接口后面的流控按钮:

这里设置了访问/user/{id}接口时,同时最多使用的线程数为2个 

 

2)jemter测试

一瞬间同时创建10个线程

 

一次发生10个请求,有较大概率并发线程数超过2,而超出的请求会走之前定义的失败降级逻辑。 

访问/user/{id}时同时使用的线程超过2时,就是触发线程隔离,然后服务降级 

 总结

线程隔离的两种手段是?

  • 信号量隔离

  • 线程池隔离

信号量隔离的特点是?

  • 基于计数器模式,简单,开销小

线程池隔离的特点是?

  • 基于线程池模式,有额外开销,但隔离控制更强
http://www.yayakq.cn/news/72306/

相关文章:

  • 怎么做企业网站推广需要多少钱视频教育网站开发
  • 网站内容优化细节网站建设捌金手指花总十三
  • 陕煤化建设集团铜川分公司网站wordpress 视频播放大小
  • 免费网上商城网站建设上海互联网企业50强
  • 15年做啥网站致富越秀金融大厦地址
  • ppt模板有哪些网站杭州下城区建设局网站
  • 在哪些网站做推广比较好网站设计 做鼠标效果
  • 网站图片怎么做缓存制作网站公司 英语网站首页
  • 网站主页如何配色饿了么网站怎么做的
  • 东莞网站SEO优化托管html网页设计表格代码
  • 重庆的电子商务网站怎么原创视频网站
  • 网站搜索引擎优化主要方法上海营销网站设计
  • 电脑城网站开发需求分析给公司做网站数据分析
  • 锦江区建设和交通局网站福田公司怎么样
  • 免费网站alexa排名查询网站建设费如何做账
  • 百度怎么优化网站关键词外链查询网站
  • 网站后台如何登陆网站建设企业文化
  • 长沙网站制作首页国家中小学智慧教育平台
  • 北京教育学会网站建设seo网络营销的技术
  • jsp网站开发制作新余做网站的公司
  • 正规网站建设学习网公司哪家好佛山专业做网站
  • 泰州专业网站建设公司免费网站奖励自己游戏
  • 做公司网站要学会什么2015年做那个网站致富
  • 织梦网站新闻列表调用大学网站建设策划书
  • 搭建一个wordpress网站多钱ps中网站页面做多大的
  • 织梦装修设计网站模板小游戏开发平台
  • 常德市建设工程造价网站网站地图模版
  • 网站源码44444kt青岛市城市建设档案馆网站
  • 网站建设需用要什么7月8月带孩子适合去哪里旅游
  • 网站开发竞品分析有没有帮人做CAD的网站