fyerrpc
框架概述
fyerrpc 是一个使用 go 语言开发的轻量级、高性能的RPC框架,旨在简化分布式系统中服务间通信的复杂性。该框架专注于提供简洁易用的 API,同时保持高性能和可靠性,帮助开发者快速构建微服务架构。
fyerrpc 支持现代分布式系统所需的各种高级特性,如服务发现、负载均衡和故障转移等。
核心特性
简洁的 API 设计
fyerrpc提供了直观且易于理解的 API ,让开发者能够快速上手并集成到自己的系统中:
- 简单的服务定义:通过 Go 结构体方法字段定义服务,无需编写复杂的 IDL 文件
- 直观的客户端调用:提供 RPC 代理实现,支持类似本地函数调用的方式进行远程调用
- 灵活的配置选项:通过选项模式提供丰富而灵活的配置能力
高效的通信协议
- 自定义二进制协议:优化的二进制协议,减少网络传输数据量
- 多种序列化支持:内置 JSON 和 Protobuf 支持,可扩展其他格式
- 连接池管理:智能管理客户端连接,提高资源利用率
服务治理能力
- 服务注册与发现:支持使用 etcd 作为服务注册中心,自动注册和发现服务实例
- 多种负载均衡策略:支持随机、轮询、最快响应等多种负载均衡算法
- 服务分组:支持将服务实例按不同维度分组,实现灰度发布和 A/B 测试
可靠性保障
- 故障转移:在服务实例故障时自动切换到健康实例
- 熔断机制:当服务持续故障时自动启动熔断保护,避免雪崩效应
- 重试策略:灵活的重试机制,支持指数退避、抖动等高级特性
可观测性
- 内置指标收集:收集请求延迟、成功率等关键指标
- Prometheus 集成:支持 Prometheus 监控系统集成,实现可视化监控
- 结构化日志:提供详细的操作日志,便于问题排查
架构设计
fyerrpc 采用模块化设计,各个组件职责清晰,便于扩展。整体架构如下:
+-------------------+ +-------------------+
| 客户端 | | 服务端 |
| | | |
| +-----------+ | | +-----------+ |
| | Proxy | | | | Server | |
| +-----------+ | | +-----------+ |
| | | | | |
| +-----------+ | | +-----------+ |
| | 连接池管理 | | 网络通信 | | 服务注册 | |
| +-----------+ | <---------------> | +-----------+ |
| | | | | |
| +-----------+ | | +-----------+ |
| | 负载均衡 | | | | 请求处理 | |
| +-----------+ | | +-----------+ |
| | | | | |
| +-----------+ | | +-----------+ |
| | 故障转移 | | | | 反射调用 | |
| +-----------+ | | +-----------+ |
+-------------------+ +-------------------+
| |
| |
v v
+-------------------+ +-------------------+
| 服务发现 | | 注册中心 |
+-------------------+ +-------------------+
核心模块介绍
API 层 (api/)
API 层提供了框架的主要接口,包括:
- Server:服务端接口,用于注册和启动 RPC 服务
- Client:客户端接口,用于调用远程服务
- Service:服务定义接口,用于描述服务信息
RPC 核心 (rpc/)
实现了 RPC 的核心功能:
- Client:客户端实现,处理远程调用
- Server:服务器实现,接收和分发请求
- Connection:连接管理,处理底层通信
- Pool:连接池,优化客户端资源使用
- Proxy:动态代理,简化客户端调用
协议层 (protocol/)
定义和实现了通信协议:
- Message:消息定义,包括头部和消息体
- Codec:编解码实现,支持 JSON 和 Protobuf
- Header:协议头部定义,包含元数据和路由信息
服务发现 (discovery/)
负责服务实例的发现和选择:
- Discovery:服务发现接口和实现
- Resolver:服务解析器,维护服务实例列表
- LoadBalancer:负载均衡器,选择合适的服务实例
集群管理 (cluster/)
提供集群相关功能:
- Selector:服务选择器,基于不同策略选择服务
- Group:分组管理,支持服务分组
- Failover:故障转移,处理服务故障场景
注册中心 (registry/)
管理服务注册和发现:
- Registry:注册中心接口
- etcd:基于 etcd 的注册中心实现
工具 (utils/)
提供各种辅助功能:
- Reflection:反射工具,用于服务方法的解析和调用
- Logging:日志系统,提供统一的日志记录能力