• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
 






张伯雨

学习使人快乐
 
 

Powered by 博客园
博客园 | 首页 | 新随笔 | 联系 | 订阅 订阅 | 管理

2017年8月31日

server.go 源码阅读
摘要: 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) 推荐(0)
 
pingo--util.go 源码阅读
摘要: 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) 推荐(0)
 
error.go源码笔记
摘要: 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) 推荐(0)
 
req_params.go
摘要: 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) 推荐(0)
 
top_channel_args.go
摘要: 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) 推荐(0)
 
authorizations.go
摘要: 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) 推荐(0)
 
http_server.go
摘要: 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) 推荐(0)
 
compress.go
摘要: // 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) 推荐(0)
 
api_response.go
摘要: 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) 推荐(0)
 
api_request.go
摘要: 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) 推荐(0)
 
logger.go
摘要: package app//日志接口type Logger interface { Output(maxdepth int, s string) error} 阅读全文
posted @ 2017-08-31 11:26 张伯雨 阅读(141) 评论(0) 推荐(0)
 
string_array.go
摘要: 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) 推荐(0)
 
float_array.go
摘要: 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) 推荐(0)
 
types.go
摘要: 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) 推荐(0)
 
data.go
摘要: 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) 推荐(0)
 
dirlock_windows.go
摘要: 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) 推荐(0)
 
tcp.go
摘要: 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) 推荐(0)
 
dirlock.go
摘要: // +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) 推荐(0)
 
statsd.go
摘要: 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) 推荐(0)
 
stats.go
摘要: 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) 推荐(0)
 
rename.go
摘要: 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) 推荐(0)
 
rename_windows.go
摘要: 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) 推荐(0)
 
protocol_v2.go
摘要: 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) 推荐(0)
 
nsqd.go
摘要: 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) 推荐(0)
 
options.go
摘要: 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) 推荐(0)
 
lookup_peer.go
摘要: 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) 推荐(0)
 
message.go
摘要: 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) 推荐(0)
 
lookup.go
摘要: 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) 推荐(0)
 
in_flight_pqueue.go
摘要: 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) 推荐(0)
 
logger.go
摘要: package nsqdtype Logger interface { Output(maxdepth int, s string) error} 阅读全文
posted @ 2017-08-31 11:13 张伯雨 阅读(122) 评论(0) 推荐(0)
 
http.go
摘要: 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) 推荐(0)
 
guid.go
摘要: 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) 推荐(0)
 
dummy_backend_queue.go
摘要: 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) 推荐(0)
 
dqname_widnows.go
摘要: 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) 推荐(0)
 
diskqueue.go
摘要: 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) 推荐(0)
 
dqname.go
摘要: 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) 推荐(0)
 
context.go
摘要: package nsqdtype context struct { nsqd *NSQD} 阅读全文
posted @ 2017-08-31 11:08 张伯雨 阅读(154) 评论(0) 推荐(0)
 
client_v2.go
摘要: 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) 推荐(0)
 
buffer_pool.go
摘要: 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) 推荐(0)
 
channel.go
摘要: 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) 推荐(0)
 
backend_queue.go
摘要: 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) 推荐(0)
 
http.go
摘要: 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) 推荐(0)
 
nsqlookup_protocol_v1.go
摘要: 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) 推荐(0)
 
tcp.go
摘要: 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) 推荐(0)
 
nsqlookupd.go
摘要: 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) 推荐(0)
 
registration_db.go
摘要: 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) 推荐(0)
 
logger.go
摘要: package nsqlookupd//日志结构type Logger interface { Output(maxdepth int, s string) error} 阅读全文
posted @ 2017-08-31 10:48 张伯雨 阅读(168) 评论(0) 推荐(0)
 
options.go
摘要: 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) 推荐(0)
 
context.go
摘要: package nsqlookupd//上下文接口type Context struct { nsqlookupd *NSQLookupd //本次协成上下文所包含的信息结构体} 阅读全文
posted @ 2017-08-31 10:47 张伯雨 阅读(187) 评论(0) 推荐(0)
 
client_v1.go
摘要: 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) 推荐(0)
 
阅读nsq源码 ---初步架构设计图
摘要: 阅读全文
posted @ 2017-08-31 10:46 张伯雨 阅读(639) 评论(0) 推荐(0)
 
NSQ源码剖析之nsqd
摘要: NSQ简介NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征,是一个成熟的、已在大规模生成环境下应用的产品。NSQ 由 3 个守护进程组成: nsqd 是接收、保存和传送消息到客户端的守护进程。 nsqlookupd 是管理的拓扑信息,维护着所有n... 阅读全文
posted @ 2017-08-31 10:45 张伯雨 阅读(2146) 评论(0) 推荐(0)
 
golang使用Nsq
摘要: 为什么要使用Nsq最近一直在寻找一个高性能,高可用的消息队列做内部服务之间的通讯。一开始想到用zeromq,但在查找资料的过程中,意外的发现了Nsq这个由golang开发的消息队列,毕竟是golang原汁原味的东西,功能齐全,关键是性能还不错。其中支持动态拓展,消除单点故障等特性, 都可以很好的满足我的需求下面上一张Nsq与其他mq的对比图,看上去的确强大。下面简单记录一下Nsq的使用方法图片来... 阅读全文
posted @ 2017-08-31 10:45 张伯雨 阅读(4942) 评论(0) 推荐(0)
 
nsq源码阅读笔记之nsqd(四)——Channel
摘要: 与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) 推荐(0)
 
nsq源码阅读笔记之nsqd(二)——Topic
摘要: 与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) 推荐(0)
 
nsq源码阅读笔记之nsqd(三)——diskQueue
摘要: diskQueue是backendQueue接口的一个实现。backendQueue的作用是在实现在内存go channel缓冲区满的情况下对消息的处理的对象。 除了diskQueue外还有dummyBackendQueue实现了backendQueue接口。对于临时(#ephemeral结尾)Topic/Channel,在创建时会使用dummyBackendQueue初始化backend, du... 阅读全文
posted @ 2017-08-31 10:42 张伯雨 阅读(873) 评论(0) 推荐(0)
 
nsq topic和channel的区别
摘要: 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) 推荐(0)
 
nsq源码阅读笔记之nsqd(一)——nsqd的配置解析和初始化
摘要: 配置解析nsqd的主函数位于apps/nsqd.go中的main函数首先main函数调用nsqFlagset和Parse进行命令行参数集初始化, 然后判断version参数是否存在,若存在,则打印版本号并退出程序接下来钩住系统的syscall.SIGINT和syscall.SIGTERM消息,用来阻塞主goroutine防止退出随后判断config参数是否存在,若存在的话还需进行配置文件的读取, ... 阅读全文
posted @ 2017-08-31 10:41 张伯雨 阅读(1348) 评论(0) 推荐(0)
 
go语言nsq源码解读九 tcp和http中channel、topic的增删
摘要: 通过前面多篇文章,nsqlookupd基本已经解读完毕了,不过在关于channel和topic的增删上还比较模糊,所以本篇将站在宏观的角度来总结一下,tcp.go和http.go两个文件中关于channel和topic的操作有哪些。总结如下表:模块文件所在方法名调用方法RegistrationCategoryKeySubKeyTCPlookup_protocol_v1.goREGISTERAddP... 阅读全文
posted @ 2017-08-31 10:37 张伯雨 阅读(839) 评论(0) 推荐(0)
 
go语言nsq源码解读八 http.go、http_server.go
摘要: 这篇讲另两个文件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) 推荐(0)
 
go语言nsq源码解读七 lookup_protocol_v1.go
摘要: 本篇将解读nsqlookup处理tcp请求的核心代码文件lookup_protocol_v1.go。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798... 阅读全文
posted @ 2017-08-31 10:27 张伯雨 阅读(424) 评论(0) 推荐(0)
 
go语言nsq源码解读六 tcp.go、tcp_server.go
摘要: 本篇讲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) 推荐(0)
 
go语言nsq源码解读五 nsqlookupd源码registration_db.go
摘要: 本篇将讲解registration_db.go文件。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919... 阅读全文
posted @ 2017-08-31 10:25 张伯雨 阅读(404) 评论(0) 推荐(0)
 
go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go
摘要: 本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go、context.go和wait_group_wrapper.go。options.go1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package nsqlookup... 阅读全文
posted @ 2017-08-31 10:24 张伯雨 阅读(377) 评论(0) 推荐(0)
 
go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
摘要: 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) 推荐(0)
 
go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go
摘要: 从本节开始,将逐步阅读nsq各模块的代码。读一份代码,我的思路一般是:1、了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助。2、了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块,会是怎么样的思路。3、开始上手试读,为不打击阅读的积极性,可以选择一个简单的模块,或者某一个功能点开始读。对nsq而言,打开源码的目录看一下,发现nsqlookupd和nsqadmin的代码相对较少,而n... 阅读全文
posted @ 2017-08-31 10:21 张伯雨 阅读(506) 评论(0) 推荐(0)
 
go语言nsq源码解读一-基本介绍
摘要: 简单介绍一下nsq.参考 http://feilong.me/2013/05/nsq-realtime-message-processing-system 的介绍:NSQ是由知名短链接服务商bitly用Go语言开发的实时消息处理系统,具有高性能、高可靠、无视单点故障等优点,是一个非常不错的新兴的消息队列解决方案。nsq易于配置和部署,所有参考都通过命令行指定,编译好的二进制文件,没有其它依赖项。而... 阅读全文
posted @ 2017-08-31 10:19 张伯雨 阅读(1120) 评论(0) 推荐(0)
 
Grafana简单使用
摘要: 下载安装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) 推荐(0)
 
数据展示工具
摘要: 数据最终是需要一套UI来展示的,而这种实时数据的展示,已经有不少项目了。 比如:+官方的ChronografGrafana其它... 阅读全文
posted @ 2017-08-31 10:16 张伯雨 阅读(152) 评论(0) 推荐(0)
 
第三方库API接口
摘要: 第三方库API接口InfluxDB提供了各种语言的Http API接口的封装。具体可以看这里:https://docs.influxdata.com/influxdb/v0.10/clients/api/+同时,官方也提供了Telegraf插件来收集数据,除此之外还有collectd等比较常用的第三方数据收集工具。我并不推荐一开始就用各种工具,这样会淡化对InfluxDB的理解。当然,如果你本身对... 阅读全文
posted @ 2017-08-31 10:15 张伯雨 阅读(764) 评论(0) 推荐(0)
 
连续查询(Continuous Queries)
摘要: 当数据超过保存策略里指定的时间之后,就会被删除。如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。这就需要InfluxDB提供的:连续查询(Continuous Queries)。当前数据库的Continuous Queries# 这条命令得在命令行下输入,在web管理界面不能显示。 SHOW CONTINUOUS Q... 阅读全文
posted @ 2017-08-31 10:14 张伯雨 阅读(1757) 评论(1) 推荐(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) 推荐(0)
 
数据保存策略(Retention Policies)
摘要: 数据保存策略(Retention Policies)InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除。查看当前数据库的Retention PoliciesSHOW RETENTION POLICIES ON "testDB"创建新的Retention PoliciesCREATE... 阅读全文
posted @ 2017-08-31 10:13 张伯雨 阅读(1680) 评论(1) 推荐(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) 推荐(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) 推荐(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) 推荐(0)
 
删与改
摘要: 在InfluxDB中并没有提供数据的删除与修改方法。不过我们可以通过数据保存策略(Retention Policies)来实现删除。具体请看:数据保存策略(Retention Policies)这一章节。 阅读全文
posted @ 2017-08-31 10:02 张伯雨 阅读(173) 评论(0) 推荐(0)
 
名词解释
摘要: 在上一个章节中,已经建立了一个名为testDB的数据库。在之后的演示中,都将在这个数据库上操作。在InfluxDB中有不少名词,初学者非常容易搞混,这一节主要就是对这些名词进行解释。场景定义我们有一个数据库名为testDB,里面有一张表weather用于记录:多个地区在几组海拔下的一天的温度变化,所以表中有以下字段:时间 time温度 temperature湿度 humidity地区 area海拔... 阅读全文
posted @ 2017-08-31 10:01 张伯雨 阅读(209) 评论(0) 推荐(0)
 
基本操作
摘要: 本章将介绍InfluxDB中的一些基本操作,包括数据的增删改查、数据库与表的操作等。 阅读全文
posted @ 2017-08-31 10:01 张伯雨 阅读(151) 评论(0) 推荐(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) 推荐(0)
 
InfluxDB介绍
摘要: InfluxDB介绍InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,和传统是数据库相比有不少不同的地方。类似的数据库有Elasticsearch、Graphite等。特点提供了Http接口的API来操作数据提供了类似sql的数据库语句其它...用途一般用来储存实时数据,配合一套UI界面来展示信息。 阅读全文
posted @ 2017-08-31 09:56 张伯雨 阅读(262) 评论(0) 推荐(0)
 
proxy.go
摘要: 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) 推荐(0)
 
balancer.go
摘要: 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) 推荐(0)
 
monitor.go
摘要: 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) 推荐(0)
 
log.go
摘要: 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) 推荐(0)
 
config.go
摘要: 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) 推荐(0)
 
Golang 的内存管理(上篇)
摘要: Golang 的内存管理基于 tcmalloc,可以说起点挺高的。但是 Golang 在实现的时候还做了很多优化,我们下面通过源码来看一下 Golang 的内存管理实现。下面的源码分析基于 go1.8rc3。1.tcmalloc 介绍关于 tcmalloc 可以参考这篇文章 tcmalloc 介绍,原始论文可以参考 TCMalloc : Thread-Caching Malloc。2. Golan... 阅读全文
posted @ 2017-08-31 09:49 张伯雨 阅读(1159) 评论(0) 推荐(0)
 
main.go
摘要: 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) 推荐(0)
 
Go 1.9 sync.Map揭秘
摘要: 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) 推荐(0)
 
Go的context的问题
摘要: 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) 推荐(0)
 
Golang 知识点总结
摘要: 各种类型复制的时候的花费本节标题也可以叫做“各种类型的值的大小” (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) 推荐(0)
 
golang接口三个特性
摘要: 类型和接口因为映射建设在类型的基础之上,首先我们对类型进行全新的介绍。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) 推荐(0)
 
[]T 还是 []*T, 这是一个问题
摘要: 全面分析Go语言中的类型和类型指针的抉择目录 [−]副本的创建T的副本创建*T的副本创建如何选择 T 和 *T什么时候发生副本创建最常见的casemap、slice和数组for-range循环channel函数参数和返回值Method Receiver不同类型的副本创建bool,数值和指针数组map、slice 和 channel字符串函数参考文档在编程语言深入讨论中,经常被大家提起也是争论最多的... 阅读全文
posted @ 2017-08-31 09:42 张伯雨 阅读(322) 评论(0) 推荐(0)
 
十条有用的GO技术
摘要: 十条有用的 Go 技术 这里是我过去几年中编写的大量 Go 代码的经验总结而来的自己的最佳实践。我相信它们具有弹性的。这里的弹性是指: 某个应用需要适配一个灵活的环境。你不希望每过 3 到 4 个月就不得不将它们全部重构一遍。添加新的特性应当很容易。许多人参与开发该应用,它应当可以被理解,且维护简单。许多人使用该应用,bug 应该容易被发现并且可以快速的修复。我用了很长的时间学到了这些事情。其中的... 阅读全文
posted @ 2017-08-31 09:41 张伯雨 阅读(563) 评论(0) 推荐(0)
 
JSON 的小技巧
摘要: 有的时候上游传过来的字段是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) 推荐(0)
 
Clean http handlers in Go
摘要: 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) 推荐(0)
 
Goroutine陷阱
摘要: Go在语言层面通过Goroutine与channel来支持并发编程,使并发编程看似变得异常简单,但通过最近一段时间的编码,越来越觉得简单的东西,很容易会被滥用。Java的标准库也让多线程编程变得简单,但想当初在公司定位Java的问题,发现很多的同学由于没有深入了解Java Thread的机制,Thr 阅读全文
posted @ 2017-08-31 09:38 张伯雨 阅读(508) 评论(0) 推荐(0)
 
golang 1.8 优雅关闭
摘要: // 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) 推荐(0)
 
Go性能优化小结
摘要: 1 内存优化 1.1 小对象合并成结构体一次分配,减少内存分配次数 做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间,一般建议是采用内存池。Go runtime底层也采用内存池,但每个span大小为4k,同时维护一个c 阅读全文
posted @ 2017-08-31 09:34 张伯雨 阅读(11728) 评论(1) 推荐(1)
 
理解Go Context机制
摘要: 1 什么是Context 最近在公司分析gRPC源码,proto文件生成的代码,接口函数第一个参数统一是ctx context.Context接口,公司不少同事都不了解这样设计的出发点是什么,其实我也不了解其背后的原理。今天趁着妮妲台风妹子正面登陆深圳,全市停工、停课、停业,在家休息找了一些资料研究 阅读全文
posted @ 2017-08-31 09:33 张伯雨 阅读(45043) 评论(3) 推荐(12)