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请求响应。
特性
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安全传输
- 长连接建立过程和长连接的后续Stream
- 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协议为应用协议的一种物联网服务平台。
CYarp:力压frp的C#高性能http内网反代中间件的更多相关文章
- 使用阿里云服务器配置frp实现Windows系统RDP内网穿透
1.frp服务器采用阿里云ecs的centos7.5系统,客户端是台windows10的系统,做一个RDP服务的内网穿透用. 2.首先下载frp到服务器(链接:https://github.com/f ...
- 1.使用frp穿透内网
1.前因后果 1.1弃用ngrok 为节约服务器成本,花了500多块买了一个华为云得1G 1核心 5M得云服务器.然后用ngrok来穿透内网.一直用得还 但是今天在弄nginx得时候发现 ngrok ...
- [笔记] 使用frp从外网访问内网
之前尝试过otunnel,也记录过使用方法,见[笔记] 使用otunnel从外网访问内网,但是用了几天发现还是不够稳定. 然后尝试frp,发现性能稳定,够用,将过程及配置分享在这里吧. 需求 内网机器 ...
- frp穿透内网使用vsftpd服务
本篇文章将会介绍如何使用frp穿透内网以及如何在centos8环境下安装和使用vsftpd,最后在公网通过frp穿透内网使用ftp. 一.内网穿透神器frp frp 是一个专注于内网穿透的高性能的反向 ...
- 【网络】内网穿透方案&FRP内网穿透实战(基础版)
目录 前言 方案 方案1:公网 方案2:第三方内网穿透软件 花生壳 cpolar 方案3:云服务器做反向代理 FRP简介 FRP资源 FRP原理 FRP配置教程之SSH 前期准备 服务器配置 下载FR ...
- 使用frp进行内网穿透
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. frp is a ...
- 使用frp工具实现内网的穿透以及配置多个ssh和web服务
frp简介 FRP 项目地址 https://github.com/fatedier/frp/blob/master/README_zh.md frp 是一个可用于内网穿透的高性能的反向代理应用,支持 ...
- 使用FRP做内网穿透
Github地址:https://github.com/fatedier/frp 什么是FRP? frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 h ...
- frp 内网穿透访问内网Web服务
ps:最近想要通过域名(公网)访问或者测试在本地搭建的 web 服务(不想在公网IP服务器上再部署个服务,也不想通过teamview等工具远程卡到爆!), 由于本地机器没有公网 IP,无法将域名解析到 ...
- frp内网穿透学习
前言 因为自己在内网,但是目标站在外网,这时候可以通过内网穿透工具,将接收到的请求转发到内网,实现在内网的msf可以控制外网的靶机. 也看了一些Ngrok,花生壳的,发现Ngrok.cc这个看文章说有 ...
随机推荐
- NC52867 Highway
题目链接 题目 题目描述 In ICPCCamp there were n towns conveniently numbered with \(1, 2, \dots, n\) connected ...
- OpenStack调度器
计算使用 nova-scheduler 服务来确定如何调度计算请求 默认配置中,调度程序会考虑以下所有条件的主机: 位于请求的可用区 (map_az_to_placement_aggregate) 放 ...
- Springboot+Bootstrap实现增删改查实战
说明 最近有朋友问我有没有Springboot+Bootstrap实现增删改查的DEMO,当时没有,现在他来了! 实现效果 代码地址 https://gitee.com/indexman/bootst ...
- Java使用ConcurrentHashMap实现简单的内存式缓存
需求说明: 实际项目中我打算把用户和组织信息放到缓存中,基于此提出以下几点需求: 1.数据存储在内存中: 2.允许以键值对的方式存储对象类数据并带有过期策略: 3.不限制内存使用,但cache也不能给 ...
- Failed to bind properties under ” to com.zaxxer.hikari.HikariDataSource
1.问题说明 今天配置spring boot多数据源,同时用到了oracle和postgresql,结果配置完毕后启动报这个错. 2.原因分析 忘记添加postgresql驱动了!!! 3.解决方案 ...
- 7zip 命令行压缩指定后缀名
接到一个需求,就是测试同学在测试软件的指定功能时,可能需要调试版本来查看输出信息,所以我们需要使用一个批处理文件来快速生成一个 debug 压缩包 7zip 给出了很多有用的命令行,我们可以使用它指定 ...
- std::async 与 std::thread 在什么时候使用比较合适
前提: C++ 11 中提供了多线程的标准库,提供了管理线程.保护共享数据.线程间同步操作.原子操作等类.多线程库对应的头文件是 #include <thread>,类名为 std::th ...
- C++检测句柄的权限
主要是依靠NtQueryObject函数,其中需要传入ObjectBasicInformation参数 PUBLIC_OBJECT_BASIC_INFORMATION结构包含可用于对象的全部信息的子集 ...
- OpenCV开发笔记(五十八):红胖子8分钟带你深入了解图像的矩(图文并茂+浅显易懂+程序源码)
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- 深入解析Python并发编程的多线程和异步编程
本文分享自华为云社区<Python并发编程探秘:多线程与异步编程的深入解析>,作者:柠檬味拥抱. 在Python编程中,多线程是一种常用的并发编程方式,它可以有效地提高程序的执行效率,特别 ...