Go-Kit
最近学习Golang中各种服务器框架,分别学习了Gin, Beego,后来有Hprose,gRPC。直到研究微服务时,才发现了这个牛叉的东东。有很多优秀的开源框架都是基于Go-Kit来做的。 Go-Kit的设计是借鉴了很多其他优秀的项目做出来。
与Go-Kit相关项目
Projects with a ★ have had particular influence on Go kit’s design (or vice-versa).
Service frameworks
- gizmo, a microservice toolkit from The New York Times ★
- go-micro, a microservices client/server library ★
- gotalk, async peer communication protocol & library
- Kite, a micro-service framework
- gocircuit, dynamic cloud orchestration
Individual components
- afex/hystrix-go, client-side latency and fault tolerance library
- armon/go-metrics, library for exporting performance and runtime metrics to external metrics systems
- codahale/lunk, structured logging in the style of Google’s Dapper or Twitter’s Zipkin
- eapache/go-resiliency, resiliency patterns
- sasbury/logging, a tagged style of logging
- grpc/grpc-go, HTTP/2 based RPC
- inconshreveable/log15, simple, powerful logging for Go ★
- mailgun/vulcand, programmatic load balancer backed by etcd
- mattheath/phosphor, distributed system tracing
- pivotal-golang/lager, an opinionated logging library
- rubyist/circuitbreaker, circuit breaker library
- Sirupsen/logrus, structured, pluggable logging for Go ★
- sourcegraph/appdash, application tracing system based on Google’s Dapper
- spacemonkeygo/monitor, data collection, monitoring, instrumentation, and Zipkin client library
- streadway/handy, net/http handler filters
- vitess/rpcplus, package rpc + context.Context
- gdamore/mangos, nanomsg implementation in pure Go
Web frameworks
- Gorilla
- Gin
- Negroni
- Goji
- Martini
- Beego
- Revel (considered harmful)
Go-Micro
Go-Micro是基于Go-Kit来做的,并且被它强力推荐的一套微服务框架。它集合了服务发现、Web、API、CLI、Bot、Slack等功能与一体,有N多插件方便其他RPC或者通信协议与之集成。几乎可以说,有它在手,别无它求! 哈哈哈,有点过了,但确实是很全面,把微服务可能遇到的问题都考虑全了,值得拥有!
Micro vs Go-Kit
这个问题出现了很多。micro和go-kit有什么区别?
- Go-kit将自己描述为微服务的标准库。像Go一样,go-kit为您提供可用于构建应用程序的各种包。Go-kit是您想要完全控制您如何定义服务的理想选择。
- Go-micro是微服务的可插拔RPC框架。这是一个有意思的框架,它尝试简化分布式系统的通信方面,因此您可以专注于业务逻辑本身。Go-micro是您想要快速启动和运行的好地方,同时拥有可插拔的功能,可以在没有代码更改的情况下切换基础架构。
- Micro是一个微服务工具包。这就像一个微服务的瑞士军刀,它搭载在go-micro上,提供传统的入口点,如http api网关,web ui,cli,slack bot等。Micro使用工具来指导您的架构中的关注点的逻辑分离,推动您为公共API创建一个API层的微服务器,并为web UI单独创建一个WEB层的微服务器。
- 使用go-kit,您需要完全控制。使用go-micro,你会有一个有意思的框架。
![05-GoMicro资源_第2张图片](http://img.e-com-net.com/image/info8/9e83d52f7ea84223acb939a2ab8a0eeb.jpg)
![05-GoMicro资源_第3张图片](http://img.e-com-net.com/image/info8/a9e9322babd54f04b838dc3a2e244396.jpg)
这几张图片诠释了Micro的几大特色功能。
特征
以微型摘要方式分析系统的细节。以下是主要功能。
• 服务发现 - 应用程序会自动注册服务发现,以便他们可以找到对方。
• 负载平衡 - 智能客户端负载平衡用于平衡服务实例之间的请求。
• 同步通信 - 提供请求响应作为双向流传输层。
• 异步通信 - 微服务应该促进事件驱动的架构。发布和订阅语义被内置。
• 消息编码 - 微服务可以以多种编码格式对请求进行编码,并根据Content-Type头进行无缝解码。
• RPC客户端/服务器 - 客户端和服务器利用上述功能,并为构建微服务提供一个干净的简单界面。
默认插件
默认插件如下
• Consul或多播DNS用于服务发现
• 随机散列客户端负载均衡
• 用于消息编码的JSON-RPC和PROTO-RPC
• 用于通信的HTTP
核心组件
Registry
注册表提供了一个服务发现机制来将名称解析为地址。它可以由领事等等支持,zookeeper,dns,八卦等。服务应该在启动时注册使用注册表,并在关机时注销。服务可以选择性地提供一个到期TTL和重新注册一个间隔,以确保活泼,并且该服务被清理,如果它死亡。
Selector
选择器是建立在注册表上的负载平衡抽象。它允许使用过滤器功能“过滤”服务,并使用诸如随机,roundrobin,leastconn等的算法选择“选择”。客户端在请求时利用选择器。客户端将使用选择器而不是注册表,因为它提供了内置的负载平衡机制。
Transport
传输是服务之间的同步请求/响应通信的接口。它类似于golang网络包,但提供了更高级别的抽象,这使我们能够切换通信机制,例如http,rabbitmq,websockets,NATS。运输还支持双向流式传输。这对于客户端推送到服务器是强大的。
Broker
代理为消息代理提供异步发送/子通信的接口。这是事件驱动架构和微服务的基本要求之一。默认情况下,我们使用收件箱样式来指向HTTP系统,以最小化开始所需的依赖关系数量。然而,在插件中可以使用许多消息代理程序,例如RabbitMQ,NATS,NSQ,Google Cloud Pub Sub。
Codec
编解码器用于在通过电线传输信息之前对消息进行编码和解码。这可能是json,protobuf,bson,msgpack等。与大多数其他编解码器不同的是,我们实际上也支持这里的RPC格式。所以我们有JSON-RPC,PROTO-RPC,BSON-RPC等。它将编码从客户端/服务器分离,并提供了集成其他系统(如gRPC,钒等)的强大方法。
Server
服务器是编写服务的构建块。在这里,您可以命名您的服务,注册请求处理程序,添加中间件等。该服务构建在上述包上,以提供统一的服务请求接口。内置服务器是一个RPC系统。在将来还有其他的实现。服务器还允许您定义多个编解码器来提供不同的编码消息。
Client
客户端提供了一个接口来对服务进行请求。再次像服务器,它建立在其他软件包上,以提供统一的界面,通过使用注册表的名称查找服务,使用选择器进行负载平衡,使用代理使用传输和异步消息的同步请求。
上述组件组成了最顶层的micro service。
我很喜欢这个小东西,O(∩_∩)O 后续内容更精彩!!