欢迎来到飞鸟慕鱼博客,开始您的技术之旅!
当前位置: 首页知识笔记正文

微服务性能,微服务容器

终极管理员 知识笔记 133阅读

文章目录 负载均衡原理流程原理源码分析负载均衡流程 负载均衡策略饥饿加载总结

负载均衡原理 流程 原理

LoadBalanced
标记RestTemplate发起的http请求要被Ribbon进行拦截和处理

源码分析 ctrlshiftN搜索LoadBalancerInterceptor进入。发现实现了ClientHttpRequestInterceptor客户端Http请求拦截器的intercept方法

拦截方法
打一个断点启动order-application浏览器发送请求 “userservice”然后进入到了RibbonLoadBalancerClient的excute方法中。
进入到excute方法发现调用了该类的一个重载方法excute
step into到这个excute方法
发现serviceId “userservice”通过serviceId获取到ILoadBalancer点开ILoadBalancer发现里面存储了两个userservice即成功拉取了2个userservice。获取的loadBalancer对象的名称为DynamicServerListLoadBalancer,动态服务列表负载均衡器。
进入到getServer方法下一步从loadBalancer的2个userservice中选择1个
再进入到chooseServer方法里最终调用了父类的chooseServer方法

进入最终调用了rule.choose方法
查看这个rule发现是一个IRule类型这是一个接口ctrlh查看实现该接口的类有哪些
发现有好几种规则RoundRobinRandom等正是通过这几种规则从多个userservice中选择出一个合适的userservice。 负载均衡流程 负载均衡策略


通过定义IRule的实现可以修改负载均衡的策略

方式一直接在配置类中定义。针对所有微服务而言。
Beanpublic IRule randomRule(){    return new RandomRule();}
方式二在application.yml中定义。针对某个微服务。
userservice:    ribbon:        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
饥饿加载

Ribbon默认采用的是懒加载即第一次访问Ribbon服务的时候才会加载LoadBalanceClient请求时间会很长
而饥饿加载在项目启动时加载

ribbon:    eager-load:        enabled: true # 开启饥饿加载         clients: userservice # 指定对userservice这个服务饥饿加载
懒加载第一次访问是409ms后续10ms
饥饿加载第一次访问是236ms后续10ms

总结

标签:
声明:无特别说明,转载请标明本文来源!