섀도우 네트워크에서 트래픽을 재생하는 방법?


12

이것이 새로운 질문이라면 죄송합니다 ...

Netflix와 Twitter가 두 개의 개별 인프라간에 웹 트래픽을 복제 할 수 있다는 이야기를 들었습니다. 하나는 신뢰할 수 있고 신뢰할 수있는 것입니다. 다른 하나는 사용자에게 돌아오고 있지만 생각하지 않는 '그림자'또는 테스트 인프라입니다. 요점은 실제로드 및 타이밍에서 보조 인프라를 테스트하는 것입니다.

나는 이것을 설명하는 단어가 있다고 확신하지만 '브리지'는 올바른 것이 아니며 '재생'하지 않습니다.

누구 든지이 기술이 무엇인지, 또는 이것을 달성하기 위해 어떤 도구를 사용할 수 있습니까?

효과적으로 로그를 재생하는 기술에 대해 들어 봤지만 실제 속도 / 배포를 얻는 것은 실제로 어렵다는 것을 덧붙여 야한다고 생각합니다.

또한 출력의 '정확성'을 확인하려고하지 않고 새 인프라에서 오류 / 스택 추적 등이 표시되지 않도록하십시오.


이 작업을 수행하는 확실한 방법 (미러 포트가있는 스위치를 사용하여 인바운드 트래픽 복제)은 "섀도우"서버가 응답을 시도 할 때 문제를 일으키는 것처럼 보입니다. 이제 당신은 불명확 한 방식에 관심을 갖게되었습니다.
DerfK

@DerfK : 원격 클라이언트의 TCP / IP 스택을 시뮬레이션하는 코드를 작성하지 않을 경우 단순 계층 2 또는 3 캡처를 재생하면 문제가됩니다. 많은 코드를 작성하지 않으려면 레이어 7에서 캡처하는 것이 더 좋습니다.
Evan Anderson

패킷 수준에서 구현하기가 어렵다고 생각하지 않습니다. tcpcopy ( github.com/wangbin579/tcpcopy )를 참조하십시오

답변:


7

개인적으로 "세션 재생을 통한로드 테스트"라고 부릅니다. 나는 이런 종류의 테스트 기술에 대한 간단한 포괄 용어를 모른다.

이런 종류의로드 테스트에 사용 된 기본 전략은 프로덕션 시스템에서 로그 파일을 수집하여 테스트 시스템에서 재생하는 것입니다.

JMeter 또는 Apache Bench 와 같은 도구를 사용 하여 로그 파일의 요청을 재생할 수 있습니다. 매우 복잡한 클라이언트 / 서버 상호 작용 (원래 로그 스트림을 기반으로 특정 타이밍 세부 정보 포함)을 실제로 재생하여 응용 프로그램 내부 (실제 조건, 타이밍 관련 버그 등)를 실제로 실행하려는 경우 규모에 따라 클라이언트를 시뮬레이션하는 응용 프로그램 별 테스트 도구 작성을 살펴보십시오.

원시 네트워크 트래픽의 보트로드를 단순히 캡처하여 TCP 또는 IP 기반 프로토콜로 "재생"할 수는 없습니다. TCP 시퀀스 번호는 원래 캡처 된 트래픽과 일치하지 않으며 작동하지 않습니다. 시뮬레이션 된 클라이언트가 캡처 된 발신자의 IP 주소에 응답해야하므로 IP 계층 캡처에 문제가 발생합니다. TCP 시뮬레이터를 작성하고 있기 때문에 계층 7에 더 가까운 트래픽을 캡처하고 세션을 재생하는 데 사용하는 것이 좋습니다. ( tshark예를 들어 TCP 스트림에서 레이어 7 데이터 및 타이밍을 버스트하고 재생하는 것과 같은 것을 사용하는 것을 상상할 수 있습니다.)

