本文共 1218 字,大约阅读时间需要 4 分钟。
前面两篇文章介绍了 OpenTSDB的元数据模型以及数据表定义,这篇文章介绍OpenTSDB的线程模型,主要是处理HTTP请求的线程池以及负责HBase响应的线程池。
OpenTSDB启动时,会创建一个Netty服务端(默认端口为4242),以接收OpenTSDB服务端发送过来的HTTP请求。Netty的服务端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数的两倍)。
由上面的流程可以知道,OpenTSDB的请求都是由OpenTSDB I/O Thread线程池进行处理的。
OpenTSDB发送请求到HBase后,需要处理HBase返回的相应消息,这是通过OpenTSDB中的一个Netty客户端实现的。
Netty的客户端实现包括了一个Boss线程和多个业务处理线程(默认线程数为CPU核数*2)。
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框架。
转载地址:http://avvmi.baihongyu.com/