InfluxDB源码阅读之httpd服务
操作系统 : CentOS7.3.1611_x64
go语言版本:1.8.3 linux/amd64
InfluxDB版本:1.1.0
服务模块介绍
源码路径: github.com/influxdata/influxdb/services/httpd
config.go : httpd服务配置相关内容
config_test.go : 配置测试
service.go :httpd服务主程序
listen.go :对监听器进行包装,限制活动连接的数量
listen_test.go :对监听器包装的测试
handler.go : 客户端请求转发及具体的处理逻辑相关代码
handler_test.go : 处理逻辑测试代码
response_writer.go : http响应内容(支持csv、json格式)
response_logger.go :日志相关内容
该模块提供https服务、http服务、unixSocket服务
服务主要提供如下功能:
- 查询服务器的状态
- 统计服务器监控信息
- 提供数据查询功能
- 提供数据写入功能
- 用户认证
Service结构
该结构所在文件 : service.go
主服务结构如下:
type Service struct {
ln net.Listener
addr string
https bool
cert string
key string
limit int
err chan error
unixSocket bool
bindSocket string
unixSocketListener net.Listener
Handler *Handler
Logger *log.Logger
}
解释如下:
- ln
tcp连接,用于提供http服务或https服务。
- addr
tcp服务器绑定的服务地址及端口信息。 对应配置文件中的 bind-address 选项。
- https
是否提供https服务,如果该标识为false,则提供http服务。 对应配置文件中的 https-enabled 选项。
- cert
https证书路径,使用https时有效。 对应配置文件中的 https-certificate 选项。
- key
https私钥,使用https时有效。 对应配置文件中的 https-private-key 选项。
- limit
用于限制服务器最大连接数,该值为0时不限制。 对应配置文件中的 max-connection-limit 选项。
- err
error通道,暂时不知道怎么用。
- unixSocket
是否使用unix-socket,如果该标识为false,则不提供unix-socket服务(windows环境不适用)。 对应配置文件中的 unix-socket-enabled 选项。
- bindSocket
unix-socket文件路径,unix-socket开启时适用。 对应配置文件中的 bind-socket 选项。
- unixSocketListener
unix_socket连接,用于提供unix_socket服务。
- Handler
httpd->Handler 对象
Handler结构
该结构所在文件 : handler.go
snapshotter客户端请求的数据结构如下:
// Handler represents an HTTP handler for the InfluxDB server.
type Handler struct {
mux *pat.PatternServeMux
Version string MetaClient interface {
Database(name string) *meta.DatabaseInfo
Authenticate(username, password string) (ui *meta.UserInfo, err error)
Users() []meta.UserInfo
User(username string) (*meta.UserInfo, error)
} QueryAuthorizer interface {
AuthorizeQuery(u *meta.UserInfo, query *influxql.Query, database string) error
} WriteAuthorizer interface {
AuthorizeWrite(username, database string) error
} QueryExecutor *influxql.QueryExecutor Monitor interface {
Statistics(tags map[string]string) ([]*monitor.Statistic, error)
}
PointsWriter interface {
WritePoints(database, retentionPolicy string, consistencyLevel models.ConsistencyLevel, points []models.Point) error
} Config *Config
Logger *log.Logger
CLFLogger *log.Logger
stats *Statistics
}
解释如下:
- mux
go语言的 net/http 库的模式复用器。
- Version
InfluxDB版本信息。
- MetaClient
meta服务客户端接口,指向 meta.Client 结构(源码路径: influxdb/services/meta/client.go), 用于操作meta数据。
Database 函数 : 通过名字查找数据库,可用于判断数据库是否存在。
Authenticate 函数 : 认证用户信息。
Users 函数 :获取系统中所有用户的信息。
User 函数 : 获取系统中单个用户的信息。
- QueryAuthorizer
数据查询认证接口,指向 meta.QueryAuthorizer 结构(源码路径: influxdb/services/meta/query_authorizer.go)。
AuthorizeQuery 函数 : 认证用户信息并执行数据查询操作。
- WriteAuthorizer
数据写入认证接口,指向 meta.WriteAuthorizer 结构(源码路径: influxdb/services/meta/write_authorizer.go)。
AuthorizeWrite 函数 : 认证用户信息并执行数据写入操作。
- QueryExecutor
查询执行器。
- Monitor
httpd服务状态监控接口,指向 monitor.Monitor 结构(源码路径: influxdb/monitor/service.go)。
Statistics 函数 : 统计服务器监控信息。
- PointsWriter
数据写入接口,执向 coordinator.PointsWriter 结构(源码路径: influxdb/coordinator/points_writer.go)。
WritePoints 函数 : 数据写入功能。
- Config
httpd服务配置。
- Logger
日志相关。
- CLFLogger
日志相关。
- stats
用于存储httpd服务统计信息。
limitListener结构
该结构所在文件 : listen.go
limitListener是一个监听器,它在任何给定时间都会限制活动连接的数量,当配置文件中的max-connection-limit大于0的时有效。
数据结构如下:
type limitListener struct {
net.Listener
sem chan struct{}
}
该服务在InfluxDB中的应用
该服务在InfluxDB主服务器程序(influxd)中使用,具体如下:
[root@localhost influxdb]# grep "github.com/influxdata/influxdb/services/httpd" * -rn
cmd/influxd/run/config.go:: "github.com/influxdata/influxdb/services/httpd"
cmd/influxd/run/server.go:: "github.com/influxdata/influxdb/services/httpd"
cmd/influxd/run/server_helpers_test.go:: "github.com/influxdata/influxdb/services/httpd"
services/httpd/config_test.go:: "github.com/influxdata/influxdb/services/httpd"
services/httpd/handler_test.go:: "github.com/influxdata/influxdb/services/httpd"
services/httpd/listen_test.go:: "github.com/influxdata/influxdb/services/httpd"
services/httpd/service.go::package httpd // import "github.com/influxdata/influxdb/services/httpd"
[root@localhost influxdb]#
在config中加载配置,在server中启动httpd服务。
好,就这些了,希望对你有帮助。
本文github地址:
https://github.com/mike-zhang/mikeBlogEssays/blob/master/2018/20180206_InfluxDB源码阅读之httpd服务.rst
欢迎补充
InfluxDB源码阅读之httpd服务的更多相关文章
- InfluxDB源码阅读之snapshotter服务
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服务模块介绍 源码路径: github.com/influxda ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(1)
[源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(2)
[源码阅读] 阿里SOFA服务注册中心MetaServer(2) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(2) 0x00 摘要 0x01 MetaServer 注册 1.1 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(3)
[源码阅读] 阿里SOFA服务注册中心MetaServer(3) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(3) 0x00 摘要 0x01 概念 1.1 分布式一致性 1.2 ...
- 【Dubbo源码阅读系列】服务暴露之远程暴露
引言 什么叫 远程暴露 ?试着想象着这么一种场景:假设我们新增了一台服务器 A,专门用于发送短信提示给指定用户.那么问题来了,我们的 Message 服务上线之后,应该如何告知调用方服务器,服务器 A ...
- 【Dubbo源码阅读系列】服务暴露之本地暴露
在上一篇文章中我们介绍 Dubbo 自定义标签解析相关内容,其中我们自定义的 XML 标签 <dubbo:service /> 会被解析为 ServiceBean 对象(传送门:Dubbo ...
- xxl-job源码阅读二(服务端)
1.源码入口 xxl-job-admin是一个简单的springboot工程,简单翻看源码,可以很快发现XxlJobAdminConfig入口. @Override public void after ...
- Centos7源码部署apache/httpd服务
httpd:是一个提供网站服务的程序 监听端口:80 环境准备: Linux CentOS7.3系统 使用一台服务端,一台客户端即可: 一.安装httpd 1:安装 [root@localhost ~ ...
- Spark源码阅读之存储体系--存储体系概述与shuffle服务
一.概述 根据<深入理解Spark:核心思想与源码分析>一书,结合最新的spark源代码master分支进行源码阅读,对新版本的代码加上自己的一些理解,如有错误,希望指出. 1.块管理器B ...
随机推荐
- web发展阶段简介
web1.0.web2.0和web3.0的区别前言: 其实并没有什么所谓的2.0.3.0,因为你没法准确的界定它是什么样的应用,也没法界定它是什么时候开始的,什么时候结束,它只是互联网本身发展的一种 ...
- Python编程基础(一)
1.Python中的变量赋值不需要类型声明 2.等号(=)用来给变量赋值 3.字符串拼接用 “+” 号 temp=‘123’ print('temp的值是%s'%temp) #整数和字符创的转换, ...
- CentOS7配置FTP服务器增强版~(零基础学会FTP配置)
ps:原文不知出处,但是原文也不能正常启动,这里做了一些修改!如果能正常配置请在下方留言让更多的人看到,因为之前我本人照着网上的教程安装卸载了十多次也无法正常使用,不希望后面的兄弟继续浪费时间,如果不 ...
- gdb调试若干问题
1.若干命令速查 file <文件名>:加载被调试的可执行程序文件.因为一般都在被调试程序所在目录下执行GDB,因而文本名不需要带路径.示例:(gdb) file gdb-sample r ...
- pdf文件去掉广告,水印,背景和删除密码方法收藏
对于学习资料中,pdf文件中的出现的频繁的广告内容真的让人看了很烦,怎么删除呢,后来发现有一款工具foxitphantom可以直接删除,具体操作是,先用该软件打开,然后选择Edit->Heade ...
- Docker 搭建 Tomcat + Mysql
Docker 搭建 Tomcat + Mysql 准备 虚拟机 虚拟机安装Docker 在纯净的Centos镜像上搭建 Centos镜像准备 虚拟机上拉取 Centos 镜像: docker pull ...
- Django 学习第十二天——Auth 系统
一.Auth系统中的表: 从表的名称我们就能看出, auth_user,auth_group,auth_permission分别 存放了用户,用户组,权限的信息表. 另外三张表就是多对多的关系表 Us ...
- Print Article HDU - 3507 -斜率优化DP
思路 : 1,用一个单调队列来维护解集. 2,假设队列中从头到尾已经有元素a b c.那么当d要入队的时候,我们维护队列的下凸性质, 即如果g[d,c]<g[c,b],那么就将c点删除.直到找到 ...
- Xamarin Essentials教程振动Vibration
Xamarin Essentials教程振动Vibration 振动是提醒用户的有效方式,尤其是声音提示效果不明显的场景中,如吵杂的环境中,手机放到包中.在很多的游戏中,振动还用来模拟游戏特效,如 ...
- Codeforces.578E.Walking(构造)
题目链接 \(Description\) 给定一个长为\(n\)的足迹序列(只包含\(L,R\)两种字符),你需要\(LRLRLR...\)这样交替在\(L\)和\(R\)上走(第一步可以选择\(L\ ...