FPNN一句话总结:
没有人想重复制造轮子。
但,当所有的轮都不好使的时候,怎么办?
鉴于之前的项目使用Thrift开发遇到了太多的坑,耗费大量的资源解决Thrift本身问题。
基于对公司基础架构工具的准备及技术积累,结合之前对ICE、ACE、Codra等知名RPC框架的使用经验,于是决定开发一个更适合公司业务及基础架构的RPC框架。
轮子没有最好,只有最合适。
RPC框架也一样。
支持 IPv4
支持 IPv6
支持 TCP 二进制私有协议
支持 UDP 二进制私有协议
支持可靠 UDP 链接
支持可靠/不可靠 UDP 数据混合发送
支持 HTTP 1.1 (选择性支持)
支持 WebSocket
支持 SSL/TLS
支持 msgpack 编码
支持 Json 格式
支持 可选参数
支持 不定类型参数
支持 不定长度不定类型参数
支持 接口灰度兼容
支持 TCP 二进制私有协议和 HTTP Json 格式互转
支持 Server Push
支持 异步操作
支持 同步操作
支持 Lambda 函数
支持 动态调整系统级参数
支持 动态调整框架级参数
支持 实时查看服务运行状态
支持 实时查看各参数状态
支持 failover
支持 统一 Log 汇总
支持 优雅退出
支持 统一处理异常
支持 同一端口多种协议(TCP/HTTP/WebSocket)
支持 应答提前返回
支持 应答异步返回
支持 请求响应时间统计
支持 QPS 统计
支持 慢请求统计
支持 优先执行系统内置命令
支持 AES 加密
支持 ECDH 秘钥交换
支持 128 位或 256 位秘钥
支持 IP 白名单
支持 IP 段白名单
支持 访问用户自定义接口时的加密限制
支持 访问用户自定义接口时的内网限制
在 FPNN 技术生态中,提供以下额外功能
压力测试(v1.0.0):
TCP 数据概要
同一局域网
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) |
---|---|---|---|---|---|
AWS m5.xlarge | 4 | 16 | 1000 | 49,708 | 335 |
--- | --- | --- | --- | --- | --- |
AWS m5.xlarge | 4 | 16 | 130 | 227,919 | 12,854 |
AWS m5.xlarge | 4 | 16 | 1,500 | 148,959 | 10,403 |
AWS m5.xlarge | 4 | 16 | 2,000 | 99,552 | 356 |
AWS m5.xlarge | 4 | 16 | 3,000 | 149,615 | 27,456 |
洲际传输:德国法兰克福 到 美国西部俄勒冈
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) | ping/2 (msec) |
---|---|---|---|---|---|---|
AWS m5.xlarge | 4 | 16 | 10 | 17,921 | 147,825 | 137 |
--- | --- | --- | --- | --- | ---- | --- |
AWS m5.xlarge | 4 | 16 | 190 | 338,601 | 151,772 | 139 |
AWS m5.xlarge | 4 | 16 | 700 | 339,240 | 183,541 | 136 ~ 137 |
AWS m5.xlarge | 4 | 16 | 3,200 | 312,073 | 256,980 | 139 ~ 141 |
AWS m5.xlarge | 4 | 16 | 6,000 | 299,175 | 346,927 | 136 ~ 137 |
UDP 数据概要
同一局域网
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) |
---|---|---|---|---|---|
AWS m5.xlarge | 4 | 16 | 10 | 17,628 | 199 |
--- | --- | --- | --- | --- | --- |
AWS m5.xlarge | 4 | 16 | 70 | 123,009 | 1,174 |
AWS m5.xlarge | 4 | 16 | 80 | 122,641 | 24,623 |
AWS m5.xlarge | 4 | 16 | 800 | 73,030 | 1,306 |
AWS m5.xlarge | 4 | 16 | 200 | 95,894 | 400 |
AWS m5.xlarge | 4 | 16 | 1,000 | 49,590 | 3,832 |
洲际传输:德国法兰克福 到 美国西部俄勒冈
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) | ping/2 (msec) |
---|---|---|---|---|---|---|
AWS m5.xlarge | 4 | 16 | 100 | 48,493 | 138,859 | 138 |
--- | --- | --- | --- | --- | ---- | --- |
AWS m5.xlarge | 4 | 16 | 60 | 107,528 | 139,968 | 140 |
AWS m5.xlarge | 4 | 16 | 800 | 79,503 | 139,974 | 138 ~ 139 |
海量链接(v1.0.0):
TCP 数据概要
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) |
---|---|---|---|---|---|
AWS m5.2xlarge | 8 | 32 | 2,040,000 | 81,351 | 446 |
AWS m5.2xlarge | 8 | 32 | 2,040,000 | 137,294 | 4,985 |
AWS m5.2xlarge | 8 | 32 | 2,040,000 | 179,794 | 11,345 |
UDP 数据概要
机型 | 虚拟 CPU | 内存(GB) | 链接数量 | QPS | 平均响应时间(usec) |
---|---|---|---|---|---|
AWS m5.2xlarge | 8 | 32 | 12,200 | 5,957 | 11,480 |
AWS m5.2xlarge | 8 | 32 | 19,000 | 721 | 1,857 |
具体性能介绍及更多数据请参见 FPNN 性能报告
环境需求
操作系统 | 编译器 |
---|---|
CentOS 7 | GCC/G++ 4.8.5 |
CentOS 8 | GCC/G++ 8 |
Ubuntu 20 | GCC/G++ 9 |
MacOS 11.5 | XCode/Apple clang 12 |
第三方库依赖
编译安装FPNN框架
在项目根目录下执行 make
即可。
详细可参见 FPNN 安装与集成
使用 FPNN 框架开发
请参见
注意事项 & 问题排查
注意事项请参见 FPNN 注意事项
问题排查请参见 FPNN 问题排查
最佳实践
中文文档索引