GN⁺: Speedbump - 가변 레이턴시를 지원하는 TCP 프록시
(github.com/kffl)- Go 언어로 작성된 TCP 프록시로, 다양한 가변 네트워크 지연 시간을 시뮬레이션 가능
기본 사용 예시
- 포트 2000에서 리스닝하는 새 인스턴스를 생성하여 TCP 트래픽을 localhost:80으로 프록시하고, 기본 지연 시간은 100ms, 사인파 진폭은 100ms(최대 추가 지연 시간 200ms, 최소 0), 주기는 1분:
speedbump --latency=100ms --sine-amplitude=100ms --sine-period=1m --port=2000 localhost:80
- 또는 kffl/speedbump 컨테이너 이미지를 사용하여 speedbump을 실행할 때:
docker run --net=host kffl/speedbump:latest --latency=100ms --sine-amplitude=100ms \ --sine-period=1m --port=2000 localhost:80
- 기본 지연 시간이 300ms이고, 아래 그래프에 표시된 것처럼 진폭 200ms, 주기 2분의 톱니파 지연 시간을 가진 새 인스턴스를 생성:
speedbump --latency=300ms --saw-amplitude=200ms --saw-period=2m --port=2000 localhost:80
- 여러 지연 시간 합산을 동시에 실행하는 것이 가능함.
- Speedbump은
lib
패키지를 통해 Go 라이브러리로 사용될 수 있음.
GN⁺의 의견:
- Speedbump는 네트워크 지연 시간을 시뮬레이션하는 데 유용한 도구로, 네트워크 기반 애플리케이션의 성능을 테스트하고 최적화하는 데 도움이 될 수 있음.
- Go 언어로 작성되어 있어 Go 개발자들에게 친숙하며, 다양한 지연 시간 패턴을 쉽게 시뮬레이션할 수 있는 기능을 제공함.
- 오픈 소스이며 Apache 2.0 라이선스를 따르므로, 커뮤니티의 기여를 통해 지속적으로 개선될 가능성이 있음.
Hacker News 의견
- ActivityPub 구현을 다양한 네트워크 크기와 조건에서 테스트하기 위해 비슷한 작업을 조사했음.
tc
명령어를 사용하여 특정 인터페이스에 지연을 추가하는 방법을 배웠고, 이는 Docker 컨테이너에서도 잘 작동함. 이미 많은 시스템에 설치되어 있을 수 있음.- 예시 명령어:
tc qdisc add dev eth0 root netem delay 100ms
- 예시 명령어:
- Netflix에서 'latency monkey'라고 부르는 도구를 개발함. 하류 서비스가 느려지는 것을 감지하는 것이 서비스가 사용 불가능할 때 감지하는 것보다 훨씬 어려움. 이 도구는 패킷을 일정 비율로 떨어뜨려 재전송을 유도하고, 이로 인해 패킷이 지연되거나 순서가 뒤바뀌게 함. 네트워크 접근에 대한 오류 처리 코드에서 많은 문제를 발견함.
- 인터넷 어플리케이션을 작업하는 모든 소프트웨어 엔지니어는 이와 같은 도구를 일상적으로 사용해야 함. QUIC과 TCP 모두 필요하며, DNS를 포함한 모든 UDP를 캐치할 수 있어야 함. 개발자들이 고성능 컴퓨팅 환경을 사용하지 않으면 웹앱의 90%가 사라질 것이라고 확신함.
- 많은 앱들이 간헐적인 네트워크 연결 상태에서 성능이 떨어짐. 앱 개발자들이 시뮬레이션된 간헐적 연결성을 테스트함으로써 다른 이들을 도울 수 있음. 많은 앱들이 이메일 클라이언트처럼 '발송 대기함' 기능이 부족함. 재난 구호 상황에서 일반적인 연결 문제를 시뮬레이션하기 위한 참조 toxiproxy '테스트 케이스 변조기'를 누가 개발할 수 있을지에 대한 질문이 있음.
- Mac에서는 내장 도구를 사용하여 비슷한 작업을 수행할 수 있음. 네트워크 연결 속도를 시뮬레이션하기 위한 명령어 예시 제공.
- Mac에서 느린 네트워크를 시뮬레이션하고자 할 때 Network Link Conditioner를 발견함. 프록시 설정이나 기타 설정 없이 사용할 수 있으며, Xcode 추가 도구에서 설치해야 함.
- 오랫동안 활동하지 않았지만, 'comcast'라는 이름이 많은 것을 시사함.
- Windows에서 사용해본 비슷한 도구로 'clumsy'가 있음.
- FreeBSD에도 'dummynet'이라는 기능이 있어서 ipfw의 일부로 지연, 대역폭 제한, 큐 크기, 패킷 손실을 주입할 수 있음. MacOS에서와 같은 기능임.
- 첫 직장에서 매니저가 FreeBSD IPFW 방화벽을 설정하여 ICMP 응답을 느리게 만들었던 일을 잊을 수 없음. 누군가가 핑을 보낼 때마다 응답 시간이 가장 높게 보였음. 그 매니저는 장난꾸러기였음.