One sentence summary of FPNN:
No one wants to reinvent the wheel.
But what should you do when all the wheels don’t work?
In view of the fact that previous projects using Thrift encountered too many pitfalls, a lot of resources were spent solving the problems of Thrift itself.
Based on the preparation and technical accumulation of the company's infrastructure tools, combined with previous experience in using well-known RPC frameworks such as ICE, ACE, and Codra, we decided to develop an RPC framework that is more suitable for the company's business and infrastructure.
There is no best wheel, only the most suitable one.
The same goes for RPC frameworks.
Support IPv4
Support IPv6
Support TCP binary private protocol
Support UDP binary private protocol
Supports reliable UDP links
Support reliable/unreliable UDP data mixed sending
Support HTTP 1.1 (optional support)
Support WebSocket
Support SSL/TLS
Support msgpack encoding
Support Json format
Supports optional parameters
Support indefinite type parameters
Support variable length and variable type parameters
Support interface grayscale compatibility
Support TCP binary private protocol and HTTP Json format conversion
Support Server Push
Support asynchronous operations
Support synchronous operation
Support Lambda function
Support dynamic adjustment of system-level parameters
Support dynamic adjustment of framework-level parameters
Support real-time viewing of service running status
Support real-time viewing of each parameter status
Support failover
Support unified log summary
Support graceful exit
Support unified handling of exceptions
Support multiple protocols (TCP/HTTP/WebSocket) on the same port
Support early return of response
Supports asynchronous return of responses
Support request response time statistics
Support QPS statistics
Support slow request statistics
Supports priority execution of system built-in commands
Support AES encryption
Support ECDH key exchange
Supports 128-bit or 256-bit keys
Support IP whitelist
Support IP segment whitelist
Support encryption restrictions when accessing user-defined interfaces
Support intranet restrictions when accessing user-defined interfaces
In the FPNN technology ecosystem, the following additional functions are provided
Stress test (v1.0.0):
TCP data summary
Same LAN
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (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 |
Intercontinental transmission: Frankfurt, Germany to Oregon, Western United States
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (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 data summary
Same LAN
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (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 |
Intercontinental transmission: Frankfurt, Germany to Oregon, Western United States
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (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 |
Massive links (v1.0.0):
TCP data summary
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (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 data summary
model | virtual CPU | Memory (GB) | Number of links | QPS | Average response time (usec) |
---|---|---|---|---|---|
AWS m5.2xlarge | 8 | 32 | 12,200 | 5,957 | 11,480 |
AWS m5.2xlarge | 8 | 32 | 19,000 | 721 | 1,857 |
For specific performance introduction and more data, please refer to the FPNN performance report
environmental needs
operating system | compiler |
---|---|
CentOS 7 | GCC/G++ 4.8.5 |
CentOS 8 | GCC/G++ 8 |
Ubuntu 20 | GCC/G++ 9 |
MacOS 11.5 | XCode/Apple clang 12 |
Third-party library dependencies
Compile and install the FPNN framework
Just execute make
in the project root directory.
For details, see FPNN installation and integration
Developed using FPNN framework
See
Notes & Troubleshooting
Please refer to FPNN Notes for precautions.
For troubleshooting, please refer to FPNN Troubleshooting
best practices
Chinese document index