操作系統 : CentOS7.3.1611_x64 go語言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服務模塊介紹 源碼路徑: github.com/influxdata/influxdb/services/httpd config.go : 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:24: "github.com/influxdata/influxdb/services/httpd" cmd/influxd/run/server.go:23: "github.com/influxdata/influxdb/services/httpd" cmd/influxd/run/server_helpers_test.go:20: "github.com/influxdata/influxdb/services/httpd" services/httpd/config_test.go:7: "github.com/influxdata/influxdb/services/httpd" services/httpd/handler_test.go:20: "github.com/influxdata/influxdb/services/httpd" services/httpd/listen_test.go:10: "github.com/influxdata/influxdb/services/httpd" services/httpd/service.go:1: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
歡迎補充