IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> SpringBoot2.x系列教程17-SpringCloud组件-Ribbon -> 正文阅读

[PHP知识库]SpringBoot2.x系列教程17-SpringCloud组件-Ribbon

springcloud ribbon是一个基于HTTP和TCP的客户端工具,是在Netflix Ribbon的基础上通过springcloud的封装,就可以让我们轻松的将面向服务的REST模板请求自动转化为客户端的负载均衡的服务调用,提供了连接超时、重试、等功能。ribbon虽然不向服务注册中心、配置中心、服务网关那些需要独立部署,但是针对springcloud搭建的微服务而言,服务之间的相互调用是都是通过ribbon来实现的,后续的Feign和Open Feign虽然功能是都是一样的,但是后面两者的功能都是在前者的基础上进行构建的,因此掌握ribbon还是十分有必要的。

负载均衡


负载均衡从软硬件的角度可以分为硬负载与软负载,然后从负载执行角度又分为客户端负载均衡与服务端负载均衡。硬负载就是直接在服务器和外部网络间安装负载均衡硬件设备,这种设备我们通常称之为负载均衡器。由专门的设备完成,独立于操作系统,整体性能得到大量提高,加上更多的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。 一般来说,硬件负载均衡在功能、性能上优于软件方式,不过成本昂贵,很常见的有 F5负载均衡器;软负载就是使用软件来做负载均衡,在服务器的操作系统上,安装软件,来实现负载均衡,如Nginx负载均衡。它的优点是基于特定环境、配置简单、使用灵活、成本低廉,可以满足大部分的负载均衡需求,我们常用的软负载有nginx,lvs,haproxy等等。

1、服务端负载均衡

服务端负载均衡,其实就像f5,nginx这样,当用户发起请求到服务端的时候,我们使用这些负载均衡器根据一定的负载均衡算法,然后将请求路由到目标服务器处理。

2、客户端负载均衡

所谓的客户端负载均衡,就像Ribbon一样,其实还有很多的rpc框架里面的负载均衡都是客户端负载均衡。这个客户端负载均衡一般用在微服务中或者是SOA中,主要是服务调用服务的时候,服务调用者会根据服务提供者列表中选择出合适的一个,然后服务调用者拿着选出来的服务提供者信息去调用。

负载均衡策略

1、RoundRobinRule(轮循策略)默认是超过一定的次数(10次)不可用就返回空,就是你这次请求,它帮你选出来一个实例,然后不可用,它会再帮你选一个,还不可用的话,就帮你再选一个,就这样选10次

2、RoundomRule(随机策略)取不到实例的情况下,会一直帮你选择直到选出可用的实例

3、RetryRule(重试策略)一定时限内循环重试。默认继承RoundRobinRule,也支持自定义 注入,RetryRule会在每次选取之后,对选举的server进行判断, 是否为null,是否alive,并且在500ms内会不停的选取判断。而 RoundRobinRule失效的策略是超过10次,RandomRule是没有失 效时间的概念,只要serverList没都挂。

4、BestAvailableRule(最小连接数策略)其实就是从服务列表中获取连接数最少的那个实例,算 法里面有一个LoadBalancerStats的成员变量,会存储所有server 的运行状况和连接数,如果选取的实例是null的话,就会使用RoundRobinRule算法帮你选取.

5、AvailabilityFilteringRule(可用过滤策略)先通过轮询出来一个实例,然后再去判断是否超时可用,连接数是否超出限制,然后都符合的会返回。

6、ZoneAvoidanceRule(区域权衡策略) 这是个默认策略,扩展了轮询策略,继承了2个过滤器:ZoneAvoidancePredicate和 AvailabilityPredicate,除了过滤超时和链接数过多的server,还会 过滤掉不符合要求的zone区域里面的所有节点,AWS --ZONE 在一个区域/机房内的服务实例中轮询。

实战案例

1、maven 配置

<properties>
		<java.version>1.8</java.version>
		<spring-cloud.version>2020.0.3</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

2、在springcloud_eureka_client01工程中创建一个api

@RestController
public class Test {

    @GetMapping("/getUser")
    public  User getUser() {
       User user = new User();
       user.setName("zhangsan");
       user.setAge("12");
       return user;
    }
}

3、在springcloud_eureka_client02工程中访问服务

3.1、主启动类中添加@EnableDiscoveryClient注解

3.2、主启动类或者配置类中负载均衡对象

@Bean
	@LoadBalanced
	public RestTemplate getTestTemplate() {
		return new RestTemplate();
	}

3.3、服务调用

@RestController
public class controller {

    /**eureka-client01为微服务的名称**/
    private static final String REST_URL_PREFIX = "http://eureka-client01";

    @Autowired
    private RestTemplate restTemplate;

    /**调用其他微服务的接口**/

    @RequestMapping("/hello")
    public  Object hello() {
        return restTemplate.getForObject(REST_URL_PREFIX+ "/getUser", Object.class);
    }
}

3.4、访问

localhost:9002/hello

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-04 17:17:00  更:2021-09-04 17:17:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 10:32:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码