OpenTSDB原理系列-线程模型

Posted NoSQL漫谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenTSDB原理系列-线程模型相关的知识,希望对你有一定的参考价值。



前面两篇文章介绍了 OpenTSDB的元数据模型以及数据表定义,这篇文章介绍OpenTSDB的线程模型,主要是处理HTTP请求的线程池以及负责HBase响应的线程池。


HTTP请求处理线程池


OpenTSDB启动时,会创建一个Netty服务端(默认端口为4242),以接收OpenTSDB服务端发送过来的HTTP请求。Netty的服务端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数的两倍)。

OpenTSDB原理系列-线程模型

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

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

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

  4. OpenTSDB I/O Thread通过轮询各个Socket,从Socket中取出HTTP请求的内容。说明:上述1~4步骤,都是在Netty的框架中完成。

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

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

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

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

HBase结果响应处理线程池


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

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

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

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

  说明:上述1~2步骤是在Netty的框架中完成的。

3. AsyncHBase I/O Thread 处理HBase的响应消息。而后,发送HTTP响应消息到OpenTSDB应用端。

由上面的流程可以知道,OpenTSDB的HTTP响应都是由AsyncHBase I/O Thread线程池处理的。

小结


在OpenTSDB中,对HTTP请求和HBase响应是异步处理的,这部分主要是借助了Netty的框架。异步处理使得线程资源的利用更加高效,一定程度上能够提升读写的并发度,带来吞吐量的提升。目前,HBase也已经支持了异步RPC框架。

推荐阅读:



关于"NoSQL漫谈"

NoSQL主要泛指一些分布式的非关系型数据存储技术,这其实是一个非常广泛的定义,可以说涉及到分布式系统技术的方方面面。随着人工智能、物联网、大数据、云计算以及区块链技术的不断普及,NoSQL技术将会发挥越来越大的价值。


更多NoSQL技术分享,敬请期待!

以上是关于OpenTSDB原理系列-线程模型的主要内容,如果未能解决你的问题,请参考以下文章

Netty系列二Netty原理篇

线程------JVM体系结构与内存模型概要

死磕 java线程系列之线程模型

多线程的实现原理

Netty系列之Netty线程模型

(Java多线程系列七)Java内存模型和线程的三大特性