Thrift java server 模式分析

《SparkSQL内核剖析》【Thrift Server篇】 前两天,我司开发环境Zeppelin在跑一个统计任务时,挂了,报错信息如下: TODO: 此处应有截图 我推测是Thrift Server内存不足,导致通信失败了,具体原因没有深究。然而,Thrift这个看似熟悉却又陌生的词汇吸引了我的注意力。碰巧今天在学习《Spark内核剖析》第10章,Spark SQL连接Hive时,又一次提到了Thrift,于是便有了此文。 什么是Thrift Thrift... 阅读详情

http://houjixin.blog.163.com/blog/static/35628410201501655134919/


五、  Thrift服务器端几种工作模式分析与总结

Thrift为服务器端提供了多种工作模式,本文中将涉及以下5中工作模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadedSelectorServer,这5中工作模式的详细工作原理如下:

1.      TSimpleServer模式

TSimpleServer的工作模式只有一个工作线程,循环监听新请求的到来并完成对请求的处理,它只是在简单的演示时候使用,它的工作方式如图5.1所示:

[原]由浅入深了解Thrift(三) - 逍遥子 - 逍遥子 曰:

 

图5.1 TSimpleServer的工作模式

TSimpleServer的工作模式采用最简单的阻塞IO,实现方法简洁明了,便于理解,但是一次只能接收和处理一个socket连接,效率比较低,主要用于演示Thrift的工作过程,在实际开发过程中很少用到它。

2.      TNonblockingServer模式

TNonblockingServer工作模式,该模式也是单线程工作,但是该模式采用NIO的方式,所有的socket都被注册到selector中,在一个线程中通过seletor循环监控所有的socket,每次selector结束时,处理所有的处于就绪状态的socket,对于有数据到来的socket进行数据读取操作,对于有数据发送的socket则进行数据发送,对于监听socket则产生一个新业务socket并将其注册到selector中,如下图5.2所示:

[原]由浅入深了解Thrift(三) - 逍遥子 - 逍遥子 曰:

 

图5.2、TNonblockingServer工作模式

上图5.2中读取数据之后的业务处理就是根据读取到的调用请求,调用具体函数完成处理,只有完成函数处理才能进行后续的操作;

TNonblockingServer模式优点:

相比于TSimpleServer效率提升主要体现在IO多路复用上,TNonblockingServer采用非阻塞IO,同时监控多个socket的状态变化;

TNonblockingServer模式缺点:

TNonblockingServer模式在业务处理上还是采用单线程顺序来完成,在业务处理比较复杂、耗时的时候,例如某些接口函数需要读取数据库执行时间较长,此时该模式效率也不高,因为多个调用请求任务依然是顺序一个接一个执行。

3.      THsHaServer模式(半同步半异步)

THsHaServer类是TNonblockingServer类的子类,在5.2节中的TNonblockingServer模式中,采用一个线程来完成对所有socket的监听和业务处理,造成了效率的低下,THsHaServer模式的引入则是部分解决了这些问题。THsHaServer模式中,引入一个线程池来专门进行业务处理,如下图5.3所示;

[原]由浅入深了解Thrift(三) - 逍遥子 - 逍遥子 曰:

 

图5.3 THsHaServer模式

THsHaServer的优点:

与TNonblockingServer模式相比,THsHaServer在完成数据读取之后,将业务处理过程交由一个线程池来完成,主线程直接返回进行下一次循环操作,效率大大提升;

THsHaServer的缺点:

由图5.3可以看出,主线程需要完成对所有socket的监听以及数据读写的工作,当并发请求数较大时,且发送数据量较多时,监听socket上新连接请求不能被及时接受。

4.      TThreadPoolServer模式

TThreadPoolServer模式采用阻塞socket方式工作,,主线程负责阻塞式监听“监听socket”中是否有新socket到来,业务处理交由一个线程池来处理,如下图5.4所示:

[原]由浅入深了解Thrift(三) - 逍遥子 - 逍遥子 曰:

 

图5.4 线程池模式工作过程

TThreadPoolServer模式优点:

线程池模式中,数据读取和业务处理都交由线程池完成,主线程只负责监听新连接,因此在并发量较大时新连接也能够被及时接受。线程池模式比较适合服务器端能预知最多有多少个客户端并发的情况,这时每个请求都能被业务线程池及时处理,性能也非常高。

