首页 > 其他分享 >1.【go-kit教程】go-kit初识

1.【go-kit教程】go-kit初识

时间:2023-02-25 22:13:07浏览次数:46  
标签:Endpoint 服务 Service kit 组件 初识 go

go-kit简介

  • go-kit 本身不是一个框架,而是一套微服务工具集,是框架的底层,可以用go-kit 做适应自己平台的框架。它的设计目标是帮助开发者构建健壮、可维护、可测试的分布式系统。go-kit 的核心理念是通过可组合的组件来实现微服务的功能,这些组件包括服务发现、负载均衡、请求追踪、日志记录、监控等等。go-kit还提供了一种基于中间件的设计模式,使开发人员能够构建可插拔的组件,从而更容易地构建和维护可扩展的分布式应用程序。

  • go-kit 的设计目标是简单、灵活、可扩展。它提供了一些基本的组件,如服务端点(endpoint)、传输层(transport)、服务发现、负载均衡等,这些组件可以通过接口进行组合,并且可以根据实际需求进行扩展和定制。

  • go-kit采用了微服务架构的理念,将应用程序分解为一组小型服务,每个服务都具有单独的职责。每个服务都是独立的,可以独立部署、升级和扩展。通过这种方式,go-kit可以帮助开发人员更容易地构建可扩展的应用程序。

  • github仓库:https://github.com/go-kit/kit

  • 官网店址:https://gokit.io/

go-kit架构设计

  • 由于其灵活的设计, 通过使用 go-kit,开发者可以快速地构建出符合分布式系统要求的微服务应用,同时也能够方便地对已有的应用进行升级和维护。

    gokit onion

  • go-kit 采用三层架构方式,自上而下分别为:Transport、Endpoint、Service。

    日后开发应严格遵守此规范

    1. Transport层主要负责与传输协议HTTP,GRPC,THRIFT等相关的逻辑;
    2. Endpoint层主要负责request/response格式的转换,以及公用拦截器相关的逻辑;Endpoint 是 go-kit 中最重要的组件之一,它用于封装服务操作的输入和输出。通过 Endpoint,开发者可以将一个服务拆分成多个小的可复用的操作,这些操作可以独立地进行测试、扩展和部署。
    3. Service层则专注于业务逻辑,就是我们的业务类、接口等相关信息存放。Service 是业务逻辑的实现,它是 Endpoint 的实现者。Service 负责处理具体的业务逻辑,通过 Endpoint 将其暴露出去供其他服务进行调用。
                    +-----------+
        Request -->| Transport |--> Endpoint --> Service
                    +-----------+
                        ^
                        |
        Response <------+
    
    // 求从 Transport 组件进入,然后被传递到 Endpoint 组件。Endpoint 组件封装了服务操作的输入和输出,通过调用 Service 组件来处理具体的业务逻辑,并将结果返回给 Endpoint 组件。最后,Endpoint 组件将结果返回给 Transport 组件,由 Transport 组件发送回客户端。
    
  • 这种架构设计的好处是,Transport 组件和 Service 组件可以独立地开发和部署,而 Endpoint 组件则充当了它们之间的桥梁,负责将请求和响应进行转换和协调。同时,Endpoint 组件的封装性使得它可以在不同的 Transport 组件之间进行转换,从而使得服务的调用方更加灵活。

go-kit构建微服务步骤

  1. 定义业务逻辑和数据模型:定义服务接口和数据模型,包括请求和响应数据结构。
  2. 实现服务:根据定义的接口和数据模型实现服务,包括服务接口和业务逻辑实现。
  3. 创建 endpoint:创建 endpoint 对象,将业务逻辑封装成 endpoint。
  4. 创建 transport:创建 transport 对象,处理网络传输,包括编码、解码和传输数据。
  5. 创建服务实例:创建服务实例,将 endpoint 和 transport 组装起来,创建服务实例。
  6. 创建中间件:创建中间件对象,实现一些通用的逻辑,例如认证、授权、限流、熔断、追踪、日志等。
  7. 组装中间件和服务实例:将中间件对象和服务实例组装起来,形成一个完整的服务实例。

