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这个看文章说有 ...
随机推荐
- vue3的宏到底是什么东西?
前言 从vue3开始vue引入了宏,比如defineProps.defineEmits等.我们每天写vue代码时都会使用到这些宏,但是你有没有思考过vue中的宏到底是什么?为什么这些宏不需要手动从vu ...
- shell脚本实现进度条程序
1.实现效果 2.shell脚本 #!/bin/bash i=0 bar='' index=0 arr=( "|" "/" "-" &quo ...
- IDEA git分支回退指定的历史版本
https://blog.csdn.net/woshi1226a/article/details/86664159
- 标准运算符替代函数之operator模块
# 官网参考示例地址 https://docs.python.org/zh-cn/3/library/operator.html # operator模块提供了一套与python的内置的运算符对应的高 ...
- 【LeetCode贪心#10】划分字母区间(有涉及hash数组的使用)
划分字母区间 力扣题目链接(opens new window) 字符串 S 由小写字母组成.我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中.返回一个表示每个字符串片段的长度的列表 ...
- 第一百零四篇:DOM事件流
好家伙,JS基础接着学, 1.事件流 页面哪个部分拥有特定的事件? 可以把页面想象成一个同心圆, 当你戳了其中的一点,其实你同时戳中了很多个圆 当你点击一个页面中的按钮,实际上你同时点击了这个 ...
- 【Azure 事件中心】从Azure Event Hub中消费数据,如何查看当前消费客户端消费数据的Offset和SequenceNumber呢(消息偏移量和序列号)?
问题描述 当通过Azure Event Hub SDK消费Event Hub中的消息时,必须指定一个Storage Account(存储账号)用于保存 Checkpoint (检查点). 比如在C#代 ...
- 【Azure 环境】如果Azure中的某一个资源被删除后是否可以查看到删除的记录呢?如Resource Group
问题描述 当一个资源从Azure中删除后,是否有地方可以查看到这些操作的记录呢?如操作人,操作时间等. 问题解答 可以的.通过 Azure订阅页面的活动日志,可以查看所有对订阅下资源的操作记录,包含D ...
- Java 四种不同的权限修饰
private 私有属性 只在同一个包下 同一个类中可以调用 同一个包下,不同的类中,可以调用 缺省,保护(protected),公共(public)可以调用, 不同的包下的类中,继承关系,可以调用 ...
- Java 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束
1 /** 2 * 从键盘输入不确定的整数 并判断读入的整数和负数的个数,输入0时候结束 3 * 4 */ 5 6 Scanner scan = new Scanner(System.in); 7 8 ...