CYarp:力压frp的C#高性能http内网反代中间件

我以前开发过HttpMouse的http内网反代中间件,但由于当时的知识点与设计水平受限,所以把它下马了。随着自身又遇到http内网反代的需求,在frp不能满足我需求情况下,我又启动了一个叫CYarp的http内网反代项目,这次它的设计完成度是相当高的。

开源仓库地址:https://github.com/xljiulang/CYarp

Nuget包地址:https://www.nuget.org/packages?q=cyarp

CYarp.Server做为Asp.net core 8.0平台一个http中间件,它设计目的是让开发者能基于Asp.net core平台来开发一个高性能、传输安全、身份认证和授权验证完备一个http内网反代服务器。CYarp.Server支持tcp或http/2.0作为http/1.1的传输层,使用http/2.0的多路复用能在单个tcp连接分开传输多路http请求响应。

特性

  1. 使用高性能的kestrel做服务器
  2. 使用高性能的YARP做http转发
  3. 设计为asp.netcore的中间件,集成简单
  4. 开放的服务端与客户端交互协议
  5. 提供了.NET、C/C++客户端库

CYarp没有从头开发http服务器,也没有从头开发http转发器,而是使用了使用了Asp.net core平台的kestrel服务器和YARP转发器两个高性能组件,同时根据http/1.1的upgrade机制和http/2.0的Extended CONNECT Method机制,制定了客户端与服务端的CYarp交互协议,只有十几MB内存的Linux设备,开发程师根据这个协议也很容易开发出其客户端。

性能

CYarp和frp在一台Intel(R) Xeon(R) CPU E5-2650 v2 @ 2.60GHz的CentOS Linux 7 (Core)系统机器上同时部署,压测时ab在局域网另一台机器上,压测顺序为表格上到下的参数顺序。

1个用户(10,000次)

产品 Requests per second Percentage of the requests
CYarp 446.48 P95=3 P99=3
frp_0.56.0 444.18 P95=3 P99=3

10用户(50,000次)

产品 Requests per second Percentage of the requests
CYarp 6001.57 P95=2 P99=3
frp_0.56.0 5473.53 P95=3 P99=4

20用户(100,000次)

产品 Requests per second Percentage of the requests
CYarp 8640.89 P95=3 P99=4
frp_0.56.0 5897.58 P95=5 P99=7

50用户(200,000次)

产品 Requests per second Percentage of the requests
CYarp 11864.86 P95=6 P99=8
frp_0.56.0 5222.04 P95=17 P99=29

100用户(500,000次)

产品 Requests per second Percentage of the requests
CYarp 12500.28 P95=11 P99=15
frp_0.56.0 5134.38 P95=35 P99=52

当并发用户数20或以上时,frp的RPS不再提升(反而略有下降),但CYarp的RPS还是持续上升,且P95和P99表现优异。

安全

传输安全

当CYarp.Server方使用https时,以下部分为tls安全传输

  1. 长连接建立过程和长连接的后续Stream
  2. HttpTunnel的创建过程和其后续Stream

如果目标服务httpServer的TargetUri也是https,则HttpTunnel里面的流量表现为tls in tls。

业务安全

CYarp.Server不涉及到任何业务协议,它只是一个Asp.net core中间件,Client的身份认证依赖于asp.net core平台的身份认证中间件,而http转发部分的逻辑是由开发者自行开发来决定是否要转发,涉及的授权验证逻辑由开发者自行验证。

使用场景

CYarp是http反向代理,所以Server端只需要监听一个端口,就能让千千万万个Client端连接过来。根据反代规则将移动端(用户端)的http请求转发到对应的Client端上,形成以http协议为应用协议的一种物联网服务平台。

发表评论

相关文章