k6을 사용하여 Vercel에서 테스트 Nuxt API 로드

간단한 소개


최근 Nuxt의 전체 스택에 대해 심층적으로 검토해 왔습니다.js, 완전한 API를 구축하는 데 무엇을 제공할 수 있는지 보십시오.serverMiddleware 등록 정보를 사용하여 프로젝트 디렉토리를 벗어나지 않고 Express를 사용하여 REST 엔드포인트를 만들 수 있습니다.너무 강해!
그러나 프로그램이 확장되기 시작하면 서버와 데이터베이스의 부하가 더욱 무거워지기 때문에 API가 사용자에게 성능을 유지하도록 확보해야 한다.만약 당신의 응용 프로그램이 다운된다면 잠재적인 방문객/수입을 잃고 싶지 않습니다!모든 것이 늦어지기 전에 이런 성능이 떨어질 기회를 잡는 것이 중요하다!
고맙습니다. 복잡한 작업 부하와 여러 명의 병렬 사용자 연결을 모의할 수 있는 도구가 있습니다.입력k6!

k6가 뭐예요?


k6는 엔지니어링 팀을 위한 로드 테스트 도구 및 SaaS입니다.이것은 명령줄에서 부하 테스트를 직접 실행할 수 있는 아주 유용한 도구입니다. ES6 자바스크립트 문법을 사용하십시오.여기에는 유용한 기능과 작동 가능한 지표가 많이 들어 있는 CLI 도구가 포함되어 있어 API 성능을 360°로 확인할 수 있습니다.k6 포획에 대한 모든 유용한 지표를 더 알고 싶으시면 check out their section dedicated to it
본고는 serverMiddleware 속성과 Express를 사용하여 Nuxt에 기본 API 노드를 설정하고 Vercel를 사용하여 Nuxt 응용 프로그램을 Nuxt Vercel Builder에 배치하고 마지막으로 k6를 사용하여 저희 생산 노드를 테스트합니다.
코드check out my repository on Github에 직접 들어가고 싶다면, 이것은 우리가 실현하고자 하는 내용을 반영한다.

설치 프로그램


말할 것도 없이, 우리는 새로운 Nuxt 프로그램을 시작해야 한다.선택한 명령줄 도구 (npx가 더 좋아요) 를 사용하여 새 Nuxt 프로젝트를 만듭니다.
npx create-nuxt-app <project-name>
다음은 서버 중간부품을 사용하기 때문에 Nuxtdeployment targetserver로 설정해야 합니다.API 라우팅에 사용할 디렉토리를 지정하려면 편집nuxt.config.js도 필요합니다.계속해서 다음 줄을 nuxt.config.js 파일에 추가합니다.
export default {
  // ...
  target: 'server',
  // ...
  serverMiddleware: {
    '/api': '~/api'
  }
  // ...
}
서버가 필요하므로 Express를 설치해야 합니다.
npm install express
걸출하다이어서 기계에 k6가 설치되어 있는지 확인하세요.플랫폼별 설치의 경우 해당 섹션here을 참조하십시오.Mac OSX 사용자는 자체 제작 소프트웨어를 사용하기만 하면 됩니다.
마지막으로, 우리는 응용 프로그램을 Vercel에 배치할 것이기 때문에, 우리는 Nuxt Vercel Builder를 이용하여 Vercel이 서버 측에서 보여준 Nuxt 응용 프로그램과 Express API를 그들의 플랫폼에 어떻게 배치하는지 알려야 한다.
프로젝트의 루트 디렉터리에 vercel.json라는 파일을 만듭니다.
{
  "version": 2,
  "builds": [
    {
      "src": "nuxt.config.js",
      "use": "@nuxtjs/vercel-builder",
      "config": {
        "serverFiles": ["api/**"]
      }
    }
  ]
}

API 끝점 생성하기


이 프레젠테이션에서 우리는 간단한'ping'노드 부하 테스트만 구축할 것이다.보다 포괄적인 SaaS 응용 프로그램에서 CRUD 작업을 테스트하고 데이터베이스를 선택하여 사용자가 더 복잡한 작업을 수행할 수 있도록 해야 합니다.
계속해서 프로젝트의 루트 디렉터리에 api라는 폴더를 만들고 index.jsping.js라는 파일에 폴더를 만듭니다.우리는 여기에express 서버를 초기화하고 루트를 설정할 것입니다.index.js에 다음 행을 추가합니다.
const express = require('express')
const app = express()

const ping = require('./ping')
app.use(ping)

if (require.main === module) {
  const port = 3001
  app.listen(port, () => {
    console.log(`API server listening on port ${port}`)
  })
}

module.exports = app
그 다음ping.js.
const { Router } = require('express')
const router = Router()

router.use('/ping', (req, res) => {
  res.json({
    message: 'Ping!'
  })
})

module.exports = router
위대하다지금 npm run dev를 실행하고 localhost:3000/api/ping로 이동하면 간단한 JSON 응답을 보실 수 있습니다!
배치할 때가 됐어!

배치하다


로컬 프로젝트를 Git 저장소로 밀어넣고 deploy instructions on Vercel 단계를 따라야 합니다.고맙습니다. 저희 vercel.json 파일은 SSR Nuxt 응용 프로그램의 모든 작업을 배치합니다.
프로젝트에 공개적으로 접근할 수 있는 URL이 생기면 your-project-url.vercel.app/api/ping 로 이동해서 API가 성공적으로 배치되었는지 확인하십시오.

부하 테스트 우리의 단점


현재, Google SSR Nuxt 프로그램과 기본적인 API가 버셀에 배치되었으니, Google ping 노드에 대한 부하 테스트를 진행할 때가 되었습니다.프로젝트의 루트 디렉토리에 loadtest.js라는 파일을 만들고 다음을 추가합니다.
import http from 'k6/http'
import { check, group } from 'k6'
import { Trend } from 'k6/metrics'

let PingTrend = new Trend('Get ping', true)

export let options = {
  vus: 40,
  duration: '15s',
}

const baseUrl = `https://your-project-url.vercel.app/api`
const endpoints = {
  ping: `${baseUrl}/ping`,
}

export default function () {
  group('ping', function () {
    // Get ping
    let getPingRes = http.get(endpoints.ping)
    check(getPingRes, {'status was 200 (ping)': (r) => r.status == 200 })
    PingTrend.add(getPingRes.timings.duration)
  })
}
배포된 Nuxt API의 URLbaseUrl 변수가 있는지 확인합니다.
우리k6 options에 대해 우리는 40명의 동시 가상 사용자를 실행할 것을 지정했고 테스트 지속 시간은 15초이다.예상된 병렬 부하를 테스트하고 싶을 때 부하를 증가하거나 줄일 수 있습니다.보시다시피 API는 40명의 동시 사용자를 병렬로 처리할 수 있습니다. 문제 없습니다.
k6에서 atrend는 그들 플랫폼의 사용자 정의 지표로 사용자의 호출을 위해 서로 다른 값을 계산한다. 예를 들어 실행 시간의 최소, 최대, 중치와 평균 백분율 등이다.우리의 스크립트에서, 우리는 핑의 성능을 추적하기 위한 새로운 추세를 만들고 있습니다.그 밖에 우리는 check를 추가했는데 단점이 성공했고 상태 코드는 200이다.
현재, 우리는 아래 명령을 사용하여 명령줄에서 이 파일을 실행할 수 있다
k6 run loadtest.js
부하 테스트가 끝났을 때, 이러한 상황을 보게 될 것입니다

우리가 흥미를 느끼는 주요 지표는 첫 번째, Get-ping 라인이다.보시다시피 요청에서 응답까지의 API 요청 실행 시간은 평균, 최소, 중간값 및 최대값입니다.

결과 이해


와, 가장 긴 시간은 놀라운 4.69초, 가장 짧은 것은 88.69밀리초라고 말할 수 있다!왜 이렇게 차이가 나!
응, 서버가 없는 환경에 배치되었을 때 모두가 알고 있는 문제, 즉 냉각 가동이 있었다.Nuxt Vercel Builder가 애플리케이션을 서버 기능이 없는 것으로 배치하므로 일정 기간 서버 기능이 없는 상태에서 먼저 시작해야 합니다.이것은 현재 서버가 없는 계산이 직면한 단점 중의 하나다.정기적으로 함수를 호출함으로써 (더 큰 사용 비용을 초래할 수 있으며 구체적으로 당신의 배치 플랫폼에 달려 있다)'함수 따뜻함을 유지한다'는 해결 방법이 있지만 본 블로그는 이에 대해 깊이 있게 연구하지 않을 것입니다.어서 오세요read more on the topic.

마무리


걸출하다Express와 서버 Middleware를 사용하여 Nuxt API를 성공적으로 만들었고, Nuxt Vercel Builder를 사용하여 프로그램과 API를 Vercel에 배치하고, k6를 사용하여 다시 불러오는 동안 API를 테스트했습니다.당신이 API를 확장하고 프로젝트 기능과 예상 부하에 따라 부하 테스트 스크립트를 맞춤형으로 제작할 수 있기를 바랍니다. 그러나 이것은 당신이 정확한 방향에서 시작할 수 있기를 바랍니다.
읽어주셔서 감사합니다. 이 글이 도움이 된다면 트위터에 공유해 주십시오!

좋은 웹페이지 즐겨찾기