properties

/usr/local/m2/setting.json 다음 영역에 대해 기술한다.

{
  "env": {
    "properties": {
      ...
    }
  }
}

memoryUsage

"memoryUsage": {
  "totalUsableRatio": 100,
  "workingRatio": 60,
  "partition": "1:1"
},
totalUsableRatio (기본: 100%)

전체 시스템 메모리를 기준으로 M2 가용 메모리 비율

workingRatio (기본: 60%)

totalUsableRatio 가 반영된 메모리 중 M2가 사용할 메모리 비율

Note

기본으로 40%는 OS가 성능을 낼 수 있도록 사용하지 않는다.

partition (기본: 1:1)

M2 가용메모리 중 내부 컴포넌트 RT : Core 의 메모리 사용 분배정책

process

프로세스 역할별 개수와 메모리 가용량을 설정한다.

"process": {
  "core": {
    "memory": "auto",
    "concurrent": 0,
    "respawnable": 1,
    "keepalive": {
      "maxcount": 0,
      "maxage": "0s",
      "timewait": "1m"
    }
  },
  "transcoder": {
    "memory": "auto",
    "concurrent": 0,
    "waitQueue": 4,
    "respawnable": 1,
    "domainQueue": 0,
    "priorityCommand": ["capture", "trim"],
    "keepalive": {
      "maxage": "0s",
      "timewait": "1m"
    }
  },
  "render": {
    "memory": "auto",
    "concurrent": 4,
    "waitQueue": 2
    "respawnable": 1,
    "domainQueue": 0,
    "keepalive": {
      "maxcount": 1000,
      "maxage": "1h",
      "timewait": "1m",
    }
  },
  "hyperdims": {
    "memory": "3G",
    "threadpool": 0,
    "concurrent": 0,
    "waitQueue": 4,
    "pendingSameOrigin": true,
    "domainQueue": 0,
    "keepalive": {
      "maxcount": 0,
      "maxage": "24h",
      "timelock": "60s",
      "timewait": "60s"
    }
  },
  "rt": {
    "memory": "auto",
    "respawnable": {
      "scheduled": "03:00-04:00",
      "recovery": 3,
      "clearCoredump": false
    }
  },
  "carton": {
    "location": "remote0"
  }
}
memory

할당된 최대메모리.

  • "auto" 는 프로세스별로 잔여 메모리 또는 코어 수에 따라 자동으로 결정된다.

  • "120%"auto 기준 비율로 결정된다.

  • "1024m" 등 구체적인 숫자가 지정되면 해당 메모리를 넘지 않도록 프로세스 개수가 조정된다.

Note

auto 설정 시 각 프로세스 별로 다음과 같이 메모리 설정을 가진다.

프로세스

메모리 설정

core

  • memoryUsage 을 통해 할당된 core 메모리로 설정한다.

transcoder

  • 할당된 concurrent 개수에 따라 다음과 같이 결정한다.

  • concurrent * 1GB

render

  • M2 가용 메모리를 제외한 여유 메모리를 기준으로 결정한다.

  • 여유 메모리 3GB 이상 시 1GB, 이하 시 500MB 로 설정한다.

hyperdims

  • 다음과 같은 계산식을 통해 메모리 가용량을 결정한다.

  • core 가용 메모리 - core 사용 메모리(core메모리 X core 수) + hyperdims 기본 메모리(전체 메모리 / 6)

concurrent (기본: 0)

최대 실행 가능한 동시성 개수. 0 은 auto이다.

Warning

아주 특별한 환경에서 제한적으로 사용될 뿐 운영상황에서 고려하지 않는 것을 권장한다.

threadpool

hyperdims 함수의 동시성 개수. 0 이라면 CPU 코어 수로 설정된다.

  • hyperdims 함수만 유효하며, concurrent 와는 별개로 관리된다.

waitQueue

함수 요청 동시성 개수. m2-workman 은 최대 concurrent x waitQueue 개수만큼 함수에 요청한다.

  • 함수는 concurrent 개수만큼 동시 처리하며, 나머지는 후속 동작의 신속함을 위해 대기시킨다.

  • 0 이라면 요청 개수에 제한을 두지 않는다.

  • 최대 CPU 코어 수 * 4 를 넘어설 수 없다.

Note

  • transcoder , render 함수는 concurrent x 설정값 을 넘어서는 요청에 대해 m2-workman 에서 큐잉(Queueing)한다.

  • hyperdims 함수는 threadpool x 설정값 에 대해서 큐잉한다.

  • hyperdims 함수가 504 Gateway Timeout 응답한 경우, 해당 proxy 원본 도메인은 동시성 2개로 별도 관리된다.

    • 이때 throttling deactive 상태인 경우 해당 원본 도메인 요청시 즉시 504 응답한다.

    • 이후 200 OK 응답 시 정상화되어 concurrent x 설정값 에 포함되어 관리된다.

pendingSameOrigin

동일 원본 URL 요청 대기 여부. hyperdims 함수만 해당된다.

  • true 라면 동일 원본 URL 요청에 대해 대기한다. 응답 데이터를 공유한다.

  • false 라면 동일 원본 URL 요청에 대해 대기하지 않는다.

Note

  • hyperdims 함수 처리 중 동일 원본에 대한 요청은 waitQueue 큐(Queue)를 점유하지 않도록 구성한다.

domainQueue

도메인 별 요청 동시성 개수. waitQueue x domainQueue 개수만큼 요청을 처리한다.

  • 도메인 별로 요청을 큐잉(Queueing)하여 특정 도메인의 요청이 과도하게 발생하는 경우, 다른 도메인에 영향을 주지 않도록 한다.

  • 0 이라면 도메인 별 요청 큐를 사용하지 않는다.

Note

  • Remote 체인함수 활성화 시에는 요청 정보의 도메인 별로 큐를 관리한다.

priorityCommand

우선 순위 명령어 목록

  • 지정된 명령어는 우선 순위가 높아 waitQueue 큐(Queue)를 점유하지 않고 즉시 처리된다.

Note

  • transcoder 함수는 무거운 작업을 수행하기 때문에 비교적 가벼운 capturetrim 명령어에 대해 우선 순위를 높게 설정한다.

respawnable

동시 재가동되는 최대 개수. 급작스럽게 많은 프로스세가 동시에 respawnable 될 경우 성능저하 및 메모리 점유율 상승으로 이어질 수 있다.

Note

rt.respawnable 은 다른 동작체계와 설정을 제공한다. cluster 를 통해 무중단 서비스 구성이 가능하다.

  • rt.memory 설정에 의한 무중단 서비스 재가동은 cluster 활성화시에만 동작한다.

  • rt.memory (기본: auto) 설정이 auto 라면 메모리 사용량에 따른 재가동을 수행하지 않는다.

  • rt.memory 설정이 지정되어 있다면 초과시 rt.respawnable.scheduled (기본: 03:00 - 04:00) 시간 안에 1회 재가동한다.

  • rt 의 비정상 종료 상황시 rt.respawnable.recovery (기본: 3) 회 재가동한다.

  • rt.respawnable.recovery 값은 매일 자정(00:00)에 설정값으로 초기화되며 지정된 횟수만큼 재기동 시도한다.

  • rt.respawnable.clearCoredump (기본: false)true 라면 비정상 종료로 생성된 coredump 파일을 삭제한다.

keepalive

프로세스 생존, 재가동 조건

maxcount

지정된 개수의 트랜잭션을 처리했다면 재가동한다. 0 이라면 제한하지 않는다.

maxage

프로세스 가동시간이 지정된 시간을 초과했다면 재가동한다. 0 이라면 제한하지 않는다.

timelock

프로세스가 지정된 시간동안 함수를 처리하지 않으면 재가동한다. 0 이라면 제한하지 않는다.

Note

  • 이 설정은 프로세스가 throttling 상태일 때만 적용된다.

timewait

진행 중인 트랜잭션이 없다면 즉시 재가동한다. 만약 있다면 지정된 최대 시간만큼 대기한다. 시간이 초고되면 강제로 재가동한다.

Note

carton 함수는 상태없는 전역함수 개념로 location 설정만 지원한다.

Warning

재가동되는 프로세스는 concurrent 개수에 포함되지 않는다. 즉 동형의 프로세스는 keepalive.timewait 시간동안 최대 concurrent + respawnable 개수만큼 유지될 수 있다.

Remote 프로세스 위임

개별 함수가 Remote 체인함수 로 구동될 수 있도록 설정한다.

"process": {
  "transcoder": {
    "delegate" : [ "1.1.1.1", "1.1.1.2"]
  },
  "hyperdims": {
    "delegate" : [ "#oci:vm:faas_hyperdims" ]
  }
}

delegate 는 함수 처리를 위임할 대상서버를 지정한다. 개별 함수단위로 구성하며, 위임( delegate )된 기능은 다른 함수설정을 참조하지 않는다. 특정 포트등을 명시하고 싶다면 아래와 같이 표현한다.

"process": {
  "hyperdims": {
    "delegate" : [ "#oci:vm:faas_hyperdims#:8080" ]
  }
}

문쟈열 치환방식으로 동작한다.

운용 안내

함수에 따른 최적의 성능 보장을 위해 동작하는 프로세스가 다를 수 있다. 이렇게 분리된 동작에 대해 m2-workman 프로세스가 관리 책임을 갖는다.

함수

동작 프로세스

포트

Since

transcoder

  • m2-workman -> ffmpeg

8586

1.3.5

render

  • m2-workman -> chromium

8586

1.3.5

hyperdims

  • m2-workman -> m2-hyperdims

8586 -> 8587

1.5.1

그 외

  • m2c

8585

1.0.0

Note

  • m2c 는 클러스터 그룹이며 Roundrobin 방식으로 동작한다.

  • m2-workman 은 단일 프로세스이다.

프로세스 동작 예시)

# m2 status
Processes: 4 running, 0 sleeping (Respawns: 0, 0, 0)
Mem: 480MB Active, 4284MB Available

NAME            PID     UPTIME          CPU(%)  RSS(MB) HEAPTOTAL(MB)   EXTERNAL(MB)
m2m             16422   504334          4.9     232     189             13
m2c[1]          16514   504326          0.0     120     72              1
m2c[2]          16520   504326          0.0     117     70              1
m2c[3]          16526   504326          2.4     123     72              1
m2c[4]          16534   504326          0.0     119     70              1
m2-workman[5]   16536   504326          0.0     121     72              6
m2-hyperdims[6] 28296   72320           0.0     118     75              1
m2rtd           16449   504330          4.9     202     -               -
m2rtr           16463   504330          2.4     56      -               -
m2rtx           16467   504330          0.0     1       -               -
m2rty           16565   504325          0.0     1       -               -
m2rty           16566   504325          0.0     3       -               -

throttling

시스템 과부하 방지를 위한 미디어 변환과 같은 Heavy workload 동작의 쓰로틀링을 설정한다.

"throttling": {
  "hyperdims": {
    "enable": true,
    "wait": {
      "deactive": 8,
      "reactive": 6
    },
    "matchingList": null
  },
  "transcoder": {
    "enable": true,
    "wait": {
      "deactive": 4,
      "reactive": 2
    },
    "matchingList": [
      {
        "pattern": "/analyze",
        "action": "error"
      },
      {
        "pattern": "/preset/_gif2(.*)",
        "action": "redirect"
      },
      {
        "pattern": "/preset/_mp42(.*)",
        "action": "redirect"
      }
    ]
  }
}

Note

기본값은 위 설정과 같으며, 프로세스 별 각 항목의 기본값은 다르다.

enable

시스템 과부하 방지를 위한 쓰로틀링 사용

wait

프로세스 대기큐에 따른 쓰로틀링 제어 조건

deactive

대기큐가 process.xxx.concurrent x 설정값 이상이라면 부하를 낮추기 위해 pattern 요청을 제어한다.

Warning

체인함수의 504 Gateway Timeout 응답으로 동시성 별도 관리중인 도메인 요청이라면, 즉시 504 응답한다.

reactive

( deactive 상태에서) 대기큐가 concurrent x 설정값 미만이라면 다시 pattern 요청을 통과한다.

matchingList

조건에 따라 기능 동작 여부를 결정한다.

pattern 매칭 패턴

action 매칭된 요청에 대한 응답 정의

  • origin 원본을 응답한다.

  • redirect 원본으로 리디렉션한다.

    Warning

    리디렉션 응답 시 원본 URL에 {keyword}/nocall 를 추가하여, urlRewrites 에 의한 무한루프를 방지한다. 이를 위해서, urlRewrites 설정 시 !FUNCTION 패턴을 추가하여 리디렉션된 요청을 무시하도록 설정해야 한다.

    302 Found
    Location: /source.mp4/xcdr/nocall
    
  • error 510 상태코드를 응답한다.

    Content-Type: application/json
    
    {
      "enable": false,
      "error": "throttle"
    }
    

inspection

{
  "env": {
    "properties": {
      "inspection": {
        ...
      }
    }
  }
}

process

"process": {
  "enable": true,
  "retention": 14,
  "schedule":"5 * * * * *",
  "dir": "log/process"
},
enable (기본: true)

프로세스 모니터링 기록 활성화

retention (기본: 14)

기록 유지 갯수

schedule (기본: 5 * * * * *)

기록 스케줄

dir (기본: log/process)

기록 경로