FPNN
首发于FPNN

FPNN Technology Ecosystem 介绍

FPNN 是什么?

一个全功能轻量级RPC框架,一种协议,一套技术体系。


又有人重复制造轮子?

没有人愿意重复制造轮子。

但,当所有的轮子都不好使的时候,怎么办?


我知道,有心急的诸位现在已经在问,有应用案例吗?有大规模商用吗?

有,在后面我会一一列出。心急的可以先跳到后面,不着急的我们在继续关于 FPNN 起源的话题。


起源

2014年秋,我们基础设施团队启动了一个新的全球化项目。在团队刚组建,没有任何积累的情况下,我们根据以往的开发经验,选择了 fbThrift。不光是以前 ICE、ACE、Cobra 等 RPC 框架留下的阴影太重,更重要的原因是,fbThrift 支持 server push。

这正是我们需要的。

但一路走来,我们耗费了大量的资源来解决 fbThrift 本身的问题。十多年的经验告诉我们,为了撑起公司的业务,我们必须拥有一款适合于我们自己的RPC框架。

2015年1月中,FPNN 项目启动。


“轮子没有最好的,只有最合适的。”


功能

当我们在寻找一个合适的 RPC 框架时,我们的期望是这样的:

期望的 RPC 框架

但我们得到的往往是这样的:

过于简单的 RPC 框架

或者是这样的:

过于繁琐的 RPC 框架

我们不希望太繁琐,我们也不希望太过于简单。

于是我们定下了以下功能:


FPNN feature 列表:

协议

  • 支持 IPv4
  • 支持 IPv6
  • 支持 TCP 二进制私有协议
  • 支持 HTTP 1.0
  • 支持 WebSocket
  • 支持 msgpack 编码
  • 支持 json 格式
  • 支持 可选参数
  • 支持 不定类型参数
  • 支持 不定长度不定类型参数
  • 支持 接口灰度兼容
  • 支持 TCP 二进制私有协议和 HTTP Json 格式互转


功能

  • 支持 Server Push
  • 支持 异步操作
  • 支持 同步操作
  • 支持 Lambda 函数
  • 支持 动态调整系统级参数
  • 支持 动态调整框架级参数
  • 支持 实时查看服务运行状态
  • 支持 实时查看各参数状态
  • 支持 failover
  • 支持 统一Log汇总
  • 支持 优雅退出
  • 支持 统一处理异常
  • 支持 同一端口多种协议(TCP/HTTP/WebSocket)
  • 支持 应答提前返回
  • 支持 应答异步/延后返回
  • 支持 请求响应时间统计
  • 支持 QPS 统计
  • 支持 慢请求统计
  • 支持 优先执行系统内置命令


安全

  • 支持 AES 加密
  • 支持 ECDH 秘钥交换
  • 支持 128 位或 256 位秘钥
  • 支持 IP 白名单
  • 支持 IP 段白名单
  • 支持 访问用户自定义接口时的加密限制
  • 支持 访问用户自定义接口时的内网限制


此外,结合 FPNN 技术生态,还具备以下功能:

  • 支持 集群注册
  • 支持 集群管理
  • 支持 数据协调
  • 支持 数据同步
  • 支持 大规模分布式测试部署、监控、协调
  • 支持 FPNN 集群透明代理
  • 支持 MySQL 透明代理
  • 支持 数据行级缓存


我们希望它简单易用

FPNN 简单易用,容易上手

需要的时候足够强大

FPNN 足以满足大部分的需求

配合 FPNN 技术生态,还可以发挥出更强大的功能

FPNN 有丰富的外装(各种 FPNN 服务)

这就是 FPNN。


最新的 FPNN 功能列表,请参见:FPNN 功能列表

FPNN 的设计理念,请参见:FPNN 设计理念

FPNN 安全体系,请参见:FPNN 安全体系


稳定

我们已经有数个基于 FPNN 开发的服务,在DAU超过100万的项目中,经持续运行1年半以上,未曾重启。


性能

  • 亚马逊 AWS 4 核机器上,可达35万QPS
  • 亚马逊 AWS 8 核机器上,可达50万QPS
  • 亚马逊 AWS 4 核机器上,可达108万长链接

具体性能数据,请参见 doc 文件夹中的相关文档:FPNN 文档


FPNN 技术生态

  • 集群管理服务
    • 对等分布式集群管理系统
    • CAP 可用性优先
    • 支持网络分裂与合并
    • 支持实时变动通知
    • 支持多项目
    • 支持项目内同类服务分组
  • 数据库路由代理服务
    • MySQL 数据前端代理
    • 屏蔽所有分库分表细节。对高度复杂的分库分表操作,如同对单库单表操作
    • 支持读写/主从分离
    • 支持长链接
    • 支持链接池
    • 支持多 sharding 并发查询和汇总
  • 数据库行级缓存服务
    • 数据库前端高速缓存
    • 服务即数据源,负责数据读取与落地,无需再次操作数据库
  • 日志系统
    • 高并发高性能日志集群
    • 支持日志转发
  • 通用集群网关
    • 对外屏蔽内部所有结构拓扑
    • 支持动态模式和受限模式
    • 支持多种路由模式
  • 分布式ID生成服务
    • 分布式并发生成全局唯一 ID
  • Dispatch 服务
    • 根据服务压力,动态分配目标服务
  • 分布式测试框架及套件
    • 多点自动部署
    • 多点控制命令传递
    • 多点系统状态监控
  • 实时消息系统服务
    • 全球 220 毫秒以内消息送达
    • 中国国内 40 毫秒内消息送达
    • 并发承载能力 5000 万
    • 日均消息量 240 亿条
    • 消息处理峰值 2600 亿条/天
    • 服务可用性 99.99%
    • 全球覆盖
    • 请参见官网介绍
  • Push 服务
    • 支持 APNS
    • 支持 GCM
    • 支持批量推送
    • 支持分组/topic 推送
    • 全球覆盖


最新 FPNN 生态体系,请参见:FPNN 技术生态


应用案例 & 合作伙伴

视频直播

  • MeMe 直播
    • 台湾最热门的直播应用
    • 目前进军印度、日本市场


SLG 类游戏


模拟经营类游戏


FPNN 开源地址

highras/fpnngithub.com图标

FPNN 其他语言的 SDK 请在 HighRAS 下查找。


我们的官网:

曲率科技|HighRAS - 全球实时消息与数据服务highras.ifunplus.cn图标

文章被以下专栏收录

    FPNN 框架、FPNN 基础设施和 FPNN 技术生态的相关介绍和资讯。FPNN RPC 框架项目地址:https://github.com/highras/fpnn