入口: net.opentsdb.tools.TSDMain
Startup Plugin
代码文件 net.opentsdb.tools StartupPlugin.java
用途:
The StartupPlugin allows users to interact with the OpenTSDB configuration as soon as it is completely parsed, just before OpenTSDB begins to use it.
服务初始化时,准备提供服务时,退出时,会调用plugin接口。代码中没有提供已实现的Startup Plugin。
配置项:1
2
3tsd.startup.enable
tsd.core.plugin_path
tsd.startup.plugin
Reference:
- Plugins, Startup and Service Discovery
文档提到的两个plugin demo链接已经失效,可用链接如下,但是demo几乎没什么用。
Server Framework
服务使用Netty实现,其Channel Pipeline的框架实现在net.opentsdb.tsd PipelineFactory.java
。
根据文档,服务支持两类接口HTTP & RPC,二者使用同一端口,区分方式是根据请求数据的第一个字节,如果第一个字节是['A', 'Z']之间的字符,则认为是一个HTTP方式的请求,否则是RPC请求。参考代码:
1 | // File: PipelineFactory.java |
根据上述代码,我们可以总结两种接口类型的处理Pipeline如下:
- HTTP Protocol
- connmgr
- detect
- decoder
- aggregator(optional)
- inflater
- encoder
- deflater
- timeout
- handler
- RPC Protocol
- connmgr
- detect
- framer
- encoder
- decoder
- timeout
- handler
Handler Task
HTTP Protocol
connmgr
Class: net.opentsdb.tsd.ConnectionManager
Keeps track of all existing connections.
Limits the max connections established.
detect
File: PipelineFactory.java class DetectHttpOrRpc
根据请求数据判断协议类型,并添加后续的pipeline handler。
decoder
Class: org.jboss.netty.handler.codec.http.HttpRequestDecoder
官方的请求解析类。
aggregator
Class: org.jboss.netty.handler.codec.http.HttpChunkAggregator
inflater
Class: org.jboss.netty.handler.codec.http.HttpContentDecompressor
encoder
Class: org.jboss.netty.handler.codec.http.HttpResponseEncoder
deflater
Class: org.jboss.netty.handler.codec.http.HttpContentCompressor
timeout
Class: org.jboss.netty.handler.timeout.IdleStateHandler
handler
Class: net.opentsdb.tsd.RpcHandler
因为 HTTP/RPC handler 不同,解析出来的message类型也不同,该类根据消息类型在net.opentsdb.tsd.RpcManager
中查询对应的 RPC(Telnet)/HTTP 指令执行函数并执行。
RpcManager中对HTTP官方指令和插件指令各单独维护了一个Map
,二者请求的区别在于uri前缀,如果uri前缀为plugin
,则认为是请求插件中提供的功能。然后在对应的Map中查询然后执行。每个Plugin对应一个uri(route)。1
2
3
4
5# 请求官方指令
/api/put
# 请求插件指令
/plugin/plugin-path
OpenTSDB还支持RPC Plugin,该插件的实现逻辑与HTTP Protocol不同,Plugin实现自己独立的服务框架,与主框架间仅仅是共享一个net.opentsdb.core.TSDB
对象。参考RpcPlugin抽象基类定义:RpcPlugin.java。
RPC Protocol
与HTTP Protocol相同的handler此处就不再列出。
framer
Class: net.opentsdb.tsd.LineBasedFrameDecoder
Decodes telnet-style frames delimited by new-lines.
encoder
Class: org.jboss.netty.handler.codec.string.StringEncoder
decoder
Class: net.opentsdb.tsd.WordSplitter
Splits a ChannelBuffer in multiple space separated words.
References: