首页 > 编程语言 >flink源码分析--RPC通信过程分析

flink源码分析--RPC通信过程分析

时间:2023-06-06 16:35:30浏览次数:53  
标签:调用 -- RpcServer flink Server 源码 RpcService 方法 Gateway

flink的通信框架基于akka,但是不懂akka也关系不大。
首先介绍几个概念,大家记住名字和对应的作用:

xxxGateway:在flink中就是一个用来告诉调用者,xxx具有哪些方法可以调用的一个接口类。比如JobMasterGateway就是用来告诉所有需要调用JobMaster的用户,我JobMaster类只有比如10个方法,假设是start(),pause(),stop().........等十个方法,别的方法你就别调用了,调了也不通。我只有xxxGateway中定义过的方法。有点像thrift定义一些方法的过程吧。

xxxEntrypoint: 就是一个终端的意思。类比一个手机。JobMaster、ResourceManager这些都被抽象成一个终端了。

RpcService: 就是一个后台服务。类似手机里的后台一直在运行的程序,不是明面上的程序。类似我们微信的后台监听新消息服务,一直运行在后台,当有人发消息给你的时候,这个后台服务就可以拉起前台的程序。RpcService没啥作用,就是内部包装了一些对象,比如Server对象,启动的时候一起把这些对象都一并启动了。

RpcServer:这个和上面的Service有点像,别搞混淆。这个Server是更小的一个被Service包含的小程序。Service对象内含有一个server对象。当启动Service时候,会顺便启动Server。Server的职责是处理远程调用和本地调用。RpcServer是干实事的哈。RpcServer中还包含了很重要的AkkaRpcActor类,这个类是具体来传递消息的类。就是包装了一下akka的原生actor。

第一步:
调用RpcService的start方法,启动RpcService。
启动RpcService的过程中,会启动RpcServer。
启动了RpcServer后,整个Entrypoint对外就开放了一些gateway中定义好的端口了。(虽然暴露的端口代码在Server,但是对外来说,Server是包含在Entrypoint里的,就好像虽然提供服务的是你的手机的小程序,但是对外界看来,是你的手机向外暴露了一些端口。这里小程序就是Server,Entrypoint就是手机终端)
紧接着,调用发起者就可以通过自己的RpcService的connect方法来向别的已经启动好的终端发起服务调用了,其实是去调用对方的Entrypoint内部的Server类。然后对方的server类表示我的类不是随便调用的,会返回一个Gateway对象给调用方,调用方后续要调用就调用这个Gateway中声明好的方法。
这时候,调用方已经通过connect方法拿到了要调用的终端的Gateway。这样就可以通过调用Gateway的方法间接调用对方终端的Server方法了。(其实实际返回的是名为AkkaInvocationHandler的类,这个类也是RpcGateway的一个实现类。)
当调用发起方通过Gateway调用对方的方法时,实际调用的是对方的AkkaInvocationHandler的invoke方法,invoke()方法内部会根据请求的来源来决定是走invoke()还是invokeRPC()方法。如果是远程的调用,就走RemoteRpcInvocation()方法,如果是本地调用的,就走LocalRpcInvocation()方法。然后还根据是否需要返回值,决定是调用底层akka的tell()方法还是ask()方法。如果需要返回值就ask,如果不需要就tell。
然后如果对方要的返回值是CompetableFutere对象,就直接返回Future对象,不需要阻塞。否则就需要阻塞等待调用结果,然后把调用结果返回给调用方。
image

标签:调用,--,RpcServer,flink,Server,源码,RpcService,方法,Gateway
From: https://www.cnblogs.com/lukairui/p/17460897.html

相关文章

  • 一朝学信奥,十年也难跑
     《鸡腿咦》退役决定难,过程十分慢。心决已难挽,耳宫①脸难看。邢台言我懒,假期劝我烦。电脑不难搬,高枝不好攀。功利谁不贪?风险需勇敢。人生路漫漫,人品夕夕攒。筵席无不散,风景面前看。你把诗看完,还不点个赞?  ---------------------------------------------------......
  • API全场景零码测试机器人,华为云发布ATGen in CodeArts TestPlan
    摘要:华为云ATGen现开放对外邀测,欢迎预约。本文分享自华为云社区《API全场景零码测试机器人,华为云发布ATGeninCodeArtsTestPlan》,作者:华为云头条。众所周知,软件服务及组件之间的交互主要依赖大量的API接口。以华为云300多个商用云服务为例,平均每个服务含500+接口,接口总数高......
  • 基于Raspberry 的 libcamera 使用
    1.libcameraandlibcamera-apps工具简介I.libcamera是一款用来支持用户基于Linux操作系统控制复杂相机的应用程序,用户可以通过libcamera直接操作树莓派芯片集成的GPU模块。II.libcamera开放了基于C++语言的应用程序接口用于配置相机并从相机获取图像的功能API,同时libcam......
  • DW1000芯片的RF测试与校准:发射功率校准
    说明在前面的博客中,已经介绍过发射功率的测量和设置了,其实发射功率的校准基本上也没什么可说了。基本就是和晶振校准流程类似,通过设置芯片寄存,调整测出一个合适的功率值,能保证发射机发射功率不超过标准要求的41.3dBm/Mhz。校准基本流程和晶振校准类似,发射功率校准流程如下,:由......
  • 导航帖
    前言​ 为了能够在学校OJ服务器关闭后依旧能够刷题,我会把自己做过的OJ练习打包成合集放在这里,里面的内容全部由我自己重新排版(学校的OJ页面实在是不忍直视),希望可以帮到和我一样正在被数据结构暴捶的同学(bushi)。​ 以后这篇帖子就作为我的导航帖了,只不过目前还只有OJ链接。。......
  • Cron
    cron 命令行实用程序是类Unix 操作系统上的作业调度程序。设置和维护软件环境的用户使用cron来调度作业[1](命令或 shell脚本),也称为 cron作业,[2][3] 以固定的时间、日期或间隔定期运行。[4] 它通常自动化系统维护或管理——尽管它的通用性质使其可用于从 Internet 下......
  • 实验六
    task1_1fromturtleimport*defmove(x,y):penup()goto(x,y)pendown()defdraw(n,size=100):foriinrange(n):fd(size)left(360/n)defmain():pensize(2)pencolor('red')move(-200,0)draw(3)......
  • 数据库_DuckDB_概念梳理和发展趋势
    数据库大致类型C/S关系型数据库引擎高并发数据量超大网络与应用程序分离 MariaDBMySQL,Oracle,PostgreSQL,或者SQLServer mysql:多线程SQL服务器组成的服务器/客户端体系结构-可伸缩性,安全性 PostgreSQL使用称为多版本并发控制或MVCC的技术来维护数据......
  • render函数使用示例
    import{mapState}from'vuex'importmenuMixinfrom'../mixin/menu'import{elMenuItem,elSubmenu}from'../libs/util.menu'importBScrollfrom'better-scroll'exportdefault{name:'d2-layout-header-as......
  • 苹果宣布最新操作系统:visionOS
    今天凌晨,WWDC23全球开发者大会正式开幕。大会上,苹果展示了包括iOS17、iPadOS17、watchOS10和macOSSonoma在内的新系统。硬件方面,苹果发布了15英寸的MacBookAir、搭载M2Ultra的MacStudio以及MacPro。此外,苹果还发布了其第一款空间计算设备AppleVisionP......