Flink中RPC实现原理简介

这篇具有很好参考价值的文章主要介绍了Flink中RPC实现原理简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前提知识

Akka是一套可扩展、弹性和快速的系统,为此Flink基于Akka实现了一套内部的RPC通信框架;为此先对Akka进行了解

Akka

Akka是使用Scala语言编写的库,基于Actor模型提供一个用于构建可扩展、弹性、快速响应的系统;并被应用到Flink中,基于Akka实现了集群组件之间的RPC通信框架

Actor模型

Actor模型是一个通用的并发编程模型,该模型独立维护隔离状态,基于消息传递实现异步通信,大致可以理解为三部分:

  • 邮箱:每个actor持有一个邮箱(mailbox),本质上是一个队列,用于存储消息。
  • 行为:每个actor可以发送消息至任何actor
  • 状态:每个actor可以通过处理消息来更新内部状态,对于外部而言,actor的状态是隔离的状态,避免了并发环境下的锁和内存原子性问题
Akka系统组成

Akka系统核心包括两个组件:ActorSystemActor(使用demo可以参考这里)

  • 只能通过ActorSystem.actorOfActorContext.actorOf创建Actor,不允许直接创建Actor
  • 只能通过ActorRef发送消息与Actor通信

Flink的RPC框架

Flink的RPC框架基于Akka实现,其中Flink集群中实现RPC通信节点功能主要有:DispacherResourceManagerTaskManagerTaskManager;这些节点分别继承了RpcEndPoint抽象类,并在实现类中初始化各自RpcServer(类似于Actor)来提供本地和远程代码请求;RpcServer的创建和启动都是由RpcService(主要实现AkkaRpcService,封装ActorSystem)来完成,此外一个RpcService可以创建多个RpcServer;详细的调用链路图如下所示

Flink中RPC实现原理简介,flink,rpc

RpcEndPoint

RpcEndPoint代表RPC组件的端点,需要实现RPC通信的都需要实现RpcEndPoint,主要成员变量如下

Flink中RPC实现原理简介,flink,rpc

  • rpcServer用于完成本地和远程调用能力

  • rpcService是的rpcService引用,rpcService可用于启动/关闭当前rpcServerrpcServer中封装了ActorRef

  • mainThreadExecutor封装了MainThreadExecutable接口(RpcServer接口继承了MainThreadExecutable),用于实现本地调用

  • endpointId用于唯一标识当前的RpcEndPoint

AkkaRpcService

AkkaRpcService负责创建启动Flink集群RpcEndPoint端点中的RpcServer组件,且AkkaRPCService在集群创建时就会启动完毕;UML类图如下所示

Flink中RPC实现原理简介,flink,rpc

属性:

  • actorSystem是引用Akka的ActorSystem,可以用于启动、停止actor(启动、停止rpcServer
  • actors用于存储创建的RpcEndPoint的实现类(类中会封装actor

方法:

  • startServer()用于启动RpcServer,启动完成后这能对外提供服务
  • connect()用于连接远端RpcEndpoint,并返回调用方RpcGateway接口的代理类,获得调用外部的能力

RpcServer

RpcServer是一个接口类,实际是对Actor的封装,该类实现类有AkkaInvocationHandlerFencedAkkaInvocationHandlerAkkaInvocationHandler中封装有ActorRef,并通过动态代理技术(InvocationHandler)实现远程和本地方法调用

Flink中RPC实现原理简介,flink,rpc

RpcServerRpcGateWayMainThreadExecutableStartStoppable接口的方法,都会通过代理实现;方法中会查看调用方法实现类,来判断本地调用还是通过RefActor发送远程RPC调用

小结

Flink中每个需要使用RPC的组件都会实现RpcEndpoint,每个RpcEndpoin中都会包含两个属性RpcServiceRpcServer;其中RpcService封装了AkkaSystemRpcServer封装了ActorRef,最终通过动态代理技术实现方法的调用

参考资料:

书籍:Flink设计与实现

博客:https://cloud.tencent.com/developer/news/698662文章来源地址https://www.toymoban.com/news/detail-689011.html

到了这里,关于Flink中RPC实现原理简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RPC原理与Go RPC详解

    RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。 RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 首先与RPC(远程过程调用)相对应的是本地调用。 本地调用 将上述程序编译成二

    2024年02月14日
    浏览(33)
  • 应用架构演变过程、rpc及Dubbo简介

            单一应用架构 - 垂直应用架构 - 分布式服务架构 - 微服务架构。 单一应用架构         当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。         缺点:

    2024年02月02日
    浏览(52)
  • 【Dubbo3云原生微服务开发实战】「Dubbo前奏导学」 RPC服务的底层原理和实现

    Dubbo是一款高效而强大的RPC服务框架,它旨在解决微服务架构下的服务监控和通信问题。该框架提供了Java、Golang等多语言的SDK,使得使用者可以轻松构建和开发微服务。Dubbo具备远程地址发现和通信能力,可通过Dubbo独有的身临其境的服务治理特验为主导,以提高开发人员的功

    2024年02月05日
    浏览(49)
  • 【Go】四、rpc跨语言编程基础与rpc的调用基础原理

    早期 Go 语言不使用 go module 进行包管理,而是使用 go path 进行包管理,这种管理方式十分老旧,两者最显著的区别就是:Go Path 创建之后没有 go.mod 文件被创建出来,而 go module 模式会创建出一个 go.mod 文件用于管理包信息 现在就是:尽量使用 Go Modules 模式 另外,我们在引入包

    2024年02月19日
    浏览(42)
  • RPC核心原理详解

    RPC的全称是Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现,但是不是只要通过网络通信访问到另一台机器的应用程序,就可以称之为RPC调用了?显然并不够。 我理解的RPC是帮助我们屏蔽网络编程

    2024年02月11日
    浏览(36)
  • 【原理】RPC与HTTP

    RPC服务基本架构包含了四个核心的组件,分别是Client,Server,Clent Stub以及Server Stub。 RPC 让远程调用就像本地调用一样,其调用过程可拆解为以下步骤。 ① 服务调用方(client)以本地调用方式调用服务; ② client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消

    2024年04月14日
    浏览(43)
  • rpc通信原理浅析

    rpc(remote procedure call),即远程过程调用,广泛用于分布式或是异构环境下的通信,数据格式一般采取protobuf。 protobuf(protocol buffer)是google 的一种数据交换的格式,它独立于平台语言。 google 提供了protobuf多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言

    2024年02月15日
    浏览(33)
  • 【RPC】—Protobuf编码原理

    ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ Spring专栏👉https://blog.csdn.net/weixin_53580595/category_12279588.html SpringMVC专栏👉https://blog.csdn.net/weixin_53580595/category_12281721.html Mybatis专栏👉https://blog.csdn.net/weixin_53580595/catego

    2024年02月13日
    浏览(49)
  • RPC核心原理(整体架构/调用过程)

    Server: Provider ,暴露服务,服务提供方 Client: Consumer ,服务消费,调用远程服务 Registry:服务注册与发现 RPC的调用过程如下: 第一步:server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。 第二步:client通过注册中心一只关注它所需要的服务在哪里,如果此时

    2024年02月09日
    浏览(46)
  • RPC原理介绍与使用(@RpcServiceAnnotation)

    Java RPC(Remote Procedure Call,远程过程调用)是一种用于实现分布式系统中不同节点之间通信的技术。它允许在不同的计算机或进程之间调用远程方法,就像调用本地方法一样。 ** ** 定义接口:首先,需要定义一组接口,这些接口定义了远程调用的方法和参数。接口可以使用

    2024年01月16日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包