TThreadPoolServer模式缺点:

线程池模式的处理能力受限于线程池的工作能力,当并发请求数大于线程池中的线程数时,新请求也只能排队等待。

5.      TThreadedSelectorServer

TThreadedSelectorServer模式是目前Thrift提供的最高级的模式,它内部有如果几个部分构成:

(1)  一个AcceptThread线程对象,专门用于处理监听socket上的新连接;

(2)  若干个SelectorThread对象专门用于处理业务socket的网络I/O操作,所有网络数据的读写均是有这些线程来完成;

(3)  一个负载均衡器SelectorThreadLoadBalancer对象,主要用于AcceptThread线程接收到一个新socket连接请求时,决定将这个新连接请求分配给哪个SelectorThread线程。

(4)  一个ExecutorService类型的工作线程池,在SelectorThread线程中,监听到有业务socket中有调用请求过来,则将请求读取之后,交个ExecutorService线程池中的线程完成此次调用的具体执行;

[原]由浅入深了解Thrift(三) - 逍遥子 - 逍遥子 曰:

 

图5.5 TThreadedSelectorServer模式的工作过程

如上图5.5所示,TThreadedSelectorServer模式中有一个专门的线程AcceptThread用于处理新连接请求,因此能够及时响应大量并发连接请求;另外它将网络I/O操作分散到多个SelectorThread线程中来完成,因此能够快速对网络I/O进行读写操作,能够很好地应对网络I/O较多的情况;TThreadedSelectorServer对于大部分应用场景性能都不会差,因此,如果实在不知道选择哪种工作模式,使用TThreadedSelectorServer就可以。

Spark Thrift Server 部署与应用 前言 在介绍spark thrift server 需要先介绍一下其与hiverserver2及spark-sql的关系与区别 HiveServer2 Hive提供了一个命令行终端,在安装了Hive的机器上,配置好了元数据信息数据库和指定了Hadoop的配置文件之后输入hive命令,就可以进入到hive的交互式终端,接下来只要编写SQL语句即可,这跟传统RDB数据库提供的终端是类似的。 启动hiveserver2服务后,Hive除了可以通过hive提供的beeline以cli的方式操作hive,还提供了j 阅读详情

相关推荐

Thrift采坑记录——Client多线程

