参考文章
- go-kit offical example
- 官方示例
- DDD(domain drive design) 领域驱动设计
- ...过度设计, 不宜用作入门
- 一、go 语言编写 grpc 微服务实例
- 系列文章
- 看看概念和思路就好, 代码示例比较生硬, 而且代码质量并不高.
- Micro-services Using Go-kit: REST Endpoint
- 系列文章, 层层递进, 代码详尽, 推荐
- 限流, 断路器, 监控, 日志等详细的解决方案.
- opencensus-gokit-example
- 一个完整的项目, 涉及到go-kit的多种组件
- go-kit微服务系列目录
- 系列文章
- 条理分明, 概念解释得很清晰
- 代码质量很高, 结构与风格与参考文章3相似
本仓库中示例06.gokit-playground-example是最完整的系列示例, 取自示例05.gokit系列文章(译), 但是添加了很多注释, 比较复杂的示例也做了拆分, 理解起来会更容易.
-
06.gokit-playground-example: 05.gokit系列文章(译) 部分的示例代码
- 01.gokit-lorem-restful: 按照 go-kit 模式提供的 lorem 服务.
- 02.gokit-lorem-restful-ServerErrorEncoder: 在01.gokit-lorem-restful的基础上, 添加对错误信息json化的操作.
- 03.gokit-lorem-restful-ServerErrorLogger: 在01.gokit-lorem-restful的基础上, 添加对错误信息日志打印的操作.
- 04.gokit-lorem-restful-client: 在01.gokit-lorem-restful的基础上, 添加 client 服务, 作为微服务中的一环进行通信.
- 05.gokit-lorem-restful-lb: 在04.gokit-lorem-restful-client的基础上, 对 server 服务做负载均衡, 但是没有使用服务发现, 在启动 client 服务时需要把 server 服务的服务列表传入.
- 11.gokit-lorem-grpc: 在04.gokit-lorem-restful-client的基础上, 进行 grpc 改造, client 与 server 间通信使用 grpc 而非 restful 形式.
- 21.gokit-lorem-logging: 在01.gokit-lorem-restful的基础上, 添加 go-kit 内置的日志中间件.
- 31.gokit-lorem-ratelimit: 在01.gokit-lorem-restful的基础上, 添加限流机制, 使用
golang.org/x/time/rate
限流器. - 32.gokit-lorem-ratelimit-juju: 在01.gokit-lorem-restful的基础上, 添加限流机制, 使用
juju/ratelimit
限流器. - 51.gokit-lorem-monitor: 在01.gokit-lorem-restful的基础上, 添加监控操作, 使用
prometheus
进行日志埋点, 使用grafana
查看. - 61.gokit-lorem-consul: 在04.gokit-lorem-restful-client的基础上, 使用
consul
中间件做负载均衡与服务发现. - 62.gokit-lorem-consul-client: 在04.gokit-lorem-restful-client的基础上, 使用
consul
中间件做负载均衡与服务发现. 在本例中, client 的角色类似于微服务中的 gateway, 将来自用户的请求转发给后端 server 服务. - 61.gokit-lorem-consul: 在04.gokit-lorem-restful-client的基础上, 使用
etcd
中间件做负载均衡与服务发现. - 71.gokit-lorem-hystrix: 在04.gokit-lorem-restful-client的基础上, 集成
hystrix-go/hystrix
断路器工具.
-
07.gokit链路追踪: 05.gokit系列文章(译) 没有涉及到链路追踪的话题, 这里单独列出.
- 01.gokit-lorem-single-tracing: 在04.gokit-lorem-restful-client的基础上, 使用
zipkin
中间件添加链路追踪机制. - 02.gokit-lorem-tracing-consul: 在上例基础上, 继续添加 consul 完成负载均衡与服务发现功能.
- 01.gokit-lorem-single-tracing: 在04.gokit-lorem-restful-client的基础上, 使用
Endpoint类似于web服务的url接口, 一个endpoint表示一个路由接口.
但是Endpoint不能直接对外提供服务, 需要通过Transport转换成http/grpc类型的接口才可以.
2018-09-06
在完成第4个demo时意识到go-kit貌似什么都没有做, 没有gateway(入口路由服务), 微服务间通信为原生grpc, http处理为原生net/http库. ta就像js里的backbone
, 定义好一些核心概念, 组件如何定义, 组件间如何配合, 数据接口如何定义等完全不管...
只有一点, 通过makeXXXEndpoint
及encode
, decode
几个函数后, 我们写的业务逻辑可以同时生成http/grpc两种接口, 只要选择不同的transport进行NewServer
操作即可, 但这grpc-ecosystem
包也能完成.
我已实在想不出继续用ta的理由了, 接下来尝试ta的middleware和监控什么的, 但下一步的重点会放在go-micro
上.