刘沙河 刘沙河
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希

花开半夏,半夏花开
首页
  • Go语言基础

    • 数据类型
    • 反射
    • Go指针
  • Go语言进阶

    • go泛型
    • go条件编译
    • cgo教程
    • Go协程调度原理及GPM模型
    • Go内存管理
    • Go垃圾回收机制
    • Go语言内存对齐
  • Go语言实现原理

    • channel 实现原理
    • slice 实现原理
    • map 实现原理
    • sync.Mutex 实现原理
    • 乐观锁CAS 实现原理
    • singlefight 实现原理
  • gin框架

    • gin中间件原理
    • gin路由原理
  • gorm

    • GORM介绍和使用
    • GORM_CURD操作指南
  • go测试

    • benchmark基准测试
    • pprof 性能分析
  • python进阶

    • Numpy&Pandas
    • celery分布式任务队列
  • Django

    • Django 常见命令
    • middleware中间件
    • Django缓存系统
    • Django信号系统
    • Django REST Framework
  • Flask

    • Flask基础知识总结
    • Flask-SQLAlchemy
  • 爬虫

    • aiohttp
    • scrapy框架
  • Mysql

    • Mysql存储引擎和索引
    • MySQL主从复制
    • Mysql读写分离
    • 数据库分库分表
    • Mysql锁
    • Mysql事务和MVCC原理
    • 分库分表带来的读扩散问题
  • Redis

    • redis基础和数据类型
    • redis主从架构
    • redis哨兵架构
    • redis集群模式
    • 如何保证缓存和数据库双写一致
    • redis底层数据结构
    • redis分布式锁
  • Elasticsearch

    • es基本概念
    • es基础语法
    • es倒排索引
  • etcd

    • Go操作etcd
    • Raft原理
    • etcd分布式锁
  • kafka

    • 消息队列MQ总结
    • kafka 概述及原理
    • kafka 消费问题记录
    • 零拷贝技术
    • kafka分区规范
  • RabbitMQ

    • rabbitMQ基础
    • Go操作rabbitmq
  • RocketMQ

    • 可靠消息队列 rocketMQ
  • Http&Https

    • http&https
    • TCP和UDP
    • Ping 原理
  • RPC

    • RPC初识
    • grpc初识和实现
  • gRPC

    • grpc 初识
    • grpc 上下文 metadata
    • grpc 健康检查
    • grpc keepalive
    • grpc 命名解析
    • grpc 中间件&拦截器
    • grpc 负载均衡
    • grpc 身份认证
    • grpc 超时重试
    • grpc 链路追踪
    • grpc-gw将gRPC转RESTfu api
    • grpc-gw自定义选项
  • protobuf

    • protobuf 进阶
    • protobuf 编码原理
  • Docker

    • Docker基础
    • Docker常用命令
    • Dockerfile
    • Docker-Compose
    • Docker多阶段构建
    • Docker Config 教程
    • Docker Swarm 教程
    • Docker Stack 教程
    • Docker Buildx 教程
  • k8s

    • k8s 基础概念
    • k8s 集群架构
    • k8s 工作负载
    • Pod 网络
    • Service 网络
    • 外部接入网络
    • 一张图搞懂k8s各种pod
    • k8s 存储抽象
    • mac快速启动k8s
    • 自制申威架构k8s-reloader
  • go-kit

    • go-kit初识
    • go-kit启动http服务
    • go-kit集成gin启动服务
    • go-kit集成grpc和protobuf
    • go-kit中间件
    • go-kit服务注册发现与负载均衡
    • go-kit限流和熔断
    • go-kit链路追踪
    • go-kit集成Prometheus
  • 设计模式

    • 初识设计模式
    • 创建型模式
    • 结构型模式
    • 行为模式
  • 数据结构

    • 时间轮
    • 堆、双向链表、环形队列
    • 队列:优先队列
    • 队列:延迟队列
  • 算法

    • 递归算法
    • 枚举算法
    • 动态规划
    • 回溯算法
    • 分治算法
    • 贪心算法
    • LRU和LFU
    • 一致性哈希
  • go-kit

    • 【go-kit教程】go-kit初识
      • go-kit简介
      • go-kit架构设计
      • go-kit构建微服务步骤
      • go-kit和go-micro的区别
    • 【go-kit教程】go-kit启动http服务
    • 【go-kit教程】go-kit集成gin启动服务
    • 【go-kit教程】go-kit集成grpc和protobuf
    • 【go-kit教程】go-kit中间件
    • 【go-kit教程】go-kit服务注册发现与负载均衡
    • 【go-kit教程】go-kit限流和熔断
    • 【go-kit教程】go-kit链路追踪
    • 【go-kit教程】go-kit集成Prometheus
  • 微服务
  • go-kit
bigox
2023-02-23
目录

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

# 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 组件发送回客户端。
    
    1
    2
    3
    4
    5
    6
    7
    8
  • 这种架构设计的好处是,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 的设计思想更加注重易用性和部署性,因此它在开发效率方面可能会更好。
#Go
上次更新: 2023/05/03, 20:48:45
【go-kit教程】go-kit启动http服务

【go-kit教程】go-kit启动http服务→

最近更新
01
go与http代理
05-24
02
自制申威架构k8s-reloader
12-06
03
Docker Buildx 教程
12-01
更多文章>
Theme by Vdoing | Copyright © 2020-2024 小刘扎扎 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式