GT server and GT client connection pools add support for QUIC, which is compatible with existing TCP protocols and implements certain intelligent switching policies #1
The connection between GT server and GT client is currently based on the TCP protocol. In order to improve the performance in long distance, high latency and high packet loss scenarios (mainly multinational scenarios), it is necessary to add support for the QUIC protocol based connection method and to consider supporting the BBR congestion control algorithm; and to consider adding some intelligent switching strategies to improve the user experience.
Project output requirements
Design and implementation of additional connection methods that support the QUIC protocol, with support for BBR congestion control algorithms
Design and implement intelligent switching strategies for multiple connection methods in different scenarios to improve transmission efficiency
阅读论文《WiseTrans: Adaptive Transport Protocol Selection for Mobile Web Service》,关注QUIC和TCP在不同网络条件下的性能差异。
2、下周计划
阅读并测试源码,找出并分析与“GT server 与 GT client 之间建立TCP连接”的相关函数;
学习BBR拥塞控制算法。
Development schedule (7.1-7.9)
This week's progress
Read the source code of the GT project, mainly focusing on the startup process and functional dependencies of client/client.go and server/sever.go;
Read the paper "WiseTrans: Adaptive Transport Protocol Selection for Mobile Web Service", pay attention to the performance difference between QUIC and TCP under different network conditions.
Next week plan
Read and test the source code, find out and analyze the functions related to "establishing a TCP connection between GT server and GT client";
Comb through the code of GT project with Client-Server to build connection pool, find out the key functions and analyse the logic. Mainly focus on the c.connectLoop()->connect()->initConn()->dialFn function chain of the Client side, on the listen()->acceptLoop()->handle()->handleTunnel() function chain of the Server side, and the MagicNumber's role in differentiating traffic;
Learn about the BBR congestion control algorithm and reading the paper "BBR: Congestion-Based Congestion Control" that proposed the BBR algorithm. Test the throughput of Cubic and BBR under different conditions in Linux using iperf3. Find that BBR has a significant effect in long fat networks (large bandwidth delay product and high packet loss).
Next week plan
Research various open-source implementations of the QUIC protocol, compare and select the most suitable QUIC project;
Test the role of related functions and try to embed the QUIC protocol into the GT project.
Investigate various open source implementations of QUIC, focusing on quic-go (https://github.com/quic-go/quic-go), msquic (https://github.com/microsoft/msquic) and quiche (https://github.com/google/quiche), because these three quic projects have maintained high-frequency maintenance. quic-go only supports the cubic congestion control algorithm (it seems that the bbr algorithm is not planned to be added in the issue), and both msquic and quiche support bbr;
Try to find the key functions, because I am familiar with quic-go and the function interface corresponds, so try to use quic-go first to make gt support quic, and then choose to use cgo to replace quiche/msquic according to the situation, or add bbr support for quic-go myself.
Next week plan
Try to implement gt's support for quic based on quic-go.
Try embedding QUIC into gt. However, QUIC's IO read and write interfaces are all implemented in the stream structure, while TCP's IO interface is now in the connection structure, so a lot of modifications to the connection layer in GT need to be made, and a meeting will be held on 9.5 for discussion.
Write corresponding processing functions for QUIC in clinet.go and client/conn.go, and write corresponding processing functions for QUIC in server.go and server/conn.go.
Plan for next week
Extend the Connection structure in conn/conn.go and align it with the QUIC interface.
Implement the QuicConnection structure based on QUIC, implement the net.Conn interface, align the Connection structure requirements in conn/conn.go, and meet the function processing requirements in client/client.go.
Implement the QuicListener structure based on QUIC and implement the net.Listener interface to meet the function processing needs in server/server.go.
Meet to discuss follow-up progress plans.
Plan for next week
Improve the parsing settings of QUIC related parameters in client/config.go and server/config.go, and complete gt's support for QUIC.
Improve QUIC-related unit tests and integration tests, and update the readme.
Description
The connection between GT server and GT client is currently based on the TCP protocol. In order to improve the performance in long distance, high latency and high packet loss scenarios (mainly multinational scenarios), it is necessary to add support for the QUIC protocol based connection method and to consider supporting the BBR congestion control algorithm; and to consider adding some intelligent switching strategies to improve the user experience.
Project output requirements
Project technical requirements
Open Source Summer Official Website
GT server 与 GT client 连接池增加支持 QUIC,与现有的的 TCP 协议实现兼容及实现智能切换策略
描述
目前 GT server 与 GT client 之间的连接是基于 TCP 协议实现的,为了提高在远距离,高延迟,高丢包率场景下的传输的表现(主要是跨国场景),增加支持基于 QUIC 协议的连接方式,需要考虑支持 BBR 拥塞控制算法;并可以考虑增加一定的智能切换策略,提高用户体验。
项目产出要求
项目技术要求
开源之夏官网