성능 테스트를 시작하고 싶습니다.

자기소개



  • @ Mochizuki Kotaro
  • 회사는
  • AWS, Rails, CakePHP
  • Staging 은 docker + k8s + GCP

  • 나는
  • 서버 측, 프론트 측 코드 작성
  • 인프라는 전혀 모릅니다
  • 개발 환경을 docker로 만드는 정도



  • 계기


  • Rails 버전 업
  • memory 사용량이 증가한다
  • 속도가 느려진다

  • 광고 부스트
  • 액세스할 수 없게 된다



  • Types of performance testing


  • load testing
  • stress testing
  • endurance/soak testing
  • spike testing
  • others...


  • 성능 테스트
  • 부하 테스트
  • 스트레스 테스트
  • 내구성 테스트
  • 스파이크 테스트
  • 그 외에도 ...



  • Load testing



    특정 부하를 처리할 수 있는지 확인



    Soak testing



    지속적인 부하를 줄 때 시스템이 어떻게 작동하는지 확인



    Spike testing



    단기간 대량 액세스의 경우를 밝혀



    Stress testing



    부하를 올려서 한계를 잡는다



    보기 지표


  • load average
  • cpu
  • memory
  • Response time
  • Request per second


  • 보기 도구


  • top command
  • AWS console
  • mackerel


  • top command





    유무를 말하지 않고 우울 키는



    z



    색이 붙습니다





    z x c b





    htop command



    처음부터 보기 쉽다. 특히 메모리.



    부하를 가하는 방법


  • ab
  • Apache JMeter™
  • vegeta
  • k6


  • vegeta


  • htps : // 기주 b. 코 m / 쓰나 rt / ょ
  • over 9000 stars
  • Golang



  • k6


  • htps : // 기주 b. 코 m / ぉ 아 m 파 ct / k6
  • Golang으로 만들어졌으며 ES6에서 시나리오를 적용합니다

  • Load Impact

    ab -c 10 -n 100 url 와 같이 k6 run -v 10 -i 100 url 로 할 수도 있고, 복잡한 시나리오를 (ES6에서) 쓸 수도 있습니다.

    샘플 시나리오를 작성해 보겠습니다.
    最初は 同時接続 3 で、2秒かけて 5に 増やし、その後 4秒間で 8 まで増やし、その後...
    

    tgif-sample.js
    import encoding from "k6/encoding";
    import http from "k6/http";
    
    export let options = {
        vus: 3,
        stages: [
            { duration: "2s", target: 5 },
            { duration: "4s", target: 8 },
            { duration: "3s", target: 0 },
        ]
    };
    
    export default function() {
        //let response = http.get("https://***.com/",  { headers: { "Authorization": "Basic " + encoding.b64encode("user:pw") }});
        let response = http.get("http://724c29d2.ngrok.io/");
    };
    

    실행은 k6 run script.js 입니다.



    k6 cloud



    베지터처럼 플롯된 데이터를 볼 수 있습니다. (1 개월 무료 평가판 ... => htps : // 아아아 m파ct. 코m/p리신g/)

    명령은 k6 cloud입니다.
    $ k6 cloud tgif-sample.js
    
              /\      |‾‾|  /‾‾/  /‾/
         /\  /  \     |  |_/  /  / /
        /  \/    \    |      |  /  ‾‾\
       /          \   |  |‾\  \ | (_) |
      / __________ \  |__|  \__\ \___/ .io
    
    
    
         execution: cloud
         script: tgif-sample.js
         output: https://app.loadimpact.com/k6/runs/111735
    
         test status: Finished
    
    output URL에 액세스하면 다음을 얻을 수 있습니다.





    대략입니다만, 퍼포먼스 테스트의 종류, 보는 지표, 부하 걸리는 툴등을 나란히 해 보았습니다.
    운용에 실릴 수 있도록, 조금씩 사용해 가고 싶습니다.
    구체적인 수치의 설계라든지를 제대로 생각할 수 있게 되고 싶습니다.
  • 좋은 웹페이지 즐겨찾기