一、Thrift 采坑 Thrift 的Server/Client有个较为严重的bug(https://issues.apache.org/jira/browse/THRIFT-601 ),随机向thrift sever的监听端口发些数据,可能会导致Server OutOfMemory,细细看看代码,这个bug有点土。 Thrift Client线程不安全,多线程下使用可能导致Serve...

JustKian的博客 3097

由浅入深了解Thrift(三)——Thrift server端的几种工作模式分析

一、  Thrift服务器端几种工作模式分析与总结 Thrift为服务器端提供了多种工作模式,本文中将涉及以下5中工作模式:TSimpleServer、TNonblockingServer、THsHaServer、TThreadPoolServer、TThreadedSelectorServer,这5中工作模式的详细工作原理如下: 1.      TSimpleServer模式 TSimpl

逍遥子曰: 1万+

Thrift交流(二)thrift服务端和客户端实现 Nifty

Nifty是facebook公司开源的,基于netty的thrift服务端和客户端实现。然后使用此包就可以快速发布出基于netty的高效的服务端和客户端代码。 https://github.com/facebook/nifty Nifty简单例子 1)环境搭建 pom文件 Thrift文件 namespace java example // de

arjick的专栏 1万+

【大数据学习】之 ThriftServer

ThriftServer 1、启动,[hadoop@hadoop001 sbin]$ ./start-thriftserver.sh 查看是否启动成功jps-m 查看UI界面 2、通过客户端beeline来连接 a、进入 /home/hadoop/app/spark-2.3.1-bin-2.6.0-cdh5.12.0/bin b、[hadoop@hadoop001 b...

奔走觅衣粮de博客 2999

如何解决 Spark ThriftServer 的痛点, Spark Kyuubi 给出了完美答案

文章介绍了 Spark ThriftServer 的架构及其不足,如难以满足生产环境下的多租户与资源隔离需求,存在单点故障问题等。同时阐述了网易开源的 Spark Kyuubi 如何解决这些问题,其总体架构图也得到了展示。

数据与算法架构提升之路专栏 734

Java 连接 Spark Thrift Server/Hive Server总结

我的原创地址:https://dongkelun.com/2021/02/19/javaSparkThriftServer/ 前言 总结Spark Thrift Server、Hive Server以及如何用Java连接 启动 hive server hiveserver2 或 hive --service hiveserver2 默认端口是1000 spark thrift server 修改hive.server2.transport.mode为http(默认值为binary(TCP),可选值HTTP

主要分享大数据相关的知识,如Spark、Hudi 3047

Hbase thrift-server

Thrift 简介 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。Thrift是由Facebook开发的,并在2008年捐给了Apache基金会,成为了一个孵化器项目。 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎 Thrift是一个驱动层接口,它提供了用于客户端使用多种语...

tianyeshiye 4871

Java 连接 Kerberos认证下的Spark Thrift Server/Hive Server总结

我的原创地址:https://dongkelun.com/2021/05/10/javaSparkThriftServerWithKerberos/ 前言 总结Java如何连接Kereros认证下的Spark Thrift Server/Hive Server总结 启动 关于如何启动 Spark Thrift Server和 Hive Server 请参考https://dongkelun.com/2021/02/19/javaSparkThriftServer/ Java 代码 pom 依赖 &l

主要分享大数据相关的知识,如Spark、Hudi 2406

Thrift c++ server / java client配置

在安装thrift前需要安装libevent,用于生成对应的lib链接。 server端 Linux配置 1.下载 从官网http://thrift.apache.org/上下载thrift-0.8.0版本,之前使用的是0.9.3版本,编译时会报错,因而改成了0.8.0版本。 2.解压thrift压缩文件 tar zxvf thrift-0.8.0.tar.gz 3.

盛夏温暖流年 2364

thrift介绍、各种server的比较、多接口服务实现

thrift特性、不支持的特性、对各个语言的支持情况、语法参考、Thrift 架构、协议、传输层、服务端类型、各种thriftServer实现的比较、Thrift对多接口服务的支持

LabVIEW Modbus通讯实战:从安装库到读写寄存器的完整避坑指南

本文详细介绍了LabVIEW与Modbus通讯的完整实战指南,从安装库文件到读写寄存器的全流程操作,帮助开发者避开常见问题。通过虚拟串口配置、主机配置实战和高级调试技巧,提升工业自动化领域的通讯效率与可靠性。

milk8的博客 740

server如何调用 thrift_Thrift入门很简单

Thrift是什么?是Facebook开源的跨语言RPC框架。实战这里实现一个简单的服务CalculatorService。引入maven依赖org.apache.thriftlibthrift0.9.2编写Thrift接口定义文件Thrift接口定义(IDL)文件采用抽象注解的方式说明类型信息,用于告知thrift代码生成器如何生成相应语言的接口或者方法声明。namespace java com...

weixin_39530557的博客 149

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python >= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

thrift初探(java)(—)

1 介绍 thrift一个RPC框架,可以用来远程通信 2 生成接口代码 1.下载thrift,thrift-0.10.0.exe 2.将编写的hello.thrift文件,放置在和下载好的thrift-0.10.0.exe同一个目录之下, 然后执行如下操作即可产生相关代码~ thrift文件的相关规范见 https://blog.youkuaiyun.com/finallygo/article/detai...

ccoran的博客 317

C#与AutoCAD插件开发实战:从零构建你的第一个自定义命令

本文为AutoCAD插件开发新手提供了一份完整的C#实战指南。从搭建Visual Studio开发环境、添加AutoCAD .NET API引用,到编写并注册第一个“Hello AutoCAD”自定义命令,再到实现一个交互式绘制十字线的实用命令,详细讲解了核心代码结构与调试技巧。文章旨在帮助工程师和设计师利用C#自动化重复绘图任务,显著提升工作效率。

weixin_29294597的博客 434

数字IC后端实战:如何用ICC搞定复杂模块的floorplan与powerplan(附避坑指南)

本文深入解析数字IC后端设计中复杂模块的floorplan与powerplan实战技巧,重点介绍多边形模块边界处理、MTCMOS电源网络优化及存储器摆放陷阱规避。通过Synopsys ICC工具的具体操作示例和项目实战经验,帮助工程师高效解决设计难题,提升芯片性能与可靠性。

weixin_29213525的博客 351

Thrift Server 介绍

Apache Thrift 是一种高效的远程服务调用框架,支持多种编程语言(如 Java、C++、Python 等),通过 IDL(接口定义语言)定义服务接口,自动生成客户端和服务端代码。:采用二进制协议(如 TBinaryProtocol)和高效的传输层(如 TSocket),适合高并发场景。:通过自定义协议(Protocol)和传输层(Transport),可适配不同网络环境或加密需求。基于线程池的阻塞式服务模型,每个连接分配一个线程,适合并发量适中、请求处理时间较长的场景。

王九思的博客 368

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1677

thrift初体验

<br />使用thrift实现java调用c++实现的简单webservice<br /> <br />首先是安装thrift,这花费了不少时间。<br />关于安装步骤,apache的官方说明已经比较详细了:<br /> <br />http://wiki.apache.org/thrift/ThriftRequirements<br />http://wiki.apache.org/thrift/ThriftInstallation<br /> <br />看起来依赖的库很多,但其实关键的也就是<br

SG的专栏 4124

YOLOv11 改进 - C2PSA | C2PSA融合TSSA(Token Statistics Self-Attention)令牌统计自注意力,优化遮挡目标感知

本文介绍了Token Statistics Self-Attention(TSSA)机制,并将其集成到YOLOv11中。传统自注意力计算复杂度高,TSSA进行了范式转变,基于token统计特征实现高效注意力交互。它通过“算法展开”推导得出,以“最大编码率降低”为目标,实现特征学习。TSSA包含动态分组和低秩投影优化两步创新,具备线性复杂度。我们将TSSA代码集成到YOLOv11的C2PSA模块中。实验表明,改进后的YOLOv11在目标检测任务中表现良好,验证了TSSA机制的有效性。

魔改工程师的博客 669

杰理接入第三方升级协议OTA教程

本教程介绍了使用dual_bank_updata_api.h接口接入第三方协议进行固件升级的方法。主要内容包括:INI配置要求(需启用双备份并强制4K对齐)、7个核心API接口功能说明及参数详解(初始化、空间检查、数据写入、校验等)、标准升级流程步骤(初始化→检查→写入→校验→引导→清理)。特别强调了4K对齐配置的重要性以避免数据丢失,并提供了被动升级流程图。该方案支持用户自定义协议接入,需严格按照流程调用接口完成升级。

qq_42014563的博客 1430

java thrift spring_[转载] Thrift-server与spring集成

转载自http://shift-alt-ctrl.iteye.com/blog/1990026Thrift服务server端,其实就是一个ServerSocket线程 + 处理器,当Thrift-client端建立链接之后,处理器负责解析socket流信息,并根据其指定的"方法名"+参数列表,来调用"服务实现类"的方法,并将执行结果(或者异常)写入到socket中.一个server,就需要创建一个...

weixin_42117622的博客 177

华为OD机考双机位C卷 - 文件存储系统的排序(Java & Python & JS & GO & C++ & C)

华为OD机考双机位C卷 - 文件存储系统的排序, 提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。

算法大师! 780

java thrift client_使用thrift的java client调用python server

上面这篇文章的例子是使用java client调用python server中的helloString方法来打印client传输过去的字符串thrift文件,hello.thriftservice Hello {string helloString(1:string word)}Server端生成Python server端代码thrift --gen py hello.thriftpython ...

weixin_39820437的博客 305

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

server如何调用 thrift_Thrift项目Server端开发流程

Thrift项目Server端开发流程首先,先了解工程中所有包的功能(见下图)该图为用户中心项目的目录结构,以下依次介绍。1.src/main/javacom.framework:该目录存放着所有系统所需要的共同的一些类。com.user:这个包下面放着本小组的功能代码。dao:该层主要存放着调用数据库层的方法entity:业务实体beanmapper:业务sqlservice:thrift接口的...

weixin_39588445的博客 150

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java Thrift Server Sample

Thrift 是facebook的核心技术之一,使用不同开发语言开发的系统可以通过该框架实现彼此间的通讯,开发者只需编辑一份thrift脚本,即可自动获得其它开发语言的代码(比如 c++ java python ruby c# haskell ocmal erlang cocoa php squeak).同时提供了完整的rpc service framework,可以很方便的直接构建服务。

justhacker的专栏 1036

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: 无锁队列的实现《转载》
下一篇: svd简介
liuhex
博客等级 码龄18年 28粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值