我以前開發過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請求響應。
特性
- 使用高效能的kestrel做伺服器
- 使用高效能的YARP做http轉發
- 設計為asp.netcore的中介軟體,整合簡單
- 開放的服務端與客戶端互動協議
- 提供了.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安全傳輸
- 長連線建立過程和長連線的後續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協議為應用協議的一種物聯網服務平臺。