摘要:
package pingoimport ( "bufio" "bytes" "flag" "fmt" "io" "math/rand" "net" "net/rpc" "os" "path" "path/filepath" "reflect" "strings" "time")// Register a new o..
阅读全文
posted @ 2017-08-31 11:39
张伯雨
阅读(399)
推荐(0)
摘要:
package pingoimport ( "fmt" "math/rand" "strings")type meta string //定义 自定义数据类型//输出包含自身在内的参数字符串func (h meta) output(key, val string) { fmt.Printf("%s: %s: %s\n", string(h), key, val)}fun...
阅读全文
posted @ 2017-08-31 11:38
张伯雨
阅读(199)
推荐(0)
摘要:
package pingoimport ( "errors" "strings")const ( errorCodeConnFailed = "err-connection-failed" errorCodeHttpServe = "err-http-serve")// Error reported when connection to the external plug...
阅读全文
posted @ 2017-08-31 11:38
张伯雨
阅读(279)
推荐(0)
摘要:
package http_apiimport ( "fmt" "log" "net" "net/http" "strings" "github.com/nsqio/nsq/internal/app")type logWriter struct { app.Logger}func (l logWriter) Write(p []byte) (int, err...
阅读全文
posted @ 2017-08-31 11:37
张伯雨
阅读(264)
推荐(0)
摘要:
package http_apiimport ( "fmt" "log" "net" "net/http" "strings" "github.com/nsqio/nsq/internal/app")type logWriter struct { app.Logger}func (l logWriter) Write(p []byte) (int, err...
阅读全文
posted @ 2017-08-31 11:37
张伯雨
阅读(149)
推荐(0)
摘要:
package authimport ( "errors" "fmt" "log" "net/url" "regexp" "time" "github.com/nsqio/nsq/internal/http_api")type Authorization struct { Topic string `json:"topic"` ...
阅读全文
posted @ 2017-08-31 11:37
张伯雨
阅读(323)
推荐(0)
摘要:
package http_apiimport ( "fmt" "log" "net" "net/http" "strings" "github.com/nsqio/nsq/internal/app")type logWriter struct { app.Logger}func (l logWriter) Write(p []byte) (int, err...
阅读全文
posted @ 2017-08-31 11:34
张伯雨
阅读(208)
推荐(0)
摘要:
// Copyright 2013 The Gorilla Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.// copied from https://github.com/goril...
阅读全文
posted @ 2017-08-31 11:33
张伯雨
阅读(213)
推荐(0)
摘要:
package http_apiimport ( "encoding/json" "fmt" "io" "net/http" "time" "github.com/julienschmidt/httprouter" "github.com/nsqio/nsq/internal/app")type Decorator func(APIHandler) API...
阅读全文
posted @ 2017-08-31 11:28
张伯雨
阅读(335)
推荐(0)
摘要:
package http_apiimport ( "crypto/tls" "encoding/json" "fmt" "io/ioutil" "net" "net/http" "net/url" "strconv" "strings" "time")type deadlinedConn struct { Timeout time....
阅读全文
posted @ 2017-08-31 11:27
张伯雨
阅读(299)
推荐(0)
摘要:
package app//日志接口type Logger interface { Output(maxdepth int, s string) error}
阅读全文
posted @ 2017-08-31 11:26
张伯雨
阅读(141)
推荐(0)
摘要:
package appimport ( "strings")type StringArray []stringfunc (a *StringArray) Set(s string) error { *a = append(*a, s) return nil}func (a *StringArray) String() string { return strings.Join...
阅读全文
posted @ 2017-08-31 11:26
张伯雨
阅读(197)
推荐(0)
摘要:
package appimport ( "fmt" "log" "sort" "strconv" "strings")//这个文件相关的代码不需要解释了吧!!!type FloatArray []float64func (a *FloatArray) Set(param string) error { for _, s := range strings.Spli...
阅读全文
posted @ 2017-08-31 11:25
张伯雨
阅读(199)
推荐(0)
摘要:
package clusterinfoimport ( "encoding/json" "fmt" "sort" "strings" "time" "github.com/blang/semver" "github.com/nsqio/nsq/internal/quantile")type ProducerTopic struct { Topic ...
阅读全文
posted @ 2017-08-31 11:24
张伯雨
阅读(286)
推荐(0)
摘要:
package clusterinfoimport ( "fmt" "net" "net/url" "sort" "strconv" "strings" "sync" "github.com/blang/semver" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/n...
阅读全文
posted @ 2017-08-31 11:23
张伯雨
阅读(254)
推荐(0)
摘要:
package dirlocktype DirLock struct { dir string}func New(dir string) *DirLock { return &DirLock{ dir: dir, }}func (l *DirLock) Lock() error { return nil}func (l *DirLock) Unlock() e...
阅读全文
posted @ 2017-08-31 11:22
张伯雨
阅读(218)
推荐(0)
摘要:
package nsqdimport ( "io" "net" "github.com/nsqio/nsq/internal/protocol")type tcpServer struct { ctx *context}func (p *tcpServer) Handle(clientConn net.Conn) { p.ctx.nsqd.logf("TCP: new...
阅读全文
posted @ 2017-08-31 11:21
张伯雨
阅读(200)
推荐(0)
摘要:
// +build !windowspackage dirlockimport ( "fmt" "os" "syscall")type DirLock struct { dir string f *os.File}func New(dir string) *DirLock { return &DirLock{ dir: dir, }}fu...
阅读全文
posted @ 2017-08-31 11:21
张伯雨
阅读(150)
推荐(0)
摘要:
package nsqdimport ( "fmt" "math" "runtime" "sort" "time" "github.com/nsqio/nsq/internal/statsd")type Uint64Slice []uint64func (s Uint64Slice) Len() int { return len(s)}func (s Ui...
阅读全文
posted @ 2017-08-31 11:20
张伯雨
阅读(442)
推荐(0)
摘要:
package nsqdimport ( "sort" "sync/atomic" "github.com/nsqio/nsq/internal/quantile")type TopicStats struct { TopicName string `json:"topic_name"` Channels []ChannelStats `...
阅读全文
posted @ 2017-08-31 11:19
张伯雨
阅读(263)
推荐(0)
摘要:
package nsqdimport ( "syscall" "unsafe")var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procMoveFileExW = modkernel32.NewProc("MoveFileExW"))const ( MOVEFILE_REPLACE_EXISTING...
阅读全文
posted @ 2017-08-31 11:18
张伯雨
阅读(211)
推荐(0)
摘要:
package nsqdimport ( "syscall" "unsafe")var ( modkernel32 = syscall.NewLazyDLL("kernel32.dll") procMoveFileExW = modkernel32.NewProc("MoveFileExW"))const ( MOVEFILE_REPLACE_EXISTING...
阅读全文
posted @ 2017-08-31 11:18
张伯雨
阅读(442)
推荐(0)
摘要:
package nsqdimport ( "bytes" "encoding/binary" "encoding/json" "errors" "fmt" "io" "math" "math/rand" "net" "sync/atomic" "time" "unsafe" "github.com/nsqio/nsq/i...
阅读全文
posted @ 2017-08-31 11:17
张伯雨
阅读(383)
推荐(0)
摘要:
package nsqdimport ( "crypto/tls" "crypto/x509" "encoding/json" "errors" "fmt" "io/ioutil" "math/rand" "net" "os" "path" "runtime" "strings" "sync" "sync/atom...
阅读全文
posted @ 2017-08-31 11:16
张伯雨
阅读(583)
推荐(0)
摘要:
package nsqdimport ( "crypto/md5" "crypto/tls" "hash/crc32" "io" "log" "os" "time")type Options struct { // basic options ID int64 `flag:"worke...
阅读全文
posted @ 2017-08-31 11:16
张伯雨
阅读(465)
推荐(0)
摘要:
package nsqdimport ( "encoding/binary" "fmt" "io" "net" "time" "github.com/nsqio/go-nsq")// lookupPeer is a low-level type for connecting/reading/writing to nsqlookupd//// A lookupPe...
阅读全文
posted @ 2017-08-31 11:15
张伯雨
阅读(223)
推荐(0)
摘要:
package nsqdimport ( "bytes" "encoding/binary" "fmt" "io" "time")const ( MsgIDLength = 16 minValidMsgLength = MsgIDLength + 8 + 2 // Timestamp + Attempts)type MessageID [Msg...
阅读全文
posted @ 2017-08-31 11:15
张伯雨
阅读(370)
推荐(0)
摘要:
package nsqdimport ( "bytes" "encoding/json" "net" "os" "strconv" "time" "github.com/nsqio/go-nsq" "github.com/nsqio/nsq/internal/version")func connectCallback(n *NSQD, hostnam...
阅读全文
posted @ 2017-08-31 11:14
张伯雨
阅读(441)
推荐(0)
摘要:
package nsqdtype inFlightPqueue []*Messagefunc newInFlightPqueue(capacity int) inFlightPqueue { return make(inFlightPqueue, 0, capacity)}func (pq inFlightPqueue) Swap(i, j int) { pq[i], pq[j] = ...
阅读全文
posted @ 2017-08-31 11:13
张伯雨
阅读(374)
推荐(0)
摘要:
package nsqdtype Logger interface { Output(maxdepth int, s string) error}
阅读全文
posted @ 2017-08-31 11:13
张伯雨
阅读(122)
推荐(0)
摘要:
package nsqdimport ( "bufio" "bytes" "encoding/json" "fmt" "io" "io/ioutil" "net" "net/http" "net/http/pprof" "net/url" "os" "reflect" "runtime" "strconv" ...
阅读全文
posted @ 2017-08-31 11:13
张伯雨
阅读(295)
推荐(0)
摘要:
package nsqd// the core algorithm here was borrowed from:// Blake Mizerany's `noeqd` https://github.com/bmizerany/noeqd// and indirectly:// Twitter's `snowflake` https://github.com/twitter/snowflake//...
阅读全文
posted @ 2017-08-31 11:12
张伯雨
阅读(314)
推荐(0)
摘要:
package nsqdtype dummyBackendQueue struct { readChan chan []byte}func newDummyBackendQueue() BackendQueue { return &dummyBackendQueue{readChan: make(chan []byte)}}func (d *dummyBackendQueue) Put...
阅读全文
posted @ 2017-08-31 11:11
张伯雨
阅读(233)
推荐(0)
摘要:
package nsqd// On Windows, file names cannot contain colons.func getBackendName(topicName, channelName string) string { // backend names, for uniqueness, automatically include the topic... ; bac...
阅读全文
posted @ 2017-08-31 11:10
张伯雨
阅读(160)
推荐(0)
摘要:
package nsqdimport ( "bufio" "bytes" "encoding/binary" "errors" "fmt" "io" "math/rand" "os" "path" "sync" "sync/atomic" "time")// diskQueue implements the BackendQu...
阅读全文
posted @ 2017-08-31 11:09
张伯雨
阅读(349)
推荐(0)
摘要:
package nsqdfunc getBackendName(topicName, channelName string) string { // backend names, for uniqueness, automatically include the topic... : backendName := topicName + ":" + channelName ret...
阅读全文
posted @ 2017-08-31 11:09
张伯雨
阅读(123)
推荐(0)
摘要:
package nsqdtype context struct { nsqd *NSQD}
阅读全文
posted @ 2017-08-31 11:08
张伯雨
阅读(154)
推荐(0)
摘要:
package nsqdimport ( "bufio" "compress/flate" "crypto/tls" "fmt" "net" "sync" "sync/atomic" "time" "github.com/mreiferson/go-snappystream" "github.com/nsqio/nsq/internal/...
阅读全文
posted @ 2017-08-31 11:05
张伯雨
阅读(353)
推荐(0)
摘要:
package nsqdimport ( "bytes" "sync")var bp sync.Poolfunc init() { bp.New = func() interface{} { return &bytes.Buffer{} }}func bufferPoolGet() *bytes.Buffer { return bp.Get().(*by...
阅读全文
posted @ 2017-08-31 11:04
张伯雨
阅读(362)
推荐(0)
摘要:
package nsqdimport ( "bytes" "container/heap" "errors" "math" "strings" "sync" "sync/atomic" "time" "github.com/nsqio/nsq/internal/pqueue" "github.com/nsqio/nsq/internal/...
阅读全文
posted @ 2017-08-31 11:04
张伯雨
阅读(457)
推荐(0)
摘要:
package nsqd// BackendQueue represents the behavior for the secondary message// storage systemtype BackendQueue interface { Put([]byte) error ReadChan() chan []byte // this is expected to be an ...
阅读全文
posted @ 2017-08-31 11:03
张伯雨
阅读(194)
推荐(0)
摘要:
package nsqlookupdimport ( "fmt" "net/http" "net/http/pprof" "sync/atomic" "github.com/julienschmidt/httprouter" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/nsq/int...
阅读全文
posted @ 2017-08-31 10:52
张伯雨
阅读(341)
推荐(0)
摘要:
package nsqlookupdimport ( "bufio" "encoding/binary" "encoding/json" "fmt" "io" "log" "net" "os" "strings" "sync/atomic" "time" "github.com/nsqio/nsq/internal/proto...
阅读全文
posted @ 2017-08-31 10:51
张伯雨
阅读(278)
推荐(0)
摘要:
package nsqlookupdimport ( "io" "net" "github.com/nsqio/nsq/internal/protocol")type tcpServer struct { ctx *Context}func (p *tcpServer) Handle(clientConn net.Conn) { p.ctx.nsqlookupd.lo...
阅读全文
posted @ 2017-08-31 10:50
张伯雨
阅读(262)
推荐(0)
摘要:
package nsqlookupdimport ( "fmt" "net" "os" "sync" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/nsq/internal/protocol" "github.com/nsqio/nsq/internal/util" "githu...
阅读全文
posted @ 2017-08-31 10:50
张伯雨
阅读(252)
推荐(0)
摘要:
package nsqlookupdimport ( "fmt" "sync" "sync/atomic" "time")//db(注册中心--内存数据库map)结构体type RegistrationDB struct { sync.RWMutex //读写锁 registrationMap map[Registration]Producers //}//代...
阅读全文
posted @ 2017-08-31 10:49
张伯雨
阅读(354)
推荐(0)
摘要:
package nsqlookupd//日志结构type Logger interface { Output(maxdepth int, s string) error}
阅读全文
posted @ 2017-08-31 10:48
张伯雨
阅读(168)
推荐(0)
摘要:
package nsqlookupdimport ( "log" "os" "time")//记录nsqd配置信息type Options struct { Verbose bool `flag:"verbose"` //开启日志信息 TCPAddress string `flag:"tcp-address"` //tcp地址 HTTPAddres...
阅读全文
posted @ 2017-08-31 10:48
张伯雨
阅读(214)
推荐(0)
摘要:
package nsqlookupd//上下文接口type Context struct { nsqlookupd *NSQLookupd //本次协成上下文所包含的信息结构体}
阅读全文
posted @ 2017-08-31 10:47
张伯雨
阅读(187)
推荐(0)
摘要:
package nsqlookupdimport ( "net")//客户端 结构体type ClientV1 struct { net.Conn //客户端连接 peerInfo *PeerInfo //服务端信息结构体}func NewClientV1(conn net.Conn) *ClientV1 { return &ClientV1{ Con...
阅读全文
posted @ 2017-08-31 10:47
张伯雨
阅读(183)
推荐(0)
posted @ 2017-08-31 10:46
张伯雨
阅读(639)
推荐(0)
摘要:
NSQ简介NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。NSQ 由 3 个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程。 nsqlookupd 是管理的拓扑信息,维护着所有n...
阅读全文
posted @ 2017-08-31 10:45
张伯雨
阅读(2146)
推荐(0)
摘要:
为什么要使用Nsq最近一直在寻找一个高性能,高可用的消息队列做内部服务之间的通讯。一开始想到用zeromq,但在查找资料的过程中,意外的发现了Nsq这个由golang开发的消息队列,毕竟是golang原汁原味的东西,功能齐全,关键是性能还不错。其中支持动态拓展,消除单点故障等特性, 都可以很好的满足我的需求下面上一张Nsq与其他mq的对比图,看上去的确强大。下面简单记录一下Nsq的使用方法图片来...
阅读全文
posted @ 2017-08-31 10:45
张伯雨
阅读(4942)
推荐(0)
摘要:
与Channel相关的代码主要位于nsqd/channel.go, nsqd/nsqd.go中。Channel与Topic的关系Channel是消费者订阅特定Topic的一种抽象。对于发往Topic的消息,nsqd向该Topic下的所有Channel投递消息,而同一个Channel只投递一次,Channel下如果存在多个消费者,则随机选择一个消费者做投递。这种投递方式可以被用作消费者负载均衡。Ch...
阅读全文
posted @ 2017-08-31 10:44
张伯雨
阅读(2197)
推荐(0)
摘要:
与Topic相关的代码主要位于nsqd/nsqd.go, nsqd/topic.go中。Topic的获取Topic通过GetTopic函数获取GetTopic函数用于获取topic对象,首先先尝试从topicMap表中获取,如果指定的topic存在,则直接返回topic对象。当topic不存在时需要新建一个topic,加入到topicMap中, 如果启用了nsqlookupd则需要从lookupd...
阅读全文
posted @ 2017-08-31 10:42
张伯雨
阅读(836)
推荐(0)
摘要:
diskQueue是backendQueue接口的一个实现。backendQueue的作用是在实现在内存go channel缓冲区满的情况下对消息的处理的对象。 除了diskQueue外还有dummyBackendQueue实现了backendQueue接口。对于临时(#ephemeral结尾)Topic/Channel,在创建时会使用dummyBackendQueue初始化backend, du...
阅读全文
posted @ 2017-08-31 10:42
张伯雨
阅读(873)
推荐(0)
摘要:
topic:一个可供订阅的话题。channel:属于topic的下一级,一个topic可以有多个channel。二者关系可以再参考下面两文章:http://www.cnblogs.com/forrestsun/p/3892710.htmlhttp://www.linuxeden.com/html/news/20140301/148960.html举个例子:topic:比做一个广播,如交通广播。打开...
阅读全文
posted @ 2017-08-31 10:41
张伯雨
阅读(3308)
推荐(0)
摘要:
配置解析nsqd的主函数位于apps/nsqd.go中的main函数首先main函数调用nsqFlagset和Parse进行命令行参数集初始化, 然后判断version参数是否存在,若存在,则打印版本号并退出程序接下来钩住系统的syscall.SIGINT和syscall.SIGTERM消息,用来阻塞主goroutine防止退出随后判断config参数是否存在,若存在的话还需进行配置文件的读取, ...
阅读全文
posted @ 2017-08-31 10:41
张伯雨
阅读(1348)
推荐(0)
摘要:
通过前面多篇文章,nsqlookupd基本已经解读完毕了,不过在关于channel和topic的增删上还比较模糊,所以本篇将站在宏观的角度来总结一下,tcp.go和http.go两个文件中关于channel和topic的操作有哪些。总结如下表:模块文件所在方法名调用方法RegistrationCategoryKeySubKeyTCPlookup_protocol_v1.goREGISTERAddP...
阅读全文
posted @ 2017-08-31 10:37
张伯雨
阅读(839)
推荐(0)
摘要:
这篇讲另两个文件http.go、http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go、tcp_server.go里的两个文件是相对应的。那两个文件用于处理tcp请求,而这两个是处理http请求的。http_sesrver.go123456789101112131415161718192021222324package utilimport ( "log" ...
阅读全文
posted @ 2017-08-31 10:29
张伯雨
阅读(607)
推荐(0)
摘要:
本篇将解读nsqlookup处理tcp请求的核心代码文件lookup_protocol_v1.go。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798...
阅读全文
posted @ 2017-08-31 10:27
张伯雨
阅读(424)
推荐(0)
摘要:
本篇讲nsqlookupd中tcp.go、tcp_server.gotcp_server.go位于util目录下。123456789101112131415161718192021222324252627282930313233343536373839package util import ( "log" "net" "runtime" "strings")ty...
阅读全文
posted @ 2017-08-31 10:26
张伯雨
阅读(595)
推荐(0)
摘要:
本篇将讲解registration_db.go文件。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919...
阅读全文
posted @ 2017-08-31 10:25
张伯雨
阅读(404)
推荐(0)
摘要:
本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go、context.go和wait_group_wrapper.go。options.go1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package nsqlookup...
阅读全文
posted @ 2017-08-31 10:24
张伯雨
阅读(377)
推荐(0)
摘要:
nsqlookupd:官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html用官方话来讲是:nsqlookupd管理拓扑信息,客户端根据特定的topic查询nsqlookupd来发现nsqd生产者及nsqd广播topic和channel信息。比较难懂,所以接下来,用通俗的话来解释。首先讲点别的东西,用过linux的同学可能会发现,...
阅读全文
posted @ 2017-08-31 10:21
张伯雨
阅读(1495)
推荐(0)
摘要:
从本节开始,将逐步阅读nsq各模块的代码。读一份代码,我的思路一般是:1、了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助。2、了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块,会是怎么样的思路。3、开始上手试读,为不打击阅读的积极性,可以选择一个简单的模块,或者某一个功能点开始读。对nsq而言,打开源码的目录看一下,发现nsqlookupd和nsqadmin的代码相对较少,而n...
阅读全文
posted @ 2017-08-31 10:21
张伯雨
阅读(506)
推荐(0)
摘要:
简单介绍一下nsq.参考 http://feilong.me/2013/05/nsq-realtime-message-processing-system 的介绍:NSQ是由知名短链接服务商bitly用Go语言开发的实时消息处理系统,具有高性能、高可靠、无视单点故障等优点,是一个非常不错的新兴的消息队列解决方案。nsq易于配置和部署,所有参考都通过命令行指定,编译好的二进制文件,没有其它依赖项。而...
阅读全文
posted @ 2017-08-31 10:19
张伯雨
阅读(1120)
推荐(0)
摘要:
下载安装Grafana也是用GO语言写的,无任何依赖,安装非常简单。启动sudo service grafana-server start 运行直接访问:http://your_ip:3000登入默认帐号:admin默认密码:admin添加数据库在Data Sources中添加数据库testDB其中user和password,如果没有设置过,可以随便填下。保存之后,可以通过Test Connect...
阅读全文
posted @ 2017-08-31 10:17
张伯雨
阅读(1493)
推荐(0)
摘要:
数据最终是需要一套UI来展示的,而这种实时数据的展示,已经有不少项目了。 比如:+官方的ChronografGrafana其它...
阅读全文
posted @ 2017-08-31 10:16
张伯雨
阅读(152)
推荐(0)
摘要:
第三方库API接口InfluxDB提供了各种语言的Http API接口的封装。具体可以看这里:https://docs.influxdata.com/influxdb/v0.10/clients/api/+同时,官方也提供了Telegraf插件来收集数据,除此之外还有collectd等比较常用的第三方数据收集工具。我并不推荐一开始就用各种工具,这样会淡化对InfluxDB的理解。当然,如果你本身对...
阅读全文
posted @ 2017-08-31 10:15
张伯雨
阅读(764)
推荐(0)
摘要:
当数据超过保存策略里指定的时间之后,就会被删除。如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。这就需要InfluxDB提供的:连续查询(Continuous Queries)。当前数据库的Continuous Queries# 这条命令得在命令行下输入,在web管理界面不能显示。 SHOW CONTINUOUS Q...
阅读全文
posted @ 2017-08-31 10:14
张伯雨
阅读(1757)
推荐(0)
摘要:
用户管理以下语句都可以直接在InfluxDB的Web管理界面中调用# 显示用户 SHOW USERS # 创建用户 CREATE USER "username" WITH PASSWORD 'password'# 创建管理员权限的用户 CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES # 删除用户 DROP U...
阅读全文
posted @ 2017-08-31 10:14
张伯雨
阅读(164)
推荐(0)
摘要:
数据保存策略(Retention Policies)InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除。查看当前数据库的Retention PoliciesSHOW RETENTION POLICIES ON "testDB"创建新的Retention PoliciesCREATE...
阅读全文
posted @ 2017-08-31 10:13
张伯雨
阅读(1680)
推荐(0)
摘要:
以下语句都可以直接在InfluxDB的Web管理界面中调用+# 创建数据库 CREATE DATABASE "db_name"# 显示所有数据库 SHOW DATABASES # 删除数据库 DROP DATABASE "db_name"# 使用数据库 USE mydb # 显示该数据库中的表 SHOW MEASUREMENTS # 创建表# 直接在插入数据的时候指定表名(weather就是表...
阅读全文
posted @ 2017-08-31 10:08
张伯雨
阅读(214)
推荐(0)
摘要:
本节将演示下查询数据的一些常用方法。+通过命令行use testDB # 查询最新的三条数据 SELECT * FROM weather ORDER BY time DESC LIMIT 3通过Http接口curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "...
阅读全文
posted @ 2017-08-31 10:03
张伯雨
阅读(215)
推荐(0)
摘要:
增在名词解释这一章节中,我们看到在weather中的有不少数据。本节将演示下如何为数据库插入数据。通过命令行use testDB insert weather,altitude=1000,area=北 temperature=11,humidity=-4这样,我们就向数据库中添加了一条数据。通过Http接口InfluxDB提供了Http的API接口,所以我们也可以通过下面的方式来插入数据。+cur...
阅读全文
posted @ 2017-08-31 10:02
张伯雨
阅读(182)
推荐(0)
摘要:
在InfluxDB中并没有提供数据的删除与修改方法。不过我们可以通过数据保存策略(Retention Policies)来实现删除。具体请看:数据保存策略(Retention Policies)这一章节。
阅读全文
posted @ 2017-08-31 10:02
张伯雨
阅读(173)
推荐(0)
摘要:
在上一个章节中,已经建立了一个名为testDB的数据库。在之后的演示中,都将在这个数据库上操作。在InfluxDB中有不少名词,初学者非常容易搞混,这一节主要就是对这些名词进行解释。场景定义我们有一个数据库名为testDB,里面有一张表weather用于记录:多个地区在几组海拔下的一天的温度变化,所以表中有以下字段:时间 time温度 temperature湿度 humidity地区 area海拔...
阅读全文
posted @ 2017-08-31 10:01
张伯雨
阅读(209)
推荐(0)
摘要:
本章将介绍InfluxDB中的一些基本操作,包括数据的增删改查、数据库与表的操作等。
阅读全文
posted @ 2017-08-31 10:01
张伯雨
阅读(151)
推荐(0)
摘要:
下载地址直接官网下载就好,非常简单。https://influxdata.com/downloads/#influxdb安装sudo dpkg -i influxdbName.deb 启动sudo service influxdb start 使用启动成功之后,我们就可以开始使用influxDB啦!命令行在命令行中直接输入influx,就可以管理数据库了。root@xtutu:~# influx ...
阅读全文
posted @ 2017-08-31 10:00
张伯雨
阅读(267)
推荐(0)
摘要:
InfluxDB介绍InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。类似的数据库有Elasticsearch、Graphite等。特点提供了Http接口的API来操作数据提供了类似sql的数据库语句其它...用途一般用来储存实时数据,配合一套UI界面来展示信息。
阅读全文
posted @ 2017-08-31 09:56
张伯雨
阅读(262)
推荐(0)
摘要:
package mainimport ( "net" "time")// 初始化代理服务func initProxy() { Log.Infof("Proxying %s -> %s\n", Config.Bind, Config.Backend) server, err := net.Listen("tcp", Config.Bind) if err != nil ...
阅读全文
posted @ 2017-08-31 09:54
张伯雨
阅读(987)
推荐(0)
摘要:
package mainimport ( "math/rand" "net" "time" "stathat.com/c/consistent")// 代理服务的结构type BackendSvr struct { identify string //代理服务器地址 isLive bool // 服务是否存活 failTimes int //失败...
阅读全文
posted @ 2017-08-31 09:53
张伯雨
阅读(279)
推荐(0)
摘要:
package mainimport ( "fmt" "net/http")// 查询监控信息的接口func statsHandler(w http.ResponseWriter, r *http.Request) { _str := "" for _, v := range BackendSvrs { _str += fmt.Sprintf("Server:...
阅读全文
posted @ 2017-08-31 09:53
张伯雨
阅读(176)
推荐(0)
摘要:
package mainimport ( "os" "github.com/Sirupsen/logrus")// 初始化日志模块func initLogger() error { logFilePath := Config.Log.Path //日志文件存放位置 file, err := os.OpenFile(logFilePath, os.O_APPEND|os.O_...
阅读全文
posted @ 2017-08-31 09:52
张伯雨
阅读(298)
推荐(0)
摘要:
package mainimport ( "io/ioutil" "github.com/go-yaml/yaml")// 代理配置数据结构type ProxyConfig struct { Bind string `yaml:"bind"` //前置服务器地址 WaitQueueLen int `yaml:"wait_queue_len...
阅读全文
posted @ 2017-08-31 09:50
张伯雨
阅读(183)
推荐(0)
摘要:
Golang 的内存管理基于 tcmalloc,可以说起点挺高的。但是 Golang 在实现的时候还做了很多优化,我们下面通过源码来看一下 Golang 的内存管理实现。下面的源码分析基于 go1.8rc3。1.tcmalloc 介绍关于 tcmalloc 可以参考这篇文章 tcmalloc 介绍,原始论文可以参考 TCMalloc : Thread-Caching Malloc。2. Golan...
阅读全文
posted @ 2017-08-31 09:49
张伯雨
阅读(1159)
推荐(0)
摘要:
package mainimport ( "flag" "fmt" "log" "os" "os/signal" "syscall" "github.com/Sirupsen/logrus")var ( Config ProxyConfig //配置文件解析后的结构体 Log *logrus.Logger c...
阅读全文
posted @ 2017-08-31 09:49
张伯雨
阅读(267)
推荐(0)
摘要:
Go 1.9 sync.Map揭秘目录 [−]有并发问题的mapGo 1.9之前的解决方案sync.MapLoadStoreDeleteRangesync.Map的性能其它在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外...
阅读全文
posted @ 2017-08-31 09:47
张伯雨
阅读(492)
推荐(0)
摘要:
Go的context的问题2017-05-29最近被由context引发的一个bug坑得不轻,所以反思一下Go的context的问题。context是隐式的约束,没有检测如果我们写一个函数,比如:func f(a int, b []byte) { } 我们知道它需要哪些参数,编译器是会帮我做检查的,当我调用f(3, "sdfsdf") 它就会报错。可是如果是context,就变成了一种隐式的约束,...
阅读全文
posted @ 2017-08-31 09:44
张伯雨
阅读(532)
推荐(0)
摘要:
各种类型复制的时候的花费本节标题也可以叫做“各种类型的值的大小” (the sizes of values of all kinds of types),底层可被不同的值共享的数据的大小未被计算。下面的表格中一个 word在32bit操作系统中代表4个字节,在64bit操作系统中代表8个字节,内容基于官方的Go 1.7的编译器。TypeCost Of Value Copying (Value Si...
阅读全文
posted @ 2017-08-31 09:43
张伯雨
阅读(1314)
推荐(0)
摘要:
类型和接口因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍。go是一个静态性语言,每个变量都有静态的类型,因此每个变量在编译阶段中有明确的变量类型,比如像:int、float32、MyType。。。比如:type MyInt int var i int var j MyInt变量i的类型为int,变量j的类型为MyInt,变量i、j具有确定的类型,虽然i、j的潜在类型是一样的,但是在没有...
阅读全文
posted @ 2017-08-31 09:43
张伯雨
阅读(320)
推荐(0)
摘要:
全面分析Go语言中的类型和类型指针的抉择目录 [−]副本的创建T的副本创建*T的副本创建如何选择 T 和 *T什么时候发生副本创建最常见的casemap、slice和数组for-range循环channel函数参数和返回值Method Receiver不同类型的副本创建bool,数值和指针数组map、slice 和 channel字符串函数参考文档在编程语言深入讨论中,经常被大家提起也是争论最多的...
阅读全文
posted @ 2017-08-31 09:42
张伯雨
阅读(322)
推荐(0)
摘要:
十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的...
阅读全文
posted @ 2017-08-31 09:41
张伯雨
阅读(563)
推荐(0)
摘要:
有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用。 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章了。参考文章:http://attilaolah.eu/2014/09/10/json-and-struct-composition-in-go/临时忽略struct字段临时忽略掉Password字段临时添加额外的字段临...
阅读全文
posted @ 2017-08-31 09:40
张伯雨
阅读(367)
推荐(0)
摘要:
IntroductionFor this blog post we are going to take a look at the http.HandlerFunc type and how we can improve it to make more elegant and clean handlers. Following the idioms of Go and staying compat...
阅读全文
posted @ 2017-08-31 09:40
张伯雨
阅读(243)
推荐(0)
摘要:
Go在语言层面通过Goroutine与channel来支持并发编程,使并发编程看似变得异常简单,但通过最近一段时间的编码,越来越觉得简单的东西,很容易会被滥用。Java的标准库也让多线程编程变得简单,但想当初在公司定位Java的问题,发现很多的同学由于没有深入了解Java Thread的机制,Thr
阅读全文
posted @ 2017-08-31 09:38
张伯雨
阅读(508)
推荐(0)
摘要:
// main.go package main import ( "fmt" "log" "net/http" "os" "os/signal" "syscall" "time" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Re...
阅读全文
posted @ 2017-08-31 09:36
张伯雨
阅读(760)
推荐(0)
摘要:
1 内存优化 1.1 小对象合并成结构体一次分配,减少内存分配次数 做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间,一般建议是采用内存池。Go runtime底层也采用内存池,但每个span大小为4k,同时维护一个c
阅读全文
posted @ 2017-08-31 09:34
张伯雨
阅读(11728)
推荐(1)
摘要:
1 什么是Context 最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究
阅读全文
posted @ 2017-08-31 09:33
张伯雨
阅读(45043)
推荐(12)