首页 > 编程语言 >CYarp:力压frp的C#高性能http内网反代中间件

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

时间:2024-03-26 12:22:05浏览次数:35  
标签:P99 http 中间件 P95 frp CYarp 内网

https://www.cnblogs.com/kewei/p/18095638

 

我以前开发过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 secondPercentage 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 secondPercentage 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 secondPercentage 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 secondPercentage 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 secondPercentage 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协议为应用协议的一种物联网服务平台。

标签:P99,http,中间件,P95,frp,CYarp,内网
From: https://www.cnblogs.com/chinasoft/p/18096394

相关文章

  • 详解SSL证书系列(6)了解HTTP及网络基础
    使用HTTP协议访问Web你知道当我们在网页浏览器(比如Chrome)的地址栏中输入URL时,Web网页是如何呈现的吗? Web页面当然不会凭空显示出来。根据Web浏览器地址栏中指定的URL,Web浏览器从Web服务器端获取文件资源等信息,从而显示出Web页面。像这种通过发送请求然后获取服务器资源的Web......
  • requests.exceptions.MissingSchema: Invalid URLrequests.exceptions.ConnectionErro
    代码如下,运行时出现 requests.exceptions.ConnectionError:HTTPSConnectionPool(host='www.dropbox.com',port=443):Maxretriesexceededwithurl:/s/dm3m1o0tsv9terq/pytorch_model.bin?dl=1(CausedbyNewConnectionError('<urllib3.connection.HTTPSConne......
  • OpenFeign 维护状态 和 HTTP客户端 @HttpExchange
    OpenFeign维护状态OpenFeign还在维护吗?根据提供的搜索结果,OpenFeign(SpringCloudOpenFeign)是一个由Spring官方推出的声明式服务调用与负载均衡组件。它是对Feign的二次封装,不仅继承了Feign的所有功能,还增加了对SpringMVC注解的支持。Feign本身在2019年由Netflix公司......
  • 【HTTP完全注解】内容协商
    内容协商在HTTP协议中,内容协商是一种用于为同一URI提供资源不同的表示形式(如语言、字符集、媒体类型等)的机制,该机制能够让用户获得最合适的资源表现内容。例如对于中文用户请求某一URI内容,服务器将返回该资源的中文形式;而英语用户请求同一资源时,则会返回该资源的英文形式......
  • 【HTTP完全注解】条件请求
    条件请求还记得范围请求以及缓存中所介绍的基于时间/版本的验证请求吗?这些能够携带某些条件发起的请求,被称为条件请求。条件请求是HTTP的一种内容协商机制,该机制通过在请求中包含特定的标头来告知服务器仅在某些条件得到满足时才响应。这类请求可以用来验证缓存的有效性,省......
  • 【HTTP完全注解】范围请求
    范围请求范围请求是HTTP的一种内容协商机制,该机制允许客户端只请求资源的部分内容。范围请求在传送大的媒体文件,或者与文件下载的断点续传功能搭配使用时非常有用。范围请求的工作流程范围请求通过在HTTP请求标头Range中表明需要请求的部分资源的字节范围,服务器收到请求......
  • CYarp:力压frp的C#高性能http内网反代中间件
    我以前开发过HttpMouse的http内网反代中间件,但由于当时的知识点与设计水平受限,所以把它下马了。随着自身又遇到http内网反代的需求,在frp不能满足我需求情况下,我又启动了一个叫CYarp的http内网反代项目,这次它的设计完成度是相当高的。开源仓库地址:https://github.com/xljiulang/CY......
  • 如何在内网访问其他电脑?
    网络的发展使得人与人之间的通信变得更加便捷,而在公司或者家庭中,也经常遇到需要内网访问其他电脑的需求。内网访问其他电脑可以实现在局域网内部进行数据共享、文件传输、远程控制等操作,提高工作效率和便利性。本文将介绍内网访问其他电脑的基本原理和常用的实现方法。天联......
  • 谈tcp,http,socket,rpc,grpc
    谈tcp,http,socket,rpc,grpc简介:计算机网络的五(七)层协议:物理层、数据链路层、网络层、传输层、(会话层、表示层)和应用层。tcp:是传输层协议,主要解决数据如何在网络中传输。http:是应用层协议,主要解决如何包装数据(文本信息),是建立在tcp协议之上的应用。tcp协议是以二进制数据流的形......
  • Django框架之中间件引入
    【一】中间件介绍之前我们通过给视图函数加上装饰器来判断用户是否登录,把没有登陆的用户请求跳转到登录页面。但是如果有很多的功能都需要在登录之后才能使用,那么每个功能对应的视图函数都需要加上装饰器,这样的话就略显繁琐通过django中间件就可以实现控制全局的效果【1】什......