Leo 是一个基于 go-kit 的微服务工具,简化了基于go-kit开发的繁琐的工作。
Leo 提供一些列 proto 插件,可以生成基于 go-kit 的 HTTP 和 gRPC 的代码。
- 模块化:基于 Go-kit, 设计时考虑了模块化,允许开发人员根据具体的使用情况选择所需的组件。
 - 传输协议无关:它支持多种传输协议(HTTP、gRPC 等),使其在不同的通信需求中具有灵活性。
 - 服务发现:Leo 和 Go-kit 提供了内置的服务发现支持,这对于微服务架构至关重要。
 - 负载均衡:包含负载均衡机制,以便在多个服务实例之间分配请求。
 - 框架本身和业务代码保持一种低耦合的状态
 - 中间件支持:一套通用的
middleware,使之与HTTP和gRPC等传输协议无关 - 仪表化:它与监控和日志记录工具集成良好,提供对服务性能和健康状况的可见性。
 - 标准化:推广最佳实践和标准化,使得维护和扩展微服务变得更容易。
 
- code generator
- 生成gRPC、Http、config、status代码。
 - 生成一套符合微服务和DDD思想的代码结构。
 
 - 服务发现
- 扩展go-kit的服务发现功能,支持多种注册中心(consul、nacos)
 
 - 流量染色
- 支持流量染色
 
 - 限流
- SlideWindow 滑动窗口限流
 - LeakyBucket 漏桶限流
 - TokenBucket 令牌桶限流
 - Redis Redis分布式限流
 - BBR 基于BBR的限流
 
 - 熔断
- google sre 熔断算法
 - hystrix 熔断器
 - sony go breaker
 
 - 负载均衡
- 扩展go-kit的负载均衡功能,支持多种负载均衡算法(随机、轮询、一致性哈希)
 
 - 超时
- 除了gRPC天然支持超时,HTTP也支持同样支持
 
 - 重试
- 支持客户端失败重试。
 
 - 配置
- 支持从多种配置源(consul、nacos、环境变量、文件)获取配置
 - 支持监听配置变化,支持配置热加载
 - protobuf 定义配置格式,严格控制配置格式
 
 - 状态
- 基于 googleapi 错误规范实现,使用简单的协议无关错误模型,这使我们能够在不同的API,API协议(如gRPC或HTTP)以及错误上下文(例如,异步,批处理或工作流错误)中获得一致的体验。
 
 - 元数据
- Leo提供了一个元数据支持,支持跨通信方式传递元数据。
 
 - 健康检查
- gRPC和HTTP都支持健康检查
 - 支持自定义其他系统(比如redis、mysql等)的健康检查
 
 - 日志
- go-kit 的日志功能
 
 - 监控
- 使用 OpenTelemetry 提供的监控方案
 
 - 链路追踪
- 使用 OpenTelemetry 提供的链路追踪方案
 
 - 参数校验
- 支持请求参数的自动校验(github.com/envoyproxy/protoc-gen-validate)
 - 避免手动检查代码
 - 支持自定义校验器
 
 - Panic恢复
- 避免程序崩溃
 
 - JWT Auth
 - Basic Auth
 - 中间件
- 除了内置限流、校验、日志、监控等中间件,go-kit的所有中间件都支持