Thrift 面试题

Thrift 面试题汇总
本文主要探讨了Thrift的相关面试题,包括Thrift的定义、使用场景、优缺点以及其在分布式系统中的作用。详细解释了Thrift的RPC机制、数据序列化过程,并对比了Thrift与其他通信框架的区别。此外,还讨论了Thrift的性能优化策略和在实际项目中的应用案例。
问题答案
socket

socket是 应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,它把复杂的TCP/IP协议族隐藏在Socket接口后面

服务端:socket() 创建socket描述符;bind()绑定实际地址;listen() 监听; accept 建立链接;

客户端:socket() 创建socket描述符;connect() 连接服务器;

介绍 thrift

参考:

https://blog.youkuaiyun.com/houjixin/article/details/42778335

Facebook于2007年开发的跨语言的rpc服框架

使用Thrift的多语言编译功能,将这个IDL文件编译成C、java、python几种语言对应的“特定语言接口文件”

IDL支持的数据类型

IDL大小写敏感,它共支持以下几种基本的数据类型:

[1]string, 字符串类型,注意是全部小写形式;例如:string aString

[2]i16, 16位整形类型,例如:i16 aI16Val;

[3]i32,32位整形类型,对应C/C++/java中的int类型;例如:      I32  aIntVal

[4]i64,64位整形,对应C/C++/java中的long类型;例如:I64 aLongVal

[5]byte,8位的字符类型,对应C/C++中的char,java中的byte类型;例如:byte aByteVal

[6]bool, 布尔类型,对应C/C++中的bool,java中的boolean类型; 例如:bool aBoolVal

[7]double,双精度浮点类型,对应C/C++/java中的double类型;例如:double aDoubleVal

[8]void,空类型,对应C/C++/java中的void类型;该类型主要用作函数的返回值,例如:void testVoid(),

除上述基本类型外,ID还支持以下类型:

[1]map,map类型,例如,定义一个map对象:map<i32, i32> newmap;

[2]set,集合类型,例如,定义set<i32>对象:set<i32> aSet;

[3]list,链表类型,例如,定义一个list<i32>对象:list<i32> aList;

 

enum, 枚举类型

struct,自定义结构体类型 ( java中的class)

thrift service端工作模式

参考:

https://blog.youkuaiyun.com/sunmenggmail/article/details/46818147

TSimpleServer:采用最简单的阻塞IO,只有一个工作线程,循环监听新请求的到来并完成对请求的处理,一次只能接收和处理一个socket连接

 

TNonblockingServer单线程工作,采用NIO的方式,所有的socket都被注册到selector中,在一个线程中通过seletor循环监控所有的socket。 优点:IO多路复用,非阻塞IO 缺点:单线程,请求任务一个一个执行

 

THsHaServer(半同步半异步):TNonblockingServer类的子类,NIO方式, 主线程负责监听,线程池负责处理任务 缺点:新连接请求不能被及时接受

 

TThreadPoolServer阻塞socket方式工作,主线程负责阻塞式监听,业务处理交由一个线程池来处理

缺点: 受限于线程池中线程数量大小

 

TThreadedSelectorServer:目前Thrift提供的最高级的模式,专门的线程AcceptThread用于处理新连接请求,及时响应大量并发连接请求,负载均衡器分散到多个SelectorThread线程中来完成

Thrift支持哪些通信协议格式

传输协议上总体上划分为文本(text)和二进制(binary)传输协议

    1、TBinaryProtocol – 二进制编码格式进行数据传输。

    2、TCompactProtocol – 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。高效和压缩的二进制格式

    3、TJSONProtocol – 使用JSON的数据编码协议进行数据传输。

    4、TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于通过脚本语言解析

    5、TDebugProtocol – 在开发的过程中帮助开发人员调试用的,以文本的形式展现方便阅读。

支持的 通信(传输)方式 transport

1、TSocket- 使用堵塞式I/O进行传输,也是最常见的模式。

    2、TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,类似于Java中的NIO。

    3、TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。

    4、TMemoryTransport- 使用内存I/O,就好比Java中的ByteArrayOutputStream实现。

    5、TZlibTransport- 使用执行zlib压缩,不提供Java的实现。

Thrift的工作原理

参考:

https://blog.youkuaiyun.com/houjixin/article/details/42779835

RPC的调用方和被调用方不在同一个进程内,甚至都不在同一台机子上,涉及网络传输

涉及到的三个类 协议类(TProtocol) 传输层(TTransport) 处理类(Processor)

RPC框架

参考:

https://mp.weixin.qq.com/s/CepNdL2A_QMcESgQVZBn2g

RPC框架的职责是,中间大蓝框的部分:

  • client端:序列化、反序列化、连接池管理、负载均衡、故障转移、队列管理,超时管理、异步管理等等

  • server端:服务端组件、服务端收发包队列、io线程、工作线程、序列化反序列化等

  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值