A registry for resilient mid-tier load balancing and failover.

Discovery

Build Status Go Report Card codecov

Discovery is a based service that is production-ready and primarily used at Bilibili for locating services for the purpose of load balancing and failover of middle-tier servers.

Quick Start

env

go1.12.x (and later)

build

cd $GOPATH/src
git clone https://github.com/bilibili/discovery.git
cd discovery/cmd/discovery
go build

run

./discovery -conf discovery.toml -alsologtostderr

-alsologtostderr is glog's flag,means print into stderr. If you hope print into file, can use -log.dir="/tmp". view glog doc.

Configuration

You can view the comments in cmd/discovery/discovery.toml to understand the meaning of the config.

Client

Intro/Arch/Practice

Feedback

Please report bugs, concerns, suggestions by issues, or join QQ-group 716486124 to discuss problems around source code.

Owner
bilibili
bilibili Open Source Task Force
bilibili
Comments
  • 关于docker 运行discovery 存在问题

    关于docker 运行discovery 存在问题

    使用配置 [httpServer] addr = "127.0.0.1:7171" 启动docker,服务只能被本地使用,非127.0.0.1 ip 访问被拒绝。 原因是 discovery 启动gin 的时候使用 httpServer.addr 监听. 将会拒绝所有非127.0.0.1 的请求, 容器也无法使用宿主ip 启动gin. 建议添加单独配置指定 gin 端口。 我本地添加新的配置项,测试通过 image

  • update kratos to 0.3.3

    update kratos to 0.3.3

    Fixes #54

    问题现象: go: github.com/bilibili/[email protected] requires github.com/prometheus/[email protected]: invalid pseudo-version: does not match version-control timestamp (2019-01-29T23:31:27Z)

    kratos升级至最新的0.3.3可以通过构建。

  • go build 的时候发生错误

    go build 的时候发生错误

    按照Quick Start 指导进行以下步骤时

    cd $GOPATH/src git clone https://github.com/bilibili/discovery.git cd discovery/cmd/discovery go build

    在最后一步 go build 发生错误, 报错信息如下:

    $ go build
    go: github.com/bilibili/[email protected] requires
    	github.com/prometheus/[email protected]: reading https://goproxy.cn/github.com/prometheus/client_model/@v/v0.0.0-20190220174349-fd36f4220a90.mod: 404 Not Found
    

    go version: go version go1.13.5 darwin/amd6 go env:

    GO111MODULE=""
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/Users/User/Library/Caches/go-build"
    GOENV="/Users/User/Library/Application Support/go/env"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="darwin"
    GONOPROXY=""
    GONOSUMDB=""
    GOOS="darwin"
    GOPATH="/Users/User/Projects/gopath"
    GOPRIVATE=""
    GOPROXY="https://goproxy.cn"
    GOROOT="/usr/local/go"
    GOSUMDB="sum.golang.org"
    GOTMPDIR=""
    GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
    GCCGO="gccgo"
    AR="ar"
    CC="clang"
    CXX="clang++"
    CGO_ENABLED="1"
    GOMOD="/Users/User/Projects/gopath/src/github.com/bilibili/discovery/go.mod"
    CGO_CFLAGS="-g -O2"
    CGO_CPPFLAGS=""
    CGO_CXXFLAGS="-g -O2"
    CGO_FFLAGS="-g -O2"
    CGO_LDFLAGS="-g -O2"
    PKG_CONFIG="pkg-config"
    GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/z1/cy2f80nj0qb1h52_14zr8cx00000gn/T/go-build432037684=/tmp/go-build -gno-record-gcc-switches -fno-common"
    
  • fatal error: concurrent map iteration and map write

    fatal error: concurrent map iteration and map write

    discovery 运行一段时间,发生了panic。 使用的是当前 master 分支的代码。

    错误日志如下:

    fatal error: concurrent map iteration and map write
    
    goroutine 184 [running]:
    runtime.throw(0xb15481, 0x26)
            /usr/local/go/src/runtime/panic.go:1116 +0x72 fp=0xc00051a940 sp=0xc00051a910 pc=0x439152
    runtime.mapiternext(0xc000892ae0)
            /usr/local/go/src/runtime/map.go:853 +0x554 fp=0xc00051a9c0 sp=0xc00051a940 pc=0x412874
    reflect.mapiternext(0xc000892ae0)
            /usr/local/go/src/runtime/map.go:1337 +0x2b fp=0xc00051a9d8 sp=0xc00051a9c0 pc=0x46afab
    reflect.Value.MapKeys(0xa58200, 0xc0002125f8, 0x195, 0x0, 0xc000843560, 0x18)
            /usr/local/go/src/reflect/value.go:1226 +0x10c fp=0xc00051aa68 sp=0xc00051a9d8 pc=0x4a036c
    encoding/json.mapEncoder.encode(0xb2b2d0, 0xc000990980, 0xa58200, 0xc0002125f8, 0x195, 0x100)
            /usr/local/go/src/encoding/json/encode.go:785 +0xff fp=0xc00051abe0 sp=0xc00051aa68 pc=0x549fbf
    encoding/json.mapEncoder.encode-fm(0xc000990980, 0xa58200, 0xc0002125f8, 0x195, 0x100)
            /usr/local/go/src/encoding/json/encode.go:777 +0x65 fp=0xc00051ac20 sp=0xc00051abe0 pc=0x555ce5
    encoding/json.structEncoder.encode(0xc0004d8000, 0xe, 0x10, 0xc000570a20, 0xc000990980, 0xadfb00, 0xc000212580, 0x199, 0xa50100)
            /usr/local/go/src/encoding/json/encode.go:759 +0x2ab fp=0xc00051acb8 sp=0xc00051ac20 pc=0x549c6b
    encoding/json.structEncoder.encode-fm(0xc000990980, 0xadfb00, 0xc000212580, 0x199, 0xc000210100)
            /usr/local/go/src/encoding/json/encode.go:730 +0x7f fp=0xc00051ad10 sp=0xc00051acb8 pc=0x555c5f
    encoding/json.ptrEncoder.encode(0xc000570a80, 0xc000990980, 0xa4d2c0, 0xc000212580, 0x16, 0xa40100)
            /usr/local/go/src/encoding/json/encode.go:915 +0x125 fp=0xc00051add0 sp=0xc00051ad10 pc=0x54b1e5
    encoding/json.ptrEncoder.encode-fm(0xc000990980, 0xa4d2c0, 0xc000212580, 0x16, 0xc000210100)
            /usr/local/go/src/encoding/json/encode.go:900 +0x65 fp=0xc00051ae10 sp=0xc00051add0 pc=0x555e65
    encoding/json.(*encodeState).reflectValue(0xc000990980, 0xa4d2c0, 0xc000212580, 0x16, 0xc000210100)
            /usr/local/go/src/encoding/json/encode.go:358 +0x82 fp=0xc00051ae48 sp=0xc00051ae10 pc=0x547362
    encoding/json.interfaceEncoder(0xc000990980, 0xa4a1a0, 0xc0006411f0, 0x94, 0x100)
            /usr/local/go/src/encoding/json/encode.go:714 +0xac fp=0xc00051ae90 sp=0xc00051ae48 pc=0x5497cc
    encoding/json.structEncoder.encode(0xc00066a480, 0x4, 0x4, 0xc0006417d0, 0xc000990980, 0xab8be0, 0xc0006411d0, 0x99, 0xab0100)
            /usr/local/go/src/encoding/json/encode.go:759 +0x2ab fp=0xc00051af28 sp=0xc00051ae90 pc=0x549c6b
    encoding/json.structEncoder.encode-fm(0xc000990980, 0xab8be0, 0xc0006411d0, 0x99, 0xf20100)
            /usr/local/go/src/encoding/json/encode.go:730 +0x7f fp=0xc00051af80 sp=0xc00051af28 pc=0x555c5f
    encoding/json.(*encodeState).reflectValue(0xc000990980, 0xab8be0, 0xc0006411d0, 0x99, 0xc000510100)
            /usr/local/go/src/encoding/json/encode.go:358 +0x82 fp=0xc00051afb8 sp=0xc00051af80 pc=0x547362
    encoding/json.(*encodeState).marshal(0xc000990980, 0xab8be0, 0xc0006411d0, 0x100, 0x0, 0x0)
            /usr/local/go/src/encoding/json/encode.go:330 +0xf4 fp=0xc00051b018 sp=0xc00051afb8 pc=0x546f54
    encoding/json.Marshal(0xab8be0, 0xc0006411d0, 0xf1cbf0, 0x1, 0x1, 0xc00051b0f0, 0x40cc7f)
            /usr/local/go/src/encoding/json/encode.go:161 +0x52 fp=0xc00051b090 sp=0xc00051b018 pc=0x546592
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.writeJSON(0xbc3120, 0xc0006aa000, 0xab8be0, 0xc0006411d0, 0x95262a, 0x415693)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:23 +0x7b fp=0xc00051b100 sp=0xc00051b090 pc=0x951c9b
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.JSON.Render(...)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:39
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.(*JSON).Render(0xc000641140, 0xbc3120, 0xc0006aa000, 0x0, 0xf629e0)
            <autogenerated>:1 +0xd1 fp=0xc00051b1a0 sp=0xc00051b100 pc=0x9533b1
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Render(0xc00032c6e0, 0xc8, 0xbbdf80, 0xc000641140)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:150 +0x102 fp=0xc00051b208 sp=0xc00051b1a0 pc=0x9c1802
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).JSON(0xc00032c6e0, 0xa4d2c0, 0xc000212580, 0x0, 0x0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:175 +0x149 fp=0xc00051b280 sp=0xc00051b208 pc=0x9c1ba9
    github.com/bilibili/discovery/http.renew(0xc00032c6e0)
            /app/discovery/http/discovery.go:51 +0xd4 fp=0xc00051b2d0 sp=0xc00051b280 pc=0x9e08b4
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:64 +0x3b fp=0xc00051b2f0 sp=0xc00051b2d0 pc=0x9c145b
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127 fp=0xc00051b960 sp=0xc00051b2f0 pc=0x9cc9c7
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xb2b648, 0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00051b978 sp=0xc00051b960 pc=0x9c4ff0
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00051b998 sp=0xc00051b978 pc=0x9d12d9
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:64 +0x3b fp=0xc00051b9b8 sp=0xc00051b998 pc=0x9c145b
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x610 fp=0xc00051ba68 sp=0xc00051b9b8 pc=0x9cfd70
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xb2b670, 0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00051ba80 sp=0xc00051ba68 pc=0x9c4ff0
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00051baa0 sp=0xc00051ba80 pc=0x9d12d9
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:64 +0x3b fp=0xc00051bac0 sp=0xc00051baa0 pc=0x9c145b
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x4e fp=0xc00051baf0 sp=0xc00051bac0 pc=0x9cf18e
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xb2b668, 0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00051bb08 sp=0xc00051baf0 pc=0x9c4ff0
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00051bb28 sp=0xc00051bb08 pc=0x9d12d9
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:64 +0x3b fp=0xc00051bb48 sp=0xc00051bb28 pc=0x9c145b
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc0001b6500, 0xc00032c6e0)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:323 +0x417 fp=0xc00051bbd0 sp=0xc00051bb48 pc=0x9c6917
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).ServeHTTP(0xc0001b6500, 0xbc3120, 0xc0006aa000, 0xc0003be300)
            /go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:494 +0xb9 fp=0xc00051bbf0 sp=0xc00051bbd0 pc=0x9c81d9
    net/http.serverHandler.ServeHTTP(0xc00063e0e0, 0xbc3120, 0xc0006aa000, 0xc0003be300)
            /usr/local/go/src/net/http/server.go:2843 +0xa3 fp=0xc00051bc20 sp=0xc00051bbf0 pc=0x7b7b83
    net/http.(*conn).serve(0xc0001b4500, 0xbc4ea0, 0xc000150c40)
            /usr/local/go/src/net/http/server.go:1925 +0x8ad fp=0xc00051bfc8 sp=0xc00051bc20 pc=0x7b338d
    runtime.goexit()
            /usr/local/go/src/runtime/asm_amd64.s:1374 +0x1 fp=0xc00051bfd0 sp=0xc00051bfc8 pc=0x471521
    created by net/http.(*Server).Serve
            /usr/local/go/src/net/http/server.go:2969 +0x36c
    ...
    ...
    ...
    
  • fatal error: concurrent map read and map write

    fatal error: concurrent map read and map write

    跑了一段时间发现discovery panic了

    fatal error: concurrent map read and map write
    
    goroutine 88811 [running]:
    runtime.throw(0xaaa495, 0x21)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/panic.go:617 +0x72 fp=0xc00021a380 sp=0xc00021a350 pc=0x42d2e2
    runtime.mapaccess2(0x9e70e0, 0xc0002d2ed0, 0xc00029e140, 0xc00029e140, 0xa)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/map.go:472 +0x272 fp=0xc00021a3c8 sp=0xc00021a380 pc=0x40d7d2
    reflect.mapaccess(0x9e70e0, 0xc0002d2ed0, 0xc00029e140, 0xaa38f2)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/map.go:1321 +0x3f fp=0xc00021a400 sp=0xc00021a3c8 pc=0x40fa8f
    reflect.Value.MapIndex(0x9e70e0, 0xc0004fea18, 0x195, 0x9c1220, 0xc00029e140, 0x98, 0x9c1220, 0xc00029e180, 0x98)
    	/usr/local/Cellar/go/1.12/libexec/src/reflect/value.go:1112 +0x10a fp=0xc00021a460 sp=0xc00021a400 pc=0x488b0a
    encoding/json.mapEncoder.encode(0xabfd50, 0xc000119880, 0x9e70e0, 0xc0004fea18, 0x195, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:702 +0x303 fp=0xc00021a5a8 sp=0xc00021a460 pc=0x519ef3
    encoding/json.mapEncoder.encode-fm(0xc000119880, 0x9e70e0, 0xc0004fea18, 0x195, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:678 +0x64 fp=0xc00021a5e8 sp=0xc00021a5a8 pc=0x523684
    encoding/json.structEncoder.encode(0xc0000c4900, 0xe, 0x10, 0xc000119880, 0xa78aa0, 0xc0004fe9a0, 0x199, 0x200100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:660 +0x2fb fp=0xc00021a688 sp=0xc00021a5e8 pc=0x5199cb
    encoding/json.structEncoder.encode-fm(0xc000119880, 0xa78aa0, 0xc0004fe9a0, 0x199, 0xc0004f0100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:631 +0x76 fp=0xc00021a6d8 sp=0xc00021a688 pc=0x523606
    encoding/json.ptrEncoder.encode(0xc000284300, 0xc000119880, 0x9ea7e0, 0xc00006f5d8, 0x196, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:806 +0xb2 fp=0xc00021a720 sp=0xc00021a6d8 pc=0x51ae42
    encoding/json.ptrEncoder.encode-fm(0xc000119880, 0x9ea7e0, 0xc00006f5d8, 0x196, 0x9e0100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:801 +0x64 fp=0xc00021a760 sp=0xc00021a720 pc=0x523804
    encoding/json.arrayEncoder.encode(0xc00006ff90, 0xc000119880, 0x9b2cc0, 0xc0003a2080, 0x97, 0xc000210100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:787 +0xd6 fp=0xc00021a7b8 sp=0xc00021a760 pc=0x51ac66
    encoding/json.arrayEncoder.encode-fm(0xc000119880, 0x9b2cc0, 0xc0003a2080, 0x97, 0x480100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:780 +0x64 fp=0xc00021a7f8 sp=0xc00021a7b8 pc=0x523784
    encoding/json.sliceEncoder.encode(0xc00006ffb0, 0xc000119880, 0x9b2cc0, 0xc0003a2080, 0x97, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:761 +0x90 fp=0xc00021a840 sp=0xc00021a7f8 pc=0x51a8d0
    encoding/json.sliceEncoder.encode-fm(0xc000119880, 0x9b2cc0, 0xc0003a2080, 0x97, 0xc000290100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:756 +0x64 fp=0xc00021a880 sp=0xc00021a840 pc=0x523704
    encoding/json.mapEncoder.encode(0xc00006ffc0, 0xc000119880, 0x9e6180, 0xc000376480, 0x195, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:702 +0x352 fp=0xc00021a9c8 sp=0xc00021a880 pc=0x519f42
    encoding/json.mapEncoder.encode-fm(0xc000119880, 0x9e6180, 0xc000376480, 0x195, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:678 +0x64 fp=0xc00021aa08 sp=0xc00021a9c8 pc=0x523684
    encoding/json.structEncoder.encode(0xc0002e2d80, 0x3, 0x4, 0xc000119880, 0xa2dcc0, 0xc000376480, 0x199, 0x400100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:660 +0x2fb fp=0xc00021aaa8 sp=0xc00021aa08 pc=0x5199cb
    encoding/json.structEncoder.encode-fm(0xc000119880, 0xa2dcc0, 0xc000376480, 0x199, 0xc000370100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:631 +0x76 fp=0xc00021aaf8 sp=0xc00021aaa8 pc=0x523606
    encoding/json.ptrEncoder.encode(0xc00000d8c0, 0xc000119880, 0x9a4b80, 0xc000376480, 0x16, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:806 +0xb2 fp=0xc00021ab40 sp=0xc00021aaf8 pc=0x51ae42
    encoding/json.ptrEncoder.encode-fm(0xc000119880, 0x9a4b80, 0xc000376480, 0x16, 0xc000290100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:801 +0x64 fp=0xc00021ab80 sp=0xc00021ab40 pc=0x523804
    encoding/json.mapEncoder.encode(0xc00006f3e0, 0xc000119880, 0x9e5a60, 0xc0003764b0, 0x15, 0x9e0100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:702 +0x352 fp=0xc00021acc8 sp=0xc00021ab80 pc=0x519f42
    encoding/json.mapEncoder.encode-fm(0xc000119880, 0x9e5a60, 0xc0003764b0, 0x15, 0xc000370100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:678 +0x64 fp=0xc00021ad08 sp=0xc00021acc8 pc=0x523684
    encoding/json.(*encodeState).reflectValue(0xc000119880, 0x9e5a60, 0xc0003764b0, 0x15, 0xc000370100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:334 +0x82 fp=0xc00021ad40 sp=0xc00021ad08 pc=0x5171b2
    encoding/json.interfaceEncoder(0xc000119880, 0x9e3840, 0xc0003ea080, 0x94, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:620 +0xad fp=0xc00021ad88 sp=0xc00021ad40 pc=0x5194cd
    encoding/json.structEncoder.encode(0xc00011f440, 0x4, 0x4, 0xc000119880, 0xa532c0, 0xc0003ea060, 0x99, 0xa50100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:660 +0x2fb fp=0xc00021ae28 sp=0xc00021ad88 pc=0x5199cb
    encoding/json.structEncoder.encode-fm(0xc000119880, 0xa532c0, 0xc0003ea060, 0x99, 0xc000210100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:631 +0x76 fp=0xc00021ae78 sp=0xc00021ae28 pc=0x523606
    encoding/json.(*encodeState).reflectValue(0xc000119880, 0xa532c0, 0xc0003ea060, 0x99, 0xa10100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:334 +0x82 fp=0xc00021aeb0 sp=0xc00021ae78 pc=0x5171b2
    encoding/json.(*encodeState).marshal(0xc000119880, 0xa532c0, 0xc0003ea060, 0x100, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:306 +0xee fp=0xc00021aef8 sp=0xc00021aeb0 pc=0x516c5e
    encoding/json.Marshal(0xa532c0, 0xc0003ea060, 0xfb86d0, 0x1, 0x1, 0xc00021afd0, 0x4095bf)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:160 +0x52 fp=0xc00021af70 sp=0xc00021aef8 pc=0x516442
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.writeJSON(0xb6f620, 0xc0004289a0, 0xa532c0, 0xc0003ea060, 0x9072a9, 0x411fdf)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:23 +0x7b fp=0xc00021afe0 sp=0xc00021af70 pc=0x90698b
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.JSON.Render(...)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:39
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.(*JSON).Render(0xc0003ea000, 0xb6f620, 0xc0004289a0, 0x0, 0xfe8380)
    	<autogenerated>:1 +0xd2 fp=0xc00021b080 sp=0xc00021afe0 pc=0x908112
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Render(0xc00016c280, 0xc8, 0xb6a6a0, 0xc0003ea000)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:155 +0xf4 fp=0xc00021b0e8 sp=0xc00021b080 pc=0x94c6e4
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).JSON(0xc00016c280, 0x9e5a60, 0xc0003764b0, 0x0, 0x0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:180 +0x149 fp=0xc00021b160 sp=0xc00021b0e8 pc=0x94ca89
    github.com/bilibili/discovery/http.polls(0xc00016c280)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:129 +0x429 fp=0xc00021b290 sp=0xc00021b160 pc=0x966779
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47 fp=0xc00021b2d0 sp=0xc00021b290 pc=0x94c297
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127 fp=0xc00021b950 sp=0xc00021b2d0 pc=0x9533f7
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00021b968 sp=0xc00021b950 pc=0x94f750
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00021b988 sp=0xc00021b968 pc=0x956869
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47 fp=0xc00021b9c8 sp=0xc00021b988 pc=0x94c297
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b fp=0xc00021ba78 sp=0xc00021b9c8 pc=0x955a0b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00021ba90 sp=0xc00021ba78 pc=0x94f750
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00021bab0 sp=0xc00021ba90 pc=0x956869
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47 fp=0xc00021baf0 sp=0xc00021bab0 pc=0x94c297
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51 fp=0xc00021bb18 sp=0xc00021baf0 pc=0x954f71
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30 fp=0xc00021bb30 sp=0xc00021bb18 pc=0x94f750
    github.com/bilibili/kratos/pkg/net/http/blademaster.Handler.ServeHTTP-fm(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:64 +0x39 fp=0xc00021bb50 sp=0xc00021bb30 pc=0x956869
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47 fp=0xc00021bb90 sp=0xc00021bb50 pc=0x94c297
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc00016c280)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427 fp=0xc00021bc28 sp=0xc00021bb90 pc=0x950967
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0004289a0, 0xc000170e00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d fp=0xc00021bc68 sp=0xc00021bc28 pc=0x9552ad
    net/http.HandlerFunc.ServeHTTP(0xc000093540, 0xb6f620, 0xc0004289a0, 0xc000170e00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44 fp=0xc00021bc90 sp=0xc00021bc68 pc=0x750804
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0004289a0, 0xc000170e00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6 fp=0xc00021bcf0 sp=0xc00021bc90 pc=0x7526d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0004289a0, 0xc000170e00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab fp=0xc00021bd20 sp=0xc00021bcf0 pc=0x753abb
    net/http.(*conn).serve(0xc00026a6e0, 0xb71120, 0xc000568540)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c fp=0xc00021bfc8 sp=0xc00021bd20 pc=0x74f7cc
    runtime.goexit()
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/asm_amd64.s:1337 +0x1 fp=0xc00021bfd0 sp=0xc00021bfc8 pc=0x45bda1
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 1 [chan receive, 15614 minutes]:
    main.main()
    	/work/go/src/github.com/Bilibili/discovery/cmd/discovery/main.go:29 +0x1cc
    
    goroutine 18 [syscall, 15614 minutes]:
    os/signal.signal_recv(0xb6ace0)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/sigqueue.go:139 +0x9c
    os/signal.loop()
    	/usr/local/Cellar/go/1.12/libexec/src/os/signal/signal_unix.go:23 +0x22
    created by os/signal.init.0
    	/usr/local/Cellar/go/1.12/libexec/src/os/signal/signal_unix.go:29 +0x41
    
    goroutine 23 [chan receive]:
    github.com/bilibili/kratos/pkg/stat/sys/cpu.init.0.func1()
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/stat/sys/cpu/cpu.go:59 +0x73
    created by github.com/bilibili/kratos/pkg/stat/sys/cpu.init.0
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/stat/sys/cpu/cpu.go:55 +0x32a
    
    goroutine 24 [chan receive]:
    github.com/bilibili/kratos/pkg/ratelimit/bbr.cpuproc()
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/ratelimit/bbr/bbr.go:43 +0xa9
    created by github.com/bilibili/kratos/pkg/ratelimit/bbr.init.0
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/ratelimit/bbr/bbr.go:31 +0x35
    
    goroutine 26 [select]:
    github.com/bilibili/discovery/registry.(*Registry).proc(0xc0000985f0)
    	/work/go/src/github.com/Bilibili/discovery/registry/registry.go:304 +0xde
    created by github.com/bilibili/discovery/registry.NewRegistry
    	/work/go/src/github.com/Bilibili/discovery/registry/registry.go:54 +0x125
    
    goroutine 40 [IO wait, 15885 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4e38, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc0000f8f98, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc0000f8f80, 0xc0003fc000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc0000f8f80, 0xc0003fc000, 0x1000, 0x1000, 0xc00002e000, 0xc0000b3b08, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008ebf0, 0xc0003fc000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003ea990, 0xc0003fc000, 0x1000, 0x1000, 0x0, 0x0, 0x72)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc0003def00)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc0003def00, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4ba64a)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*conn).readRequest(0xc000095180, 0xb71120, 0xc000093740, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:964 +0xb03
    net/http.(*conn).serve(0xc000095180, 0xb71120, 0xc000093740)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 54 [IO wait, 15885 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4f08, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336398, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336380, 0xc000303000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336380, 0xc000303000, 0x1000, 0x1000, 0xc0001a9740, 0xc0002ad938, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000e448, 0xc000303000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003a6180, 0xc000303000, 0x1000, 0x1000, 0x0, 0xc0002adc00, 0x74d2fb)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc000063da0)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).ReadSlice(0xc000063da0, 0x43560a, 0xc00028e480, 0xc0002adb00, 0x40b9b9, 0xc000171700, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:356 +0x3d
    bufio.(*Reader).ReadLine(0xc000063da0, 0xc0002adb08, 0xc00009d880, 0x7f6cae761008, 0x0, 0x4ba002, 0xa6c640)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:385 +0x34
    net/textproto.(*Reader).readLineSlice(0xc0003a61b0, 0xc000171700, 0xc000336380, 0x0, 0x0, 0x42c901)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:55 +0x6f
    net/textproto.(*Reader).ReadLine(...)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:36
    net/http.readRequest(0xc000063da0, 0x0, 0xc000171700, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/request.go:968 +0x8d
    net/http.(*conn).readRequest(0xc00026a320, 0xb71120, 0xc0002b2940, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:967 +0x163
    net/http.(*conn).serve(0xc00026a320, 0xb71120, 0xc0002b2940)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 34 [select]:
    github.com/bilibili/discovery/discovery.(*Discovery).regSelf.func1(0xc00009ea50, 0xc000276ba0, 0xb71120, 0xc000092f80, 0x15c573c4fdf42382)
    	/work/go/src/github.com/Bilibili/discovery/discovery/syncup.go:82 +0x10f
    created by github.com/bilibili/discovery/discovery.(*Discovery).regSelf
    	/work/go/src/github.com/Bilibili/discovery/discovery/syncup.go:78 +0x305
    
    goroutine 42 [select]:
    net/http.(*persistConn).writeLoop(0xc000433200)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1958 +0x113
    created by net/http.(*Transport).dialConn
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1358 +0xb00
    
    goroutine 35 [chan receive, 15885 minutes]:
    github.com/bilibili/discovery/discovery.(*Discovery).nodesproc(0xc000276ba0)
    	/work/go/src/github.com/Bilibili/discovery/discovery/syncup.go:127 +0x271
    created by github.com/bilibili/discovery/discovery.New
    	/work/go/src/github.com/Bilibili/discovery/discovery/discovery.go:33 +0x116
    
    goroutine 213 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4208, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016c498, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc00016c480, 0xc0003e1000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc00016c480, 0xc0003e1000, 0x1000, 0x1000, 0x1, 0x42f0dc, 0xc000089b88)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000e0e8, 0xc0003e1000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*persistConn).Read(0xc00031c360, 0xc0003e1000, 0x1000, 0x1000, 0xc000089c88, 0x404de5, 0xc0001c0b40)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1524 +0x7b
    bufio.(*Reader).fill(0xc00037c600)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc00037c600, 0x1, 0x0, 0x0, 0x1, 0xc0001c1c00, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*persistConn).readLoop(0xc00031c360)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1677 +0x1a3
    created by net/http.(*Transport).dialConn
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1357 +0xadb
    
    goroutine 37 [IO wait, 15885 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4c98, 0x72, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016df98, 0x72, 0x0, 0x0, 0xa998c4)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Accept(0xc00016df80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:384 +0x1ba
    net.(*netFD).accept(0xc00016df80, 0xa4c640, 0x50, 0xc000121220)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:238 +0x42
    net.(*TCPListener).accept(0xc00000e250, 0xc000045c00, 0x7f6cae761008, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/tcpsock_posix.go:139 +0x32
    net.(*TCPListener).AcceptTCP(0xc00000e250, 0x40c248, 0x30, 0xa4c640)
    	/usr/local/Cellar/go/1.12/libexec/src/net/tcpsock.go:247 +0x48
    net/http.tcpKeepAliveListener.Accept(0xc00000e250, 0xa4c640, 0xc00023bc50, 0x9ec580, 0xfb8930)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:3264 +0x2f
    net/http.(*Server).Serve(0xc000114d00, 0xb6fc20, 0xc00000e250, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2859 +0x22d
    net/http.(*Server).ListenAndServe(0xc000114d00, 0xc000114d00, 0xc00016df00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2797 +0xe4
    net/http.ListenAndServe(...)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:3037
    github.com/bilibili/kratos/pkg/net/http/blademaster.startPerf.func1.1(0xc000093300)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/perf.go:41 +0x1a5
    created by github.com/bilibili/kratos/pkg/net/http/blademaster.startPerf.func1
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/perf.go:36 +0x149
    
    goroutine 38 [IO wait, 737 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4d68, 0x72, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc0000f8d18, 0x72, 0x0, 0x0, 0xa998c4)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Accept(0xc0000f8d00, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:384 +0x1ba
    net.(*netFD).accept(0xc0000f8d00, 0xac1ff8, 0xc0002f7d90, 0xa47c5efc)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:238 +0x42
    net.(*TCPListener).accept(0xc00008e2e0, 0x5d8fa9e1, 0xc0002f7db8, 0x4b19a6)
    	/usr/local/Cellar/go/1.12/libexec/src/net/tcpsock_posix.go:139 +0x32
    net.(*TCPListener).Accept(0xc00008e2e0, 0xc0002f7e08, 0x18, 0xc0002ca180, 0x753f94)
    	/usr/local/Cellar/go/1.12/libexec/src/net/tcpsock.go:260 +0x48
    net/http.(*Server).Serve(0xc0002c80d0, 0xb6f360, 0xc00008e2e0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2859 +0x22d
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).RunServer(0xc00007bee0, 0xc0002c80d0, 0xb6f360, 0xc00008e2e0, 0x0, 0x0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:386 +0x97
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).Start.func1(0xc00007bee0, 0xc0002c80d0, 0xb6f360, 0xc00008e2e0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:104 +0x5c
    created by github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).Start
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:103 +0x26b
    
    goroutine 41 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4bc8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336c98, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336c80, 0xc000461000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336c80, 0xc000461000, 0x1000, 0x1000, 0x1, 0x42f0dc, 0xc000084b88)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008ee18, 0xc000461000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*persistConn).Read(0xc000433200, 0xc000461000, 0x1000, 0x1000, 0xc000084c88, 0x404de5, 0xc0001c0e40)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1524 +0x7b
    bufio.(*Reader).fill(0xc000454900)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc000454900, 0x1, 0x0, 0x0, 0x1, 0xc0004dea00, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*persistConn).readLoop(0xc000433200)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1677 +0x1a3
    created by net/http.(*Transport).dialConn
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1357 +0xadb
    
    goroutine 133 [IO wait, 15869 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4958, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016c918, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc00016c900, 0xc000212000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc00016c900, 0xc000212000, 0x1000, 0x1000, 0xc000284260, 0xc00047f938, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008f590, 0xc000212000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc00038b740, 0xc000212000, 0x1000, 0x1000, 0x0, 0xc00047fc00, 0x74d2fb)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc00054da40)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).ReadSlice(0xc00054da40, 0x43560a, 0xc00028ed80, 0xc00047fb00, 0x40b9b9, 0xc0000fb800, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:356 +0x3d
    bufio.(*Reader).ReadLine(0xc00054da40, 0xc00047fb08, 0xc00009dc00, 0x7f6cae7616d0, 0x0, 0x4ba002, 0xa6c640)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:385 +0x34
    net/textproto.(*Reader).readLineSlice(0xc00038b770, 0xc0000fb800, 0xc00016c900, 0x0, 0x0, 0x42c901)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:55 +0x6f
    net/textproto.(*Reader).ReadLine(...)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:36
    net/http.readRequest(0xc00054da40, 0x0, 0xc0000fb800, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/request.go:968 +0x8d
    net/http.(*conn).readRequest(0xc00026a500, 0xb71120, 0xc0002b3300, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:967 +0x163
    net/http.(*conn).serve(0xc00026a500, 0xb71120, 0xc0002b3300)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 44 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4af8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016c018, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc00016c000, 0xc0002c5000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc00016c000, 0xc0002c5000, 0x1000, 0x1000, 0xc00002e000, 0xc0002a9b08, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008e688, 0xc0002c5000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003eb920, 0xc0002c5000, 0x1000, 0x1000, 0x0, 0x0, 0x72)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc0003def60)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc0003def60, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4ba64a)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*conn).readRequest(0xc000132000, 0xb71120, 0xc00005e0c0, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:964 +0xb03
    net/http.(*conn).serve(0xc000132000, 0xb71120, 0xc00005e0c0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 214 [select]:
    net/http.(*persistConn).writeLoop(0xc00031c360)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1958 +0x113
    created by net/http.(*Transport).dialConn
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:1358 +0xb00
    
    goroutine 148 [IO wait, 15869 minutes]:
    internal/poll.runtime_pollWait(0x7f6cac4f4a28, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336b18, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336b00, 0xc000532000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336b00, 0xc000532000, 0x1000, 0x1000, 0xc000284260, 0xc00053b938, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000eba0, 0xc000532000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003a8c90, 0xc000532000, 0x1000, 0x1000, 0x0, 0xc00053bc00, 0x74d2fb)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc000455800)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).ReadSlice(0xc000455800, 0x43560a, 0xc00028e600, 0xc00053bb00, 0x40b9b9, 0xc0000fba00, 0x100)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:356 +0x3d
    bufio.(*Reader).ReadLine(0xc000455800, 0xc00053bb08, 0xc000044700, 0x7f6cae7616d0, 0x0, 0x4ba002, 0xa6c640)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:385 +0x34
    net/textproto.(*Reader).readLineSlice(0xc0003382a0, 0xc0000fba00, 0xc000336b00, 0x0, 0x0, 0x42c901)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:55 +0x6f
    net/textproto.(*Reader).ReadLine(...)
    	/usr/local/Cellar/go/1.12/libexec/src/net/textproto/reader.go:36
    net/http.readRequest(0xc000455800, 0x0, 0xc0000fba00, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/request.go:968 +0x8d
    net/http.(*conn).readRequest(0xc000132460, 0xb71120, 0xc00005ecc0, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:967 +0x163
    net/http.(*conn).serve(0xc000132460, 0xb71120, 0xc00005ecc0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 150 [select]:
    github.com/bilibili/discovery/http.polls(0xc0004eef00)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:127 +0x366
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0004eef00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc000428460, 0xc0000fb600)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093540, 0xb6f620, 0xc000428460, 0xc0000fb600)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc000428460, 0xc0000fb600)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc000428460, 0xc0000fb600)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc0001320a0, 0xb71120, 0xc00005e180)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 215 [runnable]:
    encoding/json.structEncoder.encode(0xc00011f440, 0x4, 0x4, 0xc00015a0e0, 0xa532c0, 0xc000376960, 0x99, 0xa50100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:631 +0x444
    encoding/json.(*encodeState).reflectValue(0xc00015a0e0, 0xa532c0, 0xc000376960, 0x99, 0xa10100)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:334 +0x82
    encoding/json.(*encodeState).marshal(0xc00015a0e0, 0xa532c0, 0xc000376960, 0x100, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:306 +0xee
    encoding/json.Marshal(0xa532c0, 0xc000376960, 0xfb86d0, 0x1, 0x1, 0xc00047b0b0, 0x4095bf)
    	/usr/local/Cellar/go/1.12/libexec/src/encoding/json/encode.go:160 +0x52
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.writeJSON(0xb6f620, 0xc0003fa0e0, 0xa532c0, 0xc000376960, 0x9072a9, 0x412175)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:23 +0x7b
    github.com/bilibili/kratos/pkg/net/http/blademaster/render.JSON.Render(...)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/render/json.go:39
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Render(0xc0000f8480, 0xc8, 0xb6a6a0, 0xc0003768d0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:155 +0xf4
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).JSON(0xc0000f8480, 0x0, 0x0, 0x0, 0x0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:180 +0x149
    github.com/bilibili/discovery/http.set(0xc0000f8480)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:152 +0x13f
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0000f8480)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0003fa0e0, 0xc0000fad00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093580, 0xb6f620, 0xc0003fa0e0, 0xc0000fad00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0003fa0e0, 0xc0000fad00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0003fa0e0, 0xc0000fad00)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc00026a3c0, 0xb71120, 0xc00005f1c0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 138 [select]:
    github.com/bilibili/discovery/http.polls(0xc0000f9980)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:127 +0x366
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0000f9980)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0003fa700, 0xc000413200)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093540, 0xb6f620, 0xc0003fa700, 0xc000413200)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0003fa700, 0xc000413200)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0003fa700, 0xc000413200)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc00026a1e0, 0xb71120, 0xc0002b2c80)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 157 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4888, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336998, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336980, 0xc000382000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336980, 0xc000382000, 0x1000, 0x1000, 0xc000030500, 0xc000481b08, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008ecf0, 0xc000382000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003d3740, 0xc000382000, 0x1000, 0x1000, 0x0, 0x0, 0x72)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc000062720)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc000062720, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4ba64a)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*conn).readRequest(0xc000132320, 0xb71120, 0xc00005ef40, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:964 +0xb03
    net/http.(*conn).serve(0xc000132320, 0xb71120, 0xc00005ef40)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 954658 [select]:
    context.propagateCancel.func1(0xb71320, 0xc0000f8080, 0xb68920, 0xc000092680)
    	/usr/local/Cellar/go/1.12/libexec/src/context/context.go:259 +0xd8
    created by context.propagateCancel
    	/usr/local/Cellar/go/1.12/libexec/src/context/context.go:258 +0x18a
    
    goroutine 910212 [semacquire]:
    sync.runtime_Semacquire(0xc000376550)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/sema.go:56 +0x39
    sync.(*WaitGroup).Wait(0xc000376548)
    	/usr/local/Cellar/go/1.12/libexec/src/sync/waitgroup.go:130 +0x65
    golang.org/x/sync/errgroup.(*Group).Wait(0xc000376540, 0xc0003a6e70, 0xc00047d168)
    	/work/go/pkg/mod/github.com/golang/[email protected]/errgroup/errgroup.go:40 +0x31
    github.com/bilibili/discovery/registry.(*Nodes).ReplicateSet(0xc0003a6ea0, 0xb71320, 0xc0000f8080, 0xc000132140, 0x9f4600, 0xc00047d230, 0x40c248)
    	/work/go/src/github.com/Bilibili/discovery/registry/nodes.go:93 +0x40e
    github.com/bilibili/discovery/discovery.(*Discovery).Set(0xc000276ba0, 0xb71320, 0xc0000f8080, 0xc000132140, 0xfe74b0, 0x0)
    	/work/go/src/github.com/Bilibili/discovery/discovery/register.go:100 +0xec
    github.com/bilibili/discovery/http.set(0xc0000f8080)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:152 +0x115
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0000f8080)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0003fa000, 0xc0000fa300)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093580, 0xb6f620, 0xc0003fa000, 0xc0000fa300)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0003fa000, 0xc0000fa300)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0003fa000, 0xc0000fa300)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc00026a780, 0xb71120, 0xc0005686c0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 954654 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4618, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc0000f8918, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc0000f8900, 0xc0003d3121, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc0000f8900, 0xc0003d3121, 0x1, 0x1, 0xc000093058, 0xc0004a0768, 0x46f944)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008ee58, 0xc0003d3121, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).backgroundRead(0xc0003d3110)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:677 +0x58
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 954645 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f47b8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336018, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336000, 0xc00048c0a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336000, 0xc00048c0a1, 0x1, 0x1, 0xc0002b2f98, 0xc00035e768, 0x46f944)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008e018, 0xc00048c0a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).backgroundRead(0xc00048c090)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:677 +0x58
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 954659 [select]:
    net/http.(*persistConn).roundTrip(0xc00031c360, 0xc000376660, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:2174 +0x531
    net/http.(*Transport).roundTrip(0xc000351320, 0xc0000fa900, 0x9fd0e0, 0x1, 0xc00006f900)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/transport.go:481 +0xa9a
    net/http.(*Transport).RoundTrip(0xc000351320, 0xc0000fa900, 0xfe74b0, 0x9bffe0, 0xf8f8e0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/roundtrip.go:17 +0x35
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*TraceTransport).RoundTrip(0xc0002b3000, 0xc0000fa900, 0xc0002b3000, 0x0, 0x0)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:100 +0x4fe
    net/http.send(0xc0000fa900, 0xb62c20, 0xc0002b3000, 0x0, 0x0, 0x0, 0xc00008e0e0, 0x412874, 0x1, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/client.go:250 +0x202
    net/http.(*Client).send(0xc0003a6d80, 0xc0000fa900, 0x0, 0x0, 0x0, 0xc00008e0e0, 0x0, 0x1, 0x17)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/client.go:174 +0xfb
    net/http.(*Client).do(0xc0003a6d80, 0xc0000fa900, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/client.go:641 +0x279
    net/http.(*Client).Do(...)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/client.go:509
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Client).Raw(0xc00033faa0, 0xb71120, 0xc000092680, 0xc0000fa800, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/client.go:261 +0x6c1
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Client).Do(0xc00033faa0, 0xb71120, 0xc000092680, 0xc0000fa800, 0x9b07c0, 0xc00049c378, 0x0, 0x0, 0x0, 0x0, ...)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/client.go:282 +0x8e
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Client).Post(0xc00033faa0, 0xb71120, 0xc000092680, 0xc00021d950, 0x26, 0x0, 0x0, 0xc0002f9d68, 0x9b07c0, 0xc00049c378, ...)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/client.go:178 +0x105
    github.com/bilibili/discovery/registry.(*Node).setCall(0xc0003422d0, 0xb71120, 0xc000092680, 0xc000132140, 0xc00021d950, 0x26, 0x0, 0xc000304790)
    	/work/go/src/github.com/Bilibili/discovery/registry/node.go:175 +0x786
    github.com/bilibili/discovery/registry.(*Node).Set(...)
    	/work/go/src/github.com/Bilibili/discovery/registry/node.go:107
    github.com/bilibili/discovery/registry.(*Nodes).ReplicateSet.func1(0x8, 0xac2018)
    	/work/go/src/github.com/Bilibili/discovery/registry/nodes.go:79 +0x5e
    golang.org/x/sync/errgroup.(*Group).Go.func1(0xc000376540, 0xc000078500)
    	/work/go/pkg/mod/github.com/golang/[email protected]/errgroup/errgroup.go:57 +0x57
    created by golang.org/x/sync/errgroup.(*Group).Go
    	/work/go/pkg/mod/github.com/golang/[email protected]/errgroup/errgroup.go:54 +0x66
    
    goroutine 954657 [runnable]:
    net/http.(*connReader).backgroundRead(0xc000339f20)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:676
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 954660 [runnable]:
    net/http.(*connReader).backgroundRead(0xc000206930)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:676
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 88835 [select]:
    github.com/bilibili/discovery/http.polls(0xc0004efe00)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:127 +0x366
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0004efe00)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0004287e0, 0xc000170900)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093540, 0xb6f620, 0xc0004287e0, 0xc000170900)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0004287e0, 0xc000170900)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0004287e0, 0xc000170900)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc000095680, 0xb71120, 0xc000414800)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 771140 [select]:
    github.com/bilibili/discovery/http.polls(0xc0004eff80)
    	/work/go/src/github.com/Bilibili/discovery/http/discovery.go:127 +0x366
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Logger.func1(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/logger.go:27 +0x127
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00b0, 0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Trace.func1(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/trace.go:38 +0x60b
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c8, 0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.Recovery.func1(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/recovery.go:30 +0x51
    github.com/bilibili/kratos/pkg/net/http/blademaster.HandlerFunc.ServeHTTP(0xac00c0, 0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:72 +0x30
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Context).Next(0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/context.go:70 +0x47
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).handleContext(0xc00007bee0, 0xc0004eff80)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:277 +0x427
    github.com/bilibili/kratos/pkg/net/http/blademaster.(*Engine).addRoute.func1(0xb6f620, 0xc0004288c0, 0xc0003dc000)
    	/work/go/pkg/mod/github.com/bilibili/[email protected]/pkg/net/http/blademaster/server.go:215 +0x14d
    net/http.HandlerFunc.ServeHTTP(0xc000093540, 0xb6f620, 0xc0004288c0, 0xc0003dc000)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1995 +0x44
    net/http.(*ServeMux).ServeHTTP(0xc000093240, 0xb6f620, 0xc0004288c0, 0xc0003dc000)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2375 +0x1d6
    net/http.serverHandler.ServeHTTP(0xc0002c80d0, 0xb6f620, 0xc0004288c0, 0xc0003dc000)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2774 +0xab
    net/http.(*conn).serve(0xc00026a640, 0xb71120, 0xc000092f40)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1878 +0x84c
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    goroutine 954627 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f46e8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016c398, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc00016c380, 0xc000430881, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc00016c380, 0xc000430881, 0x1, 0x1, 0xc00005e258, 0xc0002ba768, 0x46f944)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000e9c8, 0xc000430881, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).backgroundRead(0xc000430870)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:677 +0x58
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 954655 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f4068, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc0000f8e98, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc0000f8e80, 0xc0002d38a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc0000f8e80, 0xc0002d38a1, 0x1, 0x1, 0xc000568798, 0xc000043768, 0x46f944)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00008e400, 0xc0002d38a1, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).backgroundRead(0xc0002d3890)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:677 +0x58
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 954656 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4b97a8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc000336d18, 0x72, 0x0, 0x1, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc000336d00, 0xc0003a9811, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc000336d00, 0xc0003a9811, 0x1, 0x1, 0xc000304f78, 0x962795, 0xc000342240)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000e190, 0xc0003a9811, 0x1, 0x1, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).backgroundRead(0xc0003a9800)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:677 +0x58
    created by net/http.(*connReader).startBackgroundRead
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:673 +0xca
    
    goroutine 88883 [IO wait]:
    internal/poll.runtime_pollWait(0x7f6cac4f42d8, 0x72, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/runtime/netpoll.go:182 +0x56
    internal/poll.(*pollDesc).wait(0xc00016de98, 0x72, 0x1000, 0x1000, 0xffffffffffffffff)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:87 +0x9b
    internal/poll.(*pollDesc).waitRead(...)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_poll_runtime.go:92
    internal/poll.(*FD).Read(0xc00016de80, 0xc00023d000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/internal/poll/fd_unix.go:169 +0x19b
    net.(*netFD).Read(0xc00016de80, 0xc00023d000, 0x1000, 0x1000, 0xc000030500, 0xc000505b08, 0x7498ea)
    	/usr/local/Cellar/go/1.12/libexec/src/net/fd_unix.go:202 +0x4f
    net.(*conn).Read(0xc00000e550, 0xc00023d000, 0x1000, 0x1000, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/net.go:177 +0x69
    net/http.(*connReader).Read(0xc0003380f0, 0xc00023d000, 0x1000, 0x1000, 0x0, 0x0, 0x72)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:787 +0x107
    bufio.(*Reader).fill(0xc0003b8360)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:100 +0x10f
    bufio.(*Reader).Peek(0xc0003b8360, 0x4, 0x0, 0x0, 0x0, 0x0, 0x4ba64a)
    	/usr/local/Cellar/go/1.12/libexec/src/bufio/bufio.go:138 +0x4f
    net/http.(*conn).readRequest(0xc00026ab40, 0xb71120, 0xc000414b80, 0x0, 0x0, 0x0)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:964 +0xb03
    net/http.(*conn).serve(0xc00026ab40, 0xb71120, 0xc000414b80)
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:1819 +0x6a8
    created by net/http.(*Server).Serve
    	/usr/local/Cellar/go/1.12/libexec/src/net/http/server.go:2884 +0x2f4
    
    
  • 注册服务被kill掉, discovery依然存在

    注册服务被kill掉, discovery依然存在

    Linux使用kill -9把服务给kill掉, discovery没有监控到状态变化

    [root@izwz9905avpr21bbhvlvuwz cmd]# nohup kratos run >log.log 2>&1 & [1] 19614

    kill -9 19614

  • fix: 当内存中的discovery节点全都无效时,尝试连接到配置文件中的节点.

    fix: 当内存中的discovery节点全都无效时,尝试连接到配置文件中的节点.

    有可能内存中的discovery节点,并不包含配置文件中定义的节点地址. 若内存中的节点全都无效了, 应该尝试重新到配置文件中指定的地址去获取.

    比如在k8s中,定义discovery的地址是服务的dns地址.而连接成功后,实际上获取的是discovery的Pod的地址.若相应的单点Pod重启了,就会出现始终无法连接上新discovery的状况. 若在一定次数的网络故障后,主动根据配置文件中的地址,去连接discovery,就可以获取到最新的discovery地址了.

  • go build时报错

    go build时报错

    go: github.com/bilibili/[email protected] requires github.com/StackExchange/[email protected]: invalid pseudo-version: does not match version-control timestamp (2019-05-23T21:33:15Z)

  • fix ArgSet param

    fix ArgSet param

    Tried to fix the problem since 348f61e4761923af215aac6ae8d84f22d99c2681

    Since split option is removed, form binding in kratos will not work properly as expected like before.

  • README.md issue

    README.md issue

    log_dir should change to log.dir in verion 1.1.0 in this string '-alsologtostderr is glog's flag,means print into stderr. If you hope print into file, can use -log_dir="/tmp"'

    ===================================== [root@k8s-discovery1 discovery]# discovery ERROR 08/09-02:48:39.217 /work/go/src/github.com/Bilibili/discovery/cmd/discovery/main.go:19 conf.Init() error(open discovery-example.toml: no such file or directory) panic: open discovery-example.toml: no such file or directory

    goroutine 1 [running]: main.main() /work/go/src/github.com/Bilibili/discovery/cmd/discovery/main.go:20 +0x3c5 [root@k8s-discovery1 discovery]# discovery -h Usage of discovery: -appid string appid is global unique application id, register by service tree. or use APP_ID env variable. -conf string config path (default "discovery-example.toml") -deploy.color string deploy.color is the identification of different experimental group. -deploy.env string deploy env. or use DEPLOY_ENV env variable, value: dev/fat1/uat/pre/prod etc. (default "dev") -discovery.nodes string discovery.nodes is seed nodes. value: 127.0.0.1:7171,127.0.0.2:7171 etc. -hostname string machine hostname (default "k8s-discovery1") -http string listen http dsn, or use HTTP env variable. (default "tcp://0.0.0.0:8000/?timeout=1s") -http.perf string listen http perf dsn, or use HTTP_PERF env variable. (default "tcp://0.0.0.0:2333") -log.agent string log agent dsn, or use LOG_AGENT env variable. -log.dir string log file `path, or use LOG_DIR env variable. -log.filter value log field for sensitive message, or use LOG_FILTER env variable, format: field1,field2. -log.module value log verbose for specified module, or use LOG_MODULE env variable, format: file=1,file2=2. -log.noagent force disable log agent print log to stderr, or use LOG_NO_AGENT -log.stdout log enable stdout or not, or use LOG_STDOUT env variable. -log.v int log verbose level, or use LOG_V env variable. -prom_summary use summary in prometheus -region string avaliable region. or use REGION env variable, value: sh etc. (default "region01") -scheduler string scheduler info (default "scheduler.json") -trace string trace report dsn, or use TRACE env. (default "unixgram:///var/run/dapper-collect/dapper-collect.sock") -zone string avaliable zone. or use ZONE env variable, value: sh001/sh002 etc. (default "zone01")

  • use appid=xx&appid=xx2 instead of split by ','

    use appid=xx&appid=xx2 instead of split by ','

    according api

    should use appid=xx&appid=xx2 instead of split by ','

    curl 'http://127.0.0.1:7171/discovery/polls?zone=sh1&env=test&appid=provider&appid=provider2&latest_timestamp=0&latest_timestamp=0'
    
  • 参数请教

    参数请教

    https://github.com/bilibili/discovery/blob/1e12d5c0080ecd7ce97ab78076ef36dda8d56a1a/discovery/register.go#L15 请问一下这个replication参数设计出来的目的是什么?结合注册接口逻辑,这个参数默认一直是false

  • 3节点下,部分节点中应用addrs地址错误

    3节点下,部分节点中应用addrs地址错误

    部署情况: 单节点多实例不是,192.168.115.242:7171,192.168.115.242:7172,192.168.115.242:7173 注册情况: ins := &naming.Instance{ Zone: "001", Env: "prod", AppID: "app01", Version: "b", Addrs: []string{ "http://192.168.115.242:8001", "grpc://192.168.115.242:9001", }, LastTs: time.Now().Unix(), Metadata: map[string]string{ "color":"qa", "weight":"10", }, } 问题: image 部分节点将 "addrs": ["http://192.168.115.242:8001","grpc://192.168.115.242:9001"]变成了 "addrs": ["http://192.168.115.242:8001,grpc://192.168.115.242:9001"]

  • http-access-log 出错

    http-access-log 出错

    ERROR 03/17-03:19:56.618 http-access-log method=GET ip=127.0.0.1 path=/discovery/polls ts=30.00105143 traceid= err=-304 user=no_user params=appid=infra.discovery&env=dev&hostname=cloud1&latest_timestamp=1615864005461352591 stack=-304 ret=-304 msg=-304 timeout_quota=39.999991718 INFO 03/17-03:19:56.618 /home/avit/code/discovery/registry/registry.go:235 Polls from(cloud1) reuse connection(6) INFO 03/17-03:19:56.625 /home/avit/code/discovery/registry/registry.go:382 DelConns from(cloud1) count decr(6) ERROR 03/17-03:19:56.625 http-access-log params=appid=infra.discovery&env=dev&hostname=cloud1&latest_timestamp=1615864005461352591 traceid= ip=127.0.0.1 err=-304 ts=30.001147202 ret=-304 stack=-304 path=/discovery/polls user=no_user msg=-304 timeout_quota=39.999992338 method=GET INFO 03/17-03:19:56.626 /home/avit/code/discovery/registry/registry.go:235 Polls from(cloud1) reuse connection(6) INFO 03/17-03:19:56.648 /home/avit/code/discovery/registry/registry.go:382 DelConns from(cloud1) count decr(6) INFO 03/17-03:19:56.648 /home/avit/code/discovery/registry/registry.go:385 DelConns from(cloud1) delete(1) ERROR 03/17-03:19:56.648 http-access-log stack=-304 traceid= method=GET ret=-304 msg=-304 ts=30.001125872 ip=127.0.0.1 path=/discovery/polls err=-304 params=appid=infra.discovery&appid=goim.comet&env=dev&hostname=cloud1&latest_timestamp=1615864005461352591&latest_timestamp=1615865003212927403 user=no_user timeout_quota=39.999992267

    请问这个出错是怎么发生的,然后应该怎么解决?

RoadRunner: an open-source high-performance PHP application server, load balancer, and process manager
RoadRunner: an open-source high-performance PHP application server, load balancer, and process manager

RoadRunner is an open-source (MIT licensed) high-performance PHP application server, load balancer, and process manager. It supports running as a serv

Jan 13, 2022
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams

rtsp-simple-server is a simple, ready-to-use and zero-dependency RTSP / RTMP server and proxy, a software that allows users to publish, read and proxy live video and audio streams. RTSP is a specification that describes how to perform these operations with the help of a server, that is contacted by both publishers and readers and relays the publisher's streams to the readers.

Dec 31, 2022
Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

SFTPGo Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support, written in Go. Several storage backends are supporte

Jan 9, 2023
⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.

⚡ A fast, lightweight, and secure chat protocol, client and server, written in Go.

Oct 27, 2022
RBTI Golang Server uses PostgreSQL and for its main database and uses Elasticsearch

RBTI Golang Server This server is used for my thesis project, it uses PostgreSQL and for its main database and uses Elasticsearch for faster query spe

Jan 17, 2022
✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨
✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨

✨ A lightweight HTTP server based on GO, will try to detect your OS and architecture and return as SHELL script. ✨

Dec 14, 2022
:tophat: Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support
:tophat: Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support

Web server with built-in support for QUIC, HTTP/2, Lua, Markdown, Pongo2, HyperApp, Amber, Sass(SCSS), GCSS, JSX, BoltDB (built-in, stores the databas

Jan 1, 2023
Open platform to collect and prioritize product feedback
Open platform to collect and prioritize product feedback

Fider A platform to collect and organize customer feedback. Let your customers share, vote and discuss on suggestions they have to make your product e

Jan 1, 2023
Flagr is a feature flagging, A/B testing and dynamic configuration microservice
Flagr is a feature flagging, A/B testing and dynamic configuration microservice

Introduction Flagr is an open source Go service that delivers the right experience to the right entity and monitors the impact. It provides feature fl

Dec 25, 2022
A feature flag solution, with only a YAML file in the backend (S3, GitHub, HTTP, local file ...), no server to install, just add a file in a central system and refer to it. 🎛️
A feature flag solution, with only a YAML file in the backend (S3, GitHub, HTTP, local file ...), no server to install, just add a file in a central system and refer to it. 🎛️

??️ go-feature-flag A feature flag solution, with YAML file in the backend (S3, GitHub, HTTP, local file ...). No server to install, just add a file i

Dec 29, 2022
Simple webhook delivery system powered by Golang and PostgreSQL

postmand Simple webhook delivery system powered by Golang and PostgreSQL. Features Simple rest api with only three endpoints (webhooks/deliveries/deli

Dec 22, 2022
Flagr is an open source Go service that delivers the right experience to the right entity and monitors the impact.
Flagr is an open source Go service that delivers the right experience to the right entity and monitors the impact.

Flagr is an open source Go service that delivers the right experience to the right entity and monitors the impact. It provides feature flags, experimentation (A/B testing), and dynamic configuration. It has clear swagger REST APIs for flags management and flag evaluation.

Dec 25, 2022
Oogway is a simple web server with dynamic content generation and extendability in mind supporting a Git based workflow.

Oogway Oogway is a simple web server with dynamic content generation and extendability in mind supporting a Git based workflow. It's somewhere in betw

Nov 9, 2022
Opinionated boilerplate Golang HTTP server with CORS, OPA, Prometheus, rate-limiter for API and static website.
Opinionated boilerplate Golang HTTP server with CORS, OPA, Prometheus, rate-limiter for API and static website.

Teal.Finance/Server Opinionated boilerplate HTTP server with CORS, OPA, Prometheus, rate-limiter… for API and static website. Origin This library was

Nov 3, 2022
HTTP server receives events and publishes them to STAN
HTTP server receives events and publishes them to STAN

Publishes events to Nats Streaming(STAN) synchornously and asynchronously. Cache events's publish-state using Redis and Store events using MongoDB.

Dec 30, 2022
Formrecevr is a simple and lightweight from receiver backend primarily designed for (but not limited to) static websites.

Formrecevr Formrecevr (pronunced "Form receiver") is a simple and lightweight from receiver backend primarily designed for (but not limited to) static

Apr 17, 2022
Tiny Go webserver that prints os information and HTTP request to output

whoami Tiny Go webserver that prints os information and HTTP request to output Usage Paths /data?size=n[&unit=u]: creates a response with a size n. Th

Nov 2, 2021
The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat
The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat

The Zuri Core is an open-source API that serves as the backend and backbone of Zuri Chat

Dec 26, 2022