栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

负载均衡之Ribbon

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

负载均衡之Ribbon

1>定义

负载均衡(Load Balance)是将负载(工作任务/访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行,在微服务里常用到.

根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡

上图中,前者服务端负载均衡 后者客户端负载均衡

在微服务调用关系中一般会选择客户端负载均衡,举例-->粤核酸就是一种客户端负载均衡的方式去实现的

2>基于Ribbon的负载均衡(器)

三大组件组成负载均衡器

>>负载规则-->从服务器列表中决定用哪个服务器

>>ping任务-->用来验证服务器是否可用

>>服务器列表

Ribbon是Spring Cloud的一个组件, 它可以让我们使用一个注解就能轻松的搞定负载均衡 

在启动类的restTemplate()方法上贴@LoadBalanced

http请求和ribbon的融合

@SpringBootApplication
public class OrderServer {
    public static void main(String[] args) {
        SpringApplication.run(OrderServer.class,args);
    }
    // 通过java代码去调用一个http的接口地址
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}
@Service
@Slf4j
public class OrderServiceImpl implements OrderService {
    @Autowired
    private OrderDao orderDao;
    @Autowired
    private RestTemplate restTemplate;
    @Override
    public Order createOrder(Long productId,Long userId) {
        log.info("接收到{}号商品的下单请求,接下来调用商品微服务查询此商品信息", productId);
        //远程调用商品微服务,查询商品信息
        Product product = restTemplate.getForObject(
                "http://product-service/product/"+productId,Product.class);
        log.info("查询到{}号商品的信息,内容是:{}", productId, JSON.toJSONString(product));
        //创建订单并保存
        Order order = new Order();
        order.setUid(userId);
        order.setUsername("古天乐");
        order.setPid(productId);
        order.setPname(product.getPname());
        order.setPprice(product.getPprice());
        order.setNumber(1);
        orderDao.save(order);
        log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));
        return order;
    }
}
3>负载均衡的执行原理
 Product product = restTemplate.getForObject(
                "http://product-service/product/"+productId,Product.class);

1)在RestTemplate的bean中贴@LoadBanlanced,在请求之前,会对地址进行处理
2)通过截取的方式,截取http://到第一个/的内容 获取服务名product-service
3)获取到DiscoveryClient,通过getInstances("product-service") 获取本地缓存列表的集合 如果获取不到 就执行最后一步
4)根据内部设置负载均衡策略选中其中一个主机(这里策略默认轮询)  获取主机和端口
5)将URL地址的服务名替换成具体的ip地址
6)进行远程调用
4>负载均衡的策略

 这里用RandomRule 随机策略去做案例

在服务站服务的application.yml文件中配置

product-service: # 调用的提供者的名称
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

重新启动 再访问就行了 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/884888.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号