文档章节

Thrift 服务端实现类 - 概览

lostsquirrel
 lostsquirrel
发布于 2017/05/05 16:45
字数 739
阅读 91
收藏 0

继承体系

thrift_server_inheritance_hierarchy

TServer

Thrift 服务端通用接口

TSimpleServer

Thrift 服务端单线程简单实现,个般只用于测试 详见

TThreadPoolServer

Thrift 服务端 java 内置线程池实现方式

参数及默认值:

  • int minWorkerThreads = 5; 最小工作线程数
  • int maxWorkerThreads = Integer.MAX_VALUE; 最大工作线程数
  • int stopTimeoutVal = 60; 停止超时时间
  • TimeUnit stopTimeoutUnit = TimeUnit.SECONDS; 时间单位
  • int requestTimeout = 20; 请求worker超时时间
  • TimeUnit requestTimeoutUnit = TimeUnit.SECONDS;
  • int beBackoffSlotLength = 100; (Binary exponential backoff slot length<看不懂, 看源码猜测为等待时间系数>)
  • TimeUnit beBackoffSlotLengthUnit = TimeUnit.MILLISECONDS;

AbstractNonblockingServer

Thrift 服务端 非阻塞实现 的公共方法及类实现

TNonblockingServer

Thrift 服务端 非阻塞实现. 此类可以接受任意类型客户端的连接请求。此类为单线程实现, 如果需要以线程池方式,参见THsHaServer. 使用这个类时,最外层传输必须使用,TFramedTransport,否则服务将不能确定调用是否读取完。客户端也必须使用TFramedTransport。

This allows for fairness amongst all connected clients in terms of invocations. This server is inherently single-threaded. If you want a limited thread pool coupled with invocation-fairness, see THsHaServer. To use this server, you MUST use a TFramedTransport at the outermost transport, otherwise this server will be unable to determine when a whole method call has been read off the wire. Clients must also use TFramedTransport.

TThreadedSelectorServer

Thrift 服务端 半同步/半异步实现。使用一个独立的线程池处理非阻塞式IO. 由一个线程接收请求,由可配置数量的非阻塞式选择线程管理客户端的读写。由一个同步worker的线程池处理请求 A Half-Sync/Half-Async server with a separate pool of threads to handle non-blocking I/O. Accepts are handled on a single thread, and a configurable number of nonblocking selector threads manage reading and writing of client connections. A synchronous worker thread pool handles processing of requests.

在多核心环境中,如果瓶颈是单线程处理IO时CPU不足,会比TNonblockingServer/THsHaServer有更好的性能; 而且,因为实现有接受请求与处理读写,调用解耦,服务具有更好的接收新请求的能力。 Performs better than TNonblockingServer/THsHaServer in multi-core environments when the the bottleneck is CPU on the single selector thread handling I/O. In addition, because the accept handling is decoupled from reads/writes and invocation, the server has better ability to handle back- pressure from new connections (e.g. stop accepting when busy).

与 TNonblockingServer相似, 服务端和客户端都要使用 TFramedTransport.

参数及默认值:

  • int selectorThreads = 2; 选择已经接收连接的线程数量
  • int workerThreads = 5; 调用服务线程池数量,如果设置为0则由选择线程直接处理(同TNonblockingServer)
  • int stopTimeoutVal = 60; 为服务被优雅地关闭而等待的时间
  • TimeUnit stopTimeoutUnit = TimeUnit.SECONDS;
  • int acceptQueueSizePerThread = 4; 最大堆积数
  • AcceptPolicy acceptPolicy = AcceptPolicy.FAST_ACCEPT; FAIR_ACCEPT: 当worker 全部占用时不再接受请求

THsHaServer

将TNonblockingServer扩展为半同步/半异步实现. 与 TNonblockingServer相似, 服务端和客户端都要使用 TFramedTransport.

参数及默认值:

  • int minWorkerThreads = 5; 最小工作线程数
  • int maxWorkerThreads = Integer.MAX_VALUE;
  • int stopTimeoutVal = 60; 为服务被优雅地关闭而等待的时间
  • TimeUnit stopTimeoutUnit = TimeUnit.SECONDS;

© 著作权归作者所有

lostsquirrel
粉丝 1
博文 25
码字总数 14766
作品 0
成都
后端工程师
私信 提问
Thrift总结(二)创建RPC服务

  前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口。不清楚的可以看这个《Thrift总结(一)介绍》。做好之前的准备工作以后,下面就开始如何用Thrif...

章为忠
2017/07/02
0
0
[Thrift]Apache Thrift入门Java实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/52606287 1. 概述 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语...

sjf0115
2016/09/21
0
0
架构设计:系统间通信(14)——RPC实例Apache Thrift 下篇(2)

(接上篇《架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇(1)》) 3、正式开始编码 我已经在CSDN的资源区上传了这个示例工程的所有代码(http://download.csdn.net/detail/yin...

引鸩怼孑
2016/01/29
188
0
Apache Thrift - 可伸缩的跨语言服务开发框架

前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大...

张升强
2015/05/15
0
0
Apache Thrift - 可伸缩的跨语言服务开发框架

前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等。其中所用到的数据传输方式包括 XML,JSON 等,然而 XML 相对体积太大...

IBMdW
2012/01/16
4.5K
4

没有更多内容

加载失败,请刷新页面

加载更多

首次揭秘:阿里巴巴中间件在 Serverless 技术领域的探索

Serverless 话题涉及范围极广,几乎包含了代码管理、测试、发布、运维和扩容等与应用生命周期关联的所有环节。AWS Lambda 是 Serverless 领域的标志性产品,但如果将其应用于核心业务,可能会...

阿里云官方博客
23分钟前
1
0
Python免踩坑指南

最近我发现GitHub上中文项目越来越多,真实令人欣喜的事情啊。不知道小伙伴们有没有发布自己的GitHub精品项目,觉得自信的可以拿出来,推荐给其他小伙伴哦。 好了,话不多说今天的GitHub精推...

编程资源库
35分钟前
1
0
微信授权域名

https://www.jianshu.com/p/9ce837f20740

Js_Mei
36分钟前
1
0
115.两种格式磁盘扩容、调整内存和cpu、迁移虚拟机

28.12 磁盘扩容(raw) 28.13 磁盘扩容(qcow2) 28.14 调整cpu内存和网卡 28.15 迁移虚拟机 28.12 磁盘扩容(raw) 针对一块已经存在的盘进行增加容量 1.qemu-img resize /kvm_data/aminglinux02...

Axin-linux
37分钟前
1
0
好程序员java分享spring框架精讲

1、什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合、广泛的基础性支持的Java平台。Spring帮助开发者解决了开发中基础性的问题,使得开发人员...

好程序员IT
45分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部