go-kit和go-micro的区别

  1. 设计思想不同:go-kit 的设计思想主要是基于 Go 语言的原生语言和库,它的组件和工具更加灵活和可扩展;而 go-micro 的设计思想主要是基于插件式架构。
  2. 组件数量不同:go-kit 的组件数量相对较少,主要包括 Endpoint、Transport、Service、Middleware、Circuit Breaker、Service Discovery 和 Load Balancer 等;而 go-micro 的组件数量较多,主要包括服务注册中心、负载均衡、消息队列、反向代理、数据存储、服务监控等。
  3. 接入方式不同:go-kit 的接入方式主要是手工编写代码,开发者需要手动实现 Endpoint、Transport、Service 等组件;而 go-micro 的接入方式主要是使用插件,开发者只需要选择需要的插件即可完成微服务的开发和部署。
  4. 性能表现不同:由于 go-kit 的设计思想更加注重灵活性和可扩展性,因此它在性能方面可能会更好;而 go-micro 的设计思想更加注重易用性和部署性,因此它在开发效率方面可能会更好。

标签:Endpoint,服务,Service,kit,组件,初识,go
From: https://www.cnblogs.com/bigox/p/17155557.html

相关文章

  • 9.【go-kit教程】go-kit集成Prometheus
    在Gokit中集成Prometheus进行API监控可以帮助开发人员更好地了解系统的性能和行为,提高系统的可观察性和可靠性。下面是一个简单的示例,演示如何在Gokit中集成P......
  • 使用Go语言编写邮件内容解析功能
    保存为readmsg.gopackagemainimport("bytes""database/sql""encoding/base64""encoding/json""io""io/ioutil""log""mime"......
  • 【学无止境】初识 ChatGPT
    最近ChatGPT很火,那么今天就来试一下。ChatGPI注册首先,用梯子“合理上网”。墙内ChatGPT不提供服务。其次,租一个可以接受国外短信的号码,常用的网站是这个:https://sms-......
  • Chrome插件:Chrome-Sync-Helper 使用google搜索
    解决墙的原因,无法使用google搜索找到插件 https://www.zhihu.com/question/387679779/answer/2822702411?utm_campaign=shareopn&utm_medium=social&utm_oi=7318067228......
  • 已解决(MongoDB安装报错)Service ‘MongoDB Server (MongoDB)’ (MongoDB) failed tosta
     报错问题粉丝群里面的一个小伙伴想安装MongoDB但是发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug......
  • Go从入门到精通——常见报错: C compiler "gcc" not found: exec: "gcc": executable f
    常见报错:Ccompiler"gcc"notfound:exec:"gcc":executablefilenotfoundin%PATH%一、背景操作系统:windows10专业版Go版本:goversiongo1.19.4windows/a......
  • go依赖管理
    原始依赖管理方式1.Go语言可以利用本身的能力做基础依赖管理,几个重要的组件包括GOPATH工作目录,Go命令工具(getinstallbuild)等,通过goget下载依赖包的最新版本到GOPATH......
  • 2023最新MongoDB规范
    前言MongoDB是非关系型数据库的典型代表,DB-EnginesRanking数据显示,近年来,MongoDB在NoSQL领域一直独占鳌头。MongoDB是为快速开发互联网应用而设计的数据库系统,其数据模......
  • Go语言中密码加密校验
    使用go自带的库bcryptbcrypt是不可逆的加密算法,无法通过解密密文得到明文。bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是......
  • golang中的close函数
    close函数是用于关闭通道的。官方解释(摘自close函数源代码注释):Theclosebuilt-infunctionclosesachannel,whichmustbeeitherbidirectionalorsend-only.Itsho......