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 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Spring Cloud Netflix Ribbon -> 正文阅读

[网络协议]Spring Cloud Netflix Ribbon

Spring Cloud Netflix Ribbon

微服务架构下的服务通信需求

通信实现

  • RPC框架 如:dubbo
  • 手写RPC模块
  • HTTPClient调用
  • RestTemplate
  • OkHttp
  • JDK HttpUrlConnection

RESTful HTTP协议通行

规范了HTTP通信协议的标准

  • HTTP METHOD 约束资源操作类型 GET POST PUT DELETE
  • REST是面向资源的 uri
    • GET /order/${id}
    • POST /order
    • PUT /order
    • DELETE /order/${id}
  • 名词 uri是一个名词而不是动词
  • HTTP返回码 2xx,3xx,4xx,5xx

服务的拆分

拆分背景

  • 系统已经长时间运行

  • 以微服务架构开始

    架构始终跟随需求变化

拆分的前提

  • 问题驱动
  • 前置化规划
  • 性能提升
  • 团队(运维、开发)

拆分的准备

  • 基础设施
  • 业务模型和整体架构的规划(数据库的拆分、应用层的优化)

微服务拆分

<<拆分边界>>

  • 功能维度
  • 业务维度
  • 康威定律(考虑团队结构)
  • 拆分粒度(如:商品服务(商品库存、商品目标、商品评价、商品图片))
  • PerfMa(JVM调优)

RestTemplate

负载均衡

微服务中服务集群如何访问

Ribbon

客户端负载均衡

  • 解析配置中的服务器列表
  • 基于负载均衡算法实现请求分发

通过LoadBalanceIntorceptor拦截RestTemplate,解析url

装饰器模式

@Quelifier标记

List list = Collections.emptyList();

Ribbon源码分析

初始化

LoadBalancerAutoConfiguration

	@LoadBalanced
	@Autowired(required = false)
	private List<RestTemplate> restTemplates = Collections.emptyList(); //拿到所有被@LoadBalanced注解的RestTemplate实例
  • @LoadBalanced

    @Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    @Qualifier   //标记
    public @interface LoadBalanced {
    
    }
    
  • LoadbalancerInterceptor

    @Bean
    		public LoadBalancerInterceptor loadBalancerInterceptor(
    				LoadBalancerClient loadBalancerClient,
    				LoadBalancerRequestFactory requestFactory) {
    			return new LoadBalancerInterceptor(loadBalancerClient, requestFactory);
    		}
    
  • RestTemplateCustomizer

    @Bean
    		@ConditionalOnMissingBean
    		public RestTemplateCustomizer restTemplateCustomizer(
    				final RetryLoadBalancerInterceptor loadBalancerInterceptor) {
    			return restTemplate -> {
    				List<ClientHttpRequestInterceptor> list = new ArrayList<>(
    						restTemplate.getInterceptors());
    				list.add(loadBalancerInterceptor);
    				restTemplate.setInterceptors(list);
    			};
    		}
    
  • SmartInitilizingSingleton

    @Bean
    	public SmartInitializingSingleton loadBalancedRestTemplateInitializerDeprecated(
    			final ObjectProvider<List<RestTemplateCustomizer>> restTemplateCustomizers) {
    		return () -> restTemplateCustomizers.ifAvailable(customizers -> {
    			for (RestTemplate restTemplate : LoadBalancerAutoConfiguration.this.restTemplates) {
    				for (RestTemplateCustomizer customizer : customizers) {
    					customizer.customize(restTemplate);
    				}
    			}
    		});
    	}
    //定制所有被@Loadbalanced注解的RestTemplate实例
    

使用RestTemplateCustomizer定制所有被@Loadbalanced注解的RestTemplate实例

调用链路

在这里插入图片描述

RibbonLoadBalancerClient.execute

  1. request=ServiceRequestWrapper 通过匿名内部类创建

  2. request.apply()

  3. InterceotinaAsvncClientHttoRequest.executeAsync()

    • 重构URL

      1. reguest.getURI()
      2. ServiceRequestWraoper.getURI()
      3. RibbonLoadBalancerClient.reconstructURI()
    • 发起异步远程调用

      AbstractAsvncClientHttoReguest.executeAsync()

未完…

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-16 18:03:49  更:2021-12-16 18:05:27 
 
开发: 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/26 11:39:32-

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