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的所有中间件都支持