단순히 네트워크 트래픽을 재생하면로드가 시뮬레이션되지만 반드시 결함을 캡처 할 필요는 없습니다. 응용 프로그램이 올바르게 응답 하는 테스트를 로드 테스트하려면 시뮬레이션 된 클라이언트가 테스트 서버로부터 응답을 수신하고 정확성을 분석해야합니다 . 애플리케이션이 동적 응답 데이터를 생성 할 것이므로 시뮬레이션 된 클라이언트가 테스트 서버의 응답을 프로덕션 서버의 로깅 된 응답과 간단히 비교할 수는 없습니다. 여기에서 응용 프로그램 및 해당 출력에 특정한 테스트 장치를 작성하게됩니다.


1

많은 사람들이 동시에 웹 사이트에 동시에 액세스하는 것을 시뮬레이트하는 BrowserMob 과 같은 서비스를 사용합니다 . 이러한 서비스는 로그 된 트래픽을 재생하지 않습니다. 대화의 클라이언트 쪽이 없기 때문입니다. 예를 들어, 서버가 패킷을받을 것으로 예상되지 않는 인터넷의 컴퓨터로 패킷을 보내려고합니다. 그러나이 회사들은 로그를 연구하고 (일반적으로 패킷 수준이 아닌 응용 프로그램 수준에서)이 정보를 사용하여 사람들이 클릭하는 페이지, 빈도 및 순서를 파악합니다. 이 데이터는 BrowserMob이 반복하는 스크립트 / 매크로를 작성하는 데 사용됩니다.

다른 사용자가 언급했듯이 ApacheBench는 요즘 실제로 많이 사용되지 않습니다. 10 년 전에는로드가 많은 정적 HTML 문서 또는 JPEG를 얼마나 빨리 제공 할 수 있는지 파악해야 할 때 도움이되었습니다. 웹 브라우저에서 다시로드, 다시로드, 다시로드를 클릭하는 사람들과 크게 다르지 않습니다. 보다 복잡한 워크 플로가있는 웹 앱을 테스트 할 때는 조금 더 똑똑한 것이 필요합니다.


1

나는 당신이 네트워크 계층에서 이것을 할 수 있다고 생각하지 않지만, 하드웨어로드 밸런서가 두 번째 서버를 처리하기위한 특수 커널을 얻을 수 있습니다. 기본적으로 웹 트래픽 (TCP)은 보내거나받는 각 패킷에 대한 승인이 필요합니다. 따라서 사용자가 네트워크에 패킷을 보내면 사용자의 prod 네트워크와 섀도 네트워크에 모두 복제됩니다. 각 네트워크의 서버가 응답하고 prod 서버의 패킷이 컴퓨터로 다시 전달되어 승인을 받음으로써 대화를 즐겁게 수행합니다. 그러나 섀도 서버의 패킷을 삭제하면 확인 메시지가 표시되지 않습니다. 따라서 재전송을 시도하고 동시에 모든 네트워크 활동에 대한 전송 속도를 늦 춥니 다 (윈도우라고 함). 시간이 초과 될 때까지 계속해서 다시 보내려고합니다. 세션이 종료되었습니다. 솔직히, 당신은 처음에 연결을 설정하기 위해 악수를 완료 할 수 없습니다.

가장 가까운 것은 원래 동기화 패킷을 섀도 서버로 전달한 다음 해당 상자의 기본 게이트웨이를 존재하지 않는 위치로 설정하는 것입니다. 그런 다음 사용자가 연결을 설정하려고 할 때마다 prod 네트워크에 실제 서버가 생기고 최소한 섀도 네트워크에 syn 패킷을 보냅니다. 젠장, 이제 어떻게이 일을 할 수 있는지 궁금해합니다. :)


1

Netflix meetup에서 @adrianco 에게 이것에 대해 물어볼 수있었습니다 .

대답은 기본적으로 현재 요청을 다시 작성하고 대상 서버에서 비동기 실행을 호출하는 ServletFilter (죄송합니다. Java 관련 용어) 인 자체 도구를 작성했다는 것입니다.

이점은 다음과 같습니다.

  • 테스트 ( "어두운") 인프라에 대한 '실제 세계'트래픽 패턴
  • 녹음하고 재생할 필요가 없습니다

단점 :

  • 생산 상자에 여분의 스레드 / CPU 사이클이 있어야합니다.
  • 테스트 인프라의 대기 시간이 백업되어 생산 상자에 영향을 줄 수 있음
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.