box
当前版本为原型版本 v1.1.x
Feature
当节点被Box代理会获得以下特性
包含服务发现,健康检查,负载均衡,自动选主等功能。
提供基于jaeger
的链路追踪功能,另外还具有慢调用追踪,慢调用日志等功能。
Quick Start
- 注册服务
func main() {
cfg := box.Config{
Name: "calculate",
Tracing: false,
Mode: box.DEBUG,
ConsulAddress: consul,
Type: box.SERVICE,
LogPath: "logs/",
}
b, err := box.NewWithConfig(cfg)
if err != nil {
log.Fatalln(err)
}
defer b.Close()
b.Service().Regist("addition", func(ctx context.Context, in []byte) (out []byte, err error)){
// todo ...
}
b.Run()
}
- 编写Dockerfile
这里需要注意的是,服务发现
主要依赖于这里Tag的设置SERVICE_TAGS=box
, Coordinate节点将会自动的接管包含box Tag的节点。
FROM alpine
COPY ./calculate_linux /tmp/app/
WORKDIR /tmp/app
ENV SERVICE_TAGS=box,calculate
# 1201 rpc port
EXPOSE 1201
ENTRYPOINT ./calculate_linux $0 $@
- 运行Docker
新创建的节点将会自动注册到中心,如果已有同类型calculate
节点存在,则会按slave
模式运行,如果是第一个节点,则会按master
模式运行。同时当master
节点下线,则每一个slave
节点都会尝试选举,成功的节点会变成新的master
节点。
calculate
将会成为路由的一个主干节点, 在程序运行过程中, client发送过来的/calculate/* 请求,都会被均衡的
路由到这个节点上。
docker build -t box-calculate .
docker run --rm -d -p 1401:1201/tcp box-calculate:latest -consul http://192.168.50.138:8500