Micro Sidecar

未匹配的标注
本文档最新版为 3.x,旧版本可能放弃维护,推荐阅读最新版!

Micro Sidecar 是用于构建高度可用和容错微服务的服务网格.

它与 Netflix 的 Prana, Buoyant 的 RPC Proxy Linkerd 或 Lyft 的 Envoy 类似.

Micro Sidecar 采用 go-micro, 具有相同的默认设置和可插拔性.

可以在这里 examples/sidecar 找到多种语言的用法示例.

API

sidecar 具有以下 HTTP API.

- /[service]/[method]
- /broker
- /registry
- /rpc

特征

sidecar 具有 go-micro 的所有功能. 这是最相关的内容.

  • 服务发现
  • 消息总线
  • RPC 和代理处理程序
  • 负载平衡, 重试, 超时
  • 健康检测
  • 统计界面
  • 可通过 go-micro 插拔

入门

安装

go get github.com/micro/micro

依赖

Sidecar 使用 go-micro, 这意味着它有一个默认依赖关系, 用于服务发现的 Consul.

brew install consul
consul agent -dev

运行

默认情况下, 在端口 8081 上运行 Micro Sidecar.

启动 Sidecar

micro sidecar

如果要在启动时自动注册应用程序, 请指定应用程序服务名和地址.

micro sidecar --server_name=foo --server_address=127.0.0.1:9090

通过 ACME 加密

通过使用 ACME 提供安全服务

micro --enable_acme sidecar

可以指定一个主机白名单

micro --enable_acme --acme_hosts=example.com,proxy.example.com sidecar

提供 TLS 安全

Sidecar 支持使用 TLS 证书安全地提供服务

micro --enable_tls --tls_cert_file=/path/to/cert --tls_key_file=/path/to/key sidecar

自动健康检查

用 “-healthcheck_url=” 启动微型边车以启用健康检查器

它执行以下操作:

  • 自动服务注册
  • 定期 HTTP 健康检查
  • 通过非 200 响应取消注册
micro sidecar --server_name=foo --server_address=127.0.0.1:9090
    --healthcheck_url=http://127.0.0.1:9090/health

注册

注册服务

// specify ttl as a param to expire the registration
// units ns|us|ms|s|m|h
// http://127.0.0.1:8081/registry?ttl=10s

curl -H 'Content-Type: application/json' http://127.0.0.1:8081/registry -d 
{
    "Name": "foo.bar",
    "Nodes": [{
        "Port": 9091,
        "Address": "127.0.0.1",
        "Id": "foo.bar-017da09a-734f-11e5-8136-68a86d0d36b6"
    }]
}

取消注册

curl -X "DELETE" -H 'Content-Type: application/json' http://127.0.0.1:8081/registry -d 
{
    "Name": "foo.bar",
    "Nodes": [{
        "Port": 9091,
        "Address": "127.0.0.1",
        "Id": "foo.bar-017da09a-734f-11e5-8136-68a86d0d36b6"
    }]
}

查询服务

curl http://127.0.0.1:8081/registry?service=go.micro.srv.example
{
    "name":"go.micro.srv.example",
    "nodes":[{
        "id":"go.micro.srv.example-c5718d29-da2a-11e4-be11-68a86d0d36b6",
        "address":"[::]","port":60728
    }]
}

Handlers

RPC

使用 json 或 protobuf 查询微服务. 对后端的请求将使用 go-micro RPC 客户端进行.

使用 /[service]/[method]

所调用服务的默认名称空间是 go.micro.srv

curl -H 'Content-Type: application/json' -d '{"name": "John"}' http://127.0.0.1:8081/example/call

使用 /rpc 端口

curl -d 'service=go.micro.srv.example'
    -d 'method=Example.Call'
    -d 'request={"name": "John"}' http://127.0.0.1:8081/rpc

Proxy

与 api 和 web 服务器一样, sidecar 可以提供完整的 http 代理.

在命令行上启用代理处理程序.

micro sidecar --handler=proxy

URL 路径中的第一个元素将与名称空间一起用作要路由到的服务.

请求映射

URL 路径映射与 Micro API 相同

URL 的映射如下:

Path Service Method
/foo/bar go.micro.srv.foo Foo.Bar
/foo/bar/baz go.micro.srv.foo Bar.Baz
/foo/bar/baz/cat go.micro.srv.foo.bar Baz.Cat

版本化的 API URL 可以很容易地映射到服务名称:

Path Service Method
/foo/bar go.micro.srv.foo Foo.Bar
/v1/foo/bar go.micro.srv.v1.foo Foo.Bar
/v1/foo/bar/baz go.micro.srv.v1.foo Bar.Baz
/v2/foo/bar go.micro.srv.v2.foo Foo.Bar
/v2/foo/bar/baz go.micro.srv.v2.foo Bar.Baz

事件

发布

curl -XPOST
        -H "Timestamp: 1499951537"
        -d "Hello World!"
        "http://localhost:8081/broker?topic=foo"

订阅

conn, _, _ := websocket.DefaultDialer.Dial("ws://127.0.0.1:8081/broker?topic=foo", make(http.Header))

// optionally specify "queue=[queue name]" param to distribute traffic amongst subscribers
// websocket.DefaultDialer.Dial("ws://127.0.0.1:8081/broker?topic=foo&queue=group-1", make(http.Header))

for {
    // Read message
    _, p, err := conn.ReadMessage()
    if err != nil {
        return
    }

    // Unmarshal into broker.Message
    var msg *broker.Message
    json.Unmarshal(p, &msg)

    // Print message body
    fmt.Println(msg.Body)
}

CLI代理

sidecar 还可以充当 CLI 访问远程环境的代理.

$ micro --proxy_address=127.0.0.1:8081 list services
go.micro.srv.greeter

统计仪表板

通过 --enable_stats 标志启用统计信息显示板. 它将暴露在 /stats 上.

micro --enable_stats sidecar

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
taadis
讨论数量: 0
发起讨论 只看当前版本


暂无话题~