SpringCloudAlibaba(一)服务治理Nacos以及负载均衡

概念

  • 什么是注册中心(服务治理)
    • 服务注册:服务提供者provider,启动的时候向注册中心上报自己的网络信息
    • 服务发现:服务消费者consumer,启动的时候向注册中心上报自己的网络信息,拉取provider的相关网络信息
  • 核心:服务管理,是有个服务注册表,心跳机制动态维护,服务实例在启动时注册到服务注册表,并在关闭时注销。
  • 为什么要用
    • 微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控制网络地址,对于动态新增机器,维护带来很大问题
  • 主流的注册中心:zookeeper、Eureka、consul、etcd、Nacos
    在这里插入图片描述
  • 官网:https://nacos.io/zh-cn/
  • Linux/Mac安装Nacos
    解压安装包
    进入bin目录
    启动 sh startup.sh -m standalone
    访问 localhost:8848/nacos
    默认账号密码 nacos/nacos
    在这里插入图片描述

集成Nacos

  • 单个服务集成Nacos

    • 添加依赖
    <!--添加nacos客户端-->
    <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
    • 配置Nacos地址
    server:
      port: 9000spring:
      application:
        name: class-video-service
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
    • 启动类增加注解

    @EnableDiscoveryClient

  • 服务之间的调用

@Autowired
    private DiscoveryClient discoveryClient;@Autowired
    private RestTemplate restTemplate;@RequestMapping("save")
    public VideoOrder save(int videoId){
​
        VideoOrder videoOrder = new VideoOrder();
        videoOrder.setVideoId(videoId);
​
        List<ServiceInstance> list = discoveryClient.getInstances("xdclass-video-service");
​
        ServiceInstance serviceInstance = list.get(0);
​
        Video video = restTemplate.getForObject("http://"+serviceInstance.getHost()+":"+serviceInstance.getPort()+
                "/api/v1/video/find_by_id?videoId="+videoId,Video.class);
​
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setVideoId(video.getId());
        return videoOrder;}

负载均衡

  • 什么是负载均衡(Load Balance)

分布式系统中一个非常重要的概念,当访问的服务具有多个实例时,需要根据某种“均衡”的策略决定请求发往哪个节点,这就是所谓的负载均衡,
原理是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,从而提高了数据的吞吐量

  • 软硬件角度负载均衡的种类
    • 通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但比较昂贵的
    • 通过软件来进行解决,常见的软件有LVS、Nginx等,它们是基于Linux系统并且开源的负载均衡策略
  • 从端的角度负载均衡有两种
    • 服务端负载均衡
    • 客户端负载均衡

Ribbon

ribbon支持多种负载均衡策略

策略类命名描述
RandomRule随机策略随机选择server
RoundRobinRule轮询策略按照顺序选择server(默认)
RetryRule重试策略当选择server不成功,短期内尝试选择一个可用的server
AvailabilityFilteringRule可用过滤策略过滤掉一直失败并被标记为circuit tripped的server,过滤掉那些高并发链接的server(active connections超过配置的阈值)
WeightedResponseTimeRule响应时间加权重策略根据server的响应时间分配权重,以响应时间作为权重,响应时间越短的服务器被选中的概率越大,综合了各种因素,比如:网络,磁盘,io等,都直接影响响应时间
ZoneAvoidanceRule区域权重策略综合判断server所在区域的性能,和server的可用性,轮询选择server

负载均衡策略调整

#业务名称
xxx-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

策略选择

1、如果每个机器配置一样,则建议不修改策略 (推荐默认轮询)
2、如果部分机器配置强,则可以改为:WeightedResponseTimeRule

Feign

什么是Feign

  • SpringCloud提供的伪http客户端(本质还是用http),封装了Http调用流程,更适合面向接口化
  • 让用Java接口注解的方式调用Http请求.
  • 不用像Ribbon中通过封装HTTP请求报文的方式调用 Feign默认集成了Ribbon
  • Nacos支持Feign,可以直接集成实现负载均衡的效果

官方文档:

https://spring.io/projects/spring-cloud-openfeign

使用方法

  1. 加入依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  1. 配置注解
    启动类增加**@EnableFeignClients**
  2. 增加一个接口
@FeignClient(name="xxx-service") 

加在service接口层,原来标记该service请求的服务提供者,即目标调用服务
4. 编写代码

@GetMapping(value = "/api/v1/video/find_by_id")
Video findById(@RequestParam("videoId") int videoId);

加在service接口层的方法上,标记清楚请求路径

Post方式提交

//订单消费者的service接口服务层这边请求
@PostMapping(value = "/api/v1/video/save")
Video saveVideo(@RequestBody Video video);
​
​
//视频生产者controller这边接收,两者都用POST
@PostMapping("save")
public Object save(@RequestBody Video video){
        System.out.println(video.getTitle());
        return  video;
}
  • 注意:
  1. 路径 核对

  2. Http方法必须对应

  3. 使用服务提供方用@RequestBody,要使用@PostMapping

Ribbon和feign两个的区别和选择

选择Feign
默认集成了ribbon
写起来更加思路清晰和方便
采用注解方式进行配置,配置熔断等方式方便

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值