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

Web frameworks

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,你会有一个有意思的框架。

框架

Router

Bot

这几张图片诠释了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 后续内容更精彩!!

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