Skip to main content

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:日志系统,提供统一的日志记录能力