蚂蚁金服开源-SofaRpc源码学习篇

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 一个service,一个client,一个注册中心。service注册自己到registry注册中心,包括service-name,还有相应的ip,port,然后client去监听注册中心,然后拿到service的地址,调用的时候会通过生成一个代理,去invoke调用结果返回

官网

基本流程

https://www.sofastack.tech/projects/sofa-rpc/client-invoke-flow/
在这里插入图片描述

最简单:一个service,一个client,一个注册中心。
在这里插入图片描述
service注册自己到registry注册中心,包括service-name,还有相应的ip,port,然后client去监听注册中心,然后拿到service的地址,调用的时候会通过生成一个代理,去invoke调用结果返回

SofaRpc学习

代码入手

我们在项目里面先实现这个简单的demo,然后debug进去跟着学习。

在这里插入图片描述
这一块没什么谈的,端口号,ip,对应的协议,然后开启一个线程去监听。

服务端-发布过程

服务提供者配置 com.alipay.sofa.rpc.config.ProviderConfig#export

com.alipay.sofa.rpc.bootstrap.DefaultProviderBootstrap#export
在这里插入图片描述
会根据接口,uid,协议拼接成一个key,来保证同一个服务只发布一次。
在这里插入图片描述

服务端-构造执行链

在这里插入图片描述
com.alipay.sofa.rpc.filter.FilterChain#FilterChain

在这里插入图片描述
com.alipay.sofa.rpc.config.AbstractInterfaceConfig#filter
在这里插入图片描述
com.alipay.sofa.rpc.filter.FilterChain#selectActualFilters在这里插入图片描述
在这里插入图片描述
蚂蚁自己封装的扩展类,然后通过ExtensionLoader去加载扩展点

服务端-注册到注册中心

初始化过程

RegistryFactory.getRegistry(registryConfig);

com.alipay.sofa.rpc.registry.RegistryFactory#getRegistry

在这里插入图片描述

不同注册中心会有不同的扩展点,然后根据不同的扩展点去加载注册中心
在这里插入图片描述
注册到注册中心

// 注册到注册中心
providerConfig.setConfigListener(new ProviderAttributeListener());
register();

register()
在这里插入图片描述
会根据不同的配置去进行注册相应的配置

在这里插入图片描述
到这里完成第一步service注册到registry

客户端

看代码
在这里插入图片描述
一样是有配置,服务service-name,协议,超时时间,对于的接口的类,注意这些,为下面讲解埋下伏笔!!!

客户端-生成代理类

com.alipay.sofa.rpc.config.ConsumerConfig#refer

在这里插入图片描述
也是为了避免客户端重复发布

cluster.init();

初始化过程
在这里插入图片描述

com.alipay.sofa.rpc.client.LoadBalancerFactory#getLoadBalancer(com.alipay.sofa.rpc.bootstrap.ConsumerBootstrap)

负载均衡下面单独一个点展开讲


这一块代码的实现。

客户端-连接初始化

在这里插入图片描述

com.alipay.sofa.rpc.client.AllConnectConnectionHolder#doReconnect
在这里插入图片描述
这一块netty的可用性重试

netty

在这里插入图片描述
我们可以看到底层使用netty进行通信,在下面一些解码中埋下伏笔。

客户端-得到服务端列表

List all = consumerBootstrap.subscribe();
在这里插入图片描述
初始化服务端连接(建立长连接)

在这里插入图片描述
ProviderInfo 抽象的服务提供列表

com.alipay.sofa.rpc.client.AllConnectConnectionHolder#addNode

在这里插入图片描述
经常面试遇到CountDownLatch使用,这里就有

**com.alipay.sofa.rpc.client.AllConnectConnectionHolder#initClientRunnable
--- >
com.alipay.sofa.rpc.client.AllConnectConnectionHolder#initClientRunnable**

这里是获取长连接的,然后使用map往里面塞服务者配置以及链接
在这里插入图片描述

客户端-创建代理类

在这里插入图片描述

客户端-具体调用

com.alipay.sofa.rpc.filter.ConsumerInvoker#invoke
在这里插入图片描述
com.alipay.sofa.rpc.client.AbstractCluster#sendMsg

doSendMsg(providerInfo, clientTransport, request)

同步调用
com.alipay.sofa.rpc.transport.http.AbstractHttp2ClientTransport#syncSend
在这里插入图片描述
在这里插入图片描述
看到没有底层通过netty去发送

客户端-解码

这里就涉及netty解码
com.alipay.sofa.rpc.transport.http.AbstractHttpClientHandler#onResponse
com.alipay.sofa.rpc.transport.http.SyncInvokeClientHandler#doOnResponse

decode(response);

在这里插入图片描述
会把一些上下文塞进去

客户端-配置接口,方法用处

com.alipay.sofa.rpc.core.request.SofaRequest
在这里插入图片描述

服务端拿到这个配置的类名,还有方法,参数进行反射的调用
在这里插入图片描述

下一篇

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
8月前
|
负载均衡 Dubbo Java
Dubbo 3.x:探索阿里巴巴的开源RPC框架新技术
随着微服务架构的兴起,远程过程调用(RPC)框架成为了关键组件。Dubbo,作为阿里巴巴的开源RPC框架,已经演进到了3.x版本,带来了许多新特性和技术改进。本文将探讨Dubbo 3.x中的一些最新技术,包括服务注册与发现、负载均衡、服务治理等,并通过代码示例展示其使用方式。
422 9
|
编解码 Dubbo 应用服务中间件
Alibaba开源Dubbo源码解析手册,竟引领出RPC的新潮流
前言 Apache Dubbo,一款由阿里巴巴于2011年开源的高性能Java RPC框架,自开源以来在业界产生了深远影响。有大量公司广泛使用,甚至很多公司的自研RPC框架中都能看到Dubbo的影子。Dubbo在国内服务化体系演进过程中扮演了重要角色。尽管经历了几年的沉寂,但在阿里巴巴重启对Dubbo的开源维护,Dubbo正在从微服务领域的高性能RPC框架逐步演变为一个完整的微服务生态。 对于开发者来说,深入了解Dubbo底层的架构设计和实现是一项挑战。因此,一份完整的、体系化的对Apache Dubbo进行深入原理剖析的手册就显得尤为重要。
|
7月前
|
消息中间件 存储 NoSQL
阿里开源中间件一览
阿里开源中间件一览
441 2
|
8月前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
167 0
|
NoSQL Java Redis
爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战
爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战 有幸从一位朋友那里得到Alibaba内部出品强推的“SpringBoot+微服务学习指南”,秉承好东西的当然要共享的原则,今天就来秀一把,试试这“Springboot+微服务学习指南”是否也能让你事半功倍! Spring Boot 构建小系统到架构分布式大系统(理论+实战)
|
开发框架 监控 Dubbo
5 分钟读懂开源服务框架 Dubbo 及其最新规划
5 分钟读懂开源服务框架 Dubbo 及其最新规划
319 7
5 分钟读懂开源服务框架 Dubbo 及其最新规划
阿里毕玄:RPC 框架优化之路,从 37k 到 168k
阿里毕玄:RPC 框架优化之路,从 37k 到 168k
148 0
|
Kubernetes Dubbo Cloud Native
Dubbo3开源标杆案例:中伦网络 Dubbo3 升级实践
> 阿里集团正全面从 HSF 迁移到 Dubbo3 体系,登陆网站了解详情 https://dubbo.apache.org/ 中伦网络在 2022 年完成了服务框架从 Dubbo2 到 Dubbo3 的全站升级,深度使用了应用级服务发现、Kubernetes 原生服务部署、服务治理等核心能力。来自中仑网络的技术负责人来彬彬对整个 Dubbo3 的选型、升级过程及收益等做了深入总结。 值得一提
350 0
Dubbo3开源标杆案例:中伦网络 Dubbo3 升级实践
|
XML SpringCloudAlibaba Dubbo
硬核 | 我一个人开发了“Dubbo”框架
大家好,我是冰河~~ 没错,这次冰河又要搞事情了,这次准备下手的是RPC框架项目。为什么要对RPC框架项目下手呢,因为在如今分布式、微服务乃至云原生不断发展的过程中,RPC作为底层必不可少的通信组件,被广泛应用在分布式、微服务和云原生项目中。
152 0
硬核 | 我一个人开发了“Dubbo”框架
|
Dubbo Java 应用服务中间件
Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)(上)
Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)(上)
Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)(上)