OpenTSDB线程模型

举报
RamboZhong 发表于 2018/02/07 14:22:36 2018/02/07
【摘要】 OpenTSDB的业务线程模型比较简单,主要分为Http请求处理线程池和HBase响应请求处理线程池两部分。Http请求处理线程池OpenTSDB启动时,会创建一个Netty服务端(默认端口为4242),以接受OpenTSDB服务端发送过来的HTTP请求。Netty的服务端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数*2)。 流程说明:1.

                                                      

nosqlnotes.jpg


         OpenTSDB的业务线程模型比较简单,主要分为Http请求处理线程池和HBase响应请求处理线程池两部分。

Http请求处理线程池

OpenTSDB启动时,会创建一个Netty服务端(默认端口为4242),以接受OpenTSDB应用端发送过来的HTTP请求。

Netty的服务端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数*2)。


 HTTP请求线程池.png

流程说明:

1.         OpenTSDB应用通过Socket连接到OpenTSDB的服务端,OpenTSDBBoss线程会处理这个连接请求;

2.         OpenTSDB Boss Thread通过监听端口,接受该连接请求,并生成一个新的socket连接。

3.         OpenTSDB Boss Thread把新的socket注册到业务处理线程池中。每个socket绑定I/O线程池中的某个线程。

4.         OpenTSDB I/O Thread通过轮询各个Socket,从Socket中取出HTTP请求的内容。

说明:上述1-4步骤,都是由Netty的框架完成的,不需要OpenTSDB的代码进行处理。

5.         OpenTSDB I/O Thread处理HTTP请求数据(不同的请求有不同的处理流程,另文进行说明)。

6.         如果OpenTSDBHBase之间的连接不存在,就创建一个新连接。

7.         OpenTSDB I/O Thread处理HTTP请求数据后,发送HBase请求到HBase服务。

由上面的流程可以知道,OpenTSDB的请求都是由OpenTSDB I/O Thread线程池进行处理的。

HBase响应处理线程池

         OpenTSDB发送请求到HBase后,需要处理HBase返回的响应消息,这是通过OpenTSDB中的一个Netty客户端实现的。

         Netty的客户端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数*2)。

HBase响应线程池.png

 

流程说明:

1、  每个HBaseOpenTSDB之间的Socket连接,在OpenTSDBHBase发起请求的时候就已经建立了。也会把该Socket绑定到AsyncHBase I/O Threads线程池的一个线程中。

2、  AsyncHBase I/O Thread读取Socket中的HBase响应消息。

说明:上述1-2步骤,都是由Netty的框架完成的,不需要OpenTSDB的代码进行处理。

3、  AsyncHBase I/O Thread 处理HBase的响应消息。

4、  AsyncHBase I/O Thread 处理完HBase的响应消息后,发送HTTP响应消息到OpenTSDB应用端。

由上面的流程可以知道,OpenTSDBHTTP响应都是由AsyncHBase I/O Thread线程池进行发送的。

总结:

OpenTSDB中,对HTTP请求和HBase响应是异步处理的,在OpenTSDB的线程中没有过多的I/O等待操作。因此,OpenTSDB的线程可以高效的运转,达到较好的性能。

 

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。