network¶
소켓, HTTP 프로토콜 등 전역 네트워크에 대해 설정한다.
/usr/local/m2/setting.json 다음 영역에 대해 기술한다.
{
"env": {
"network": {
...
}
}
}
passiveSockets¶
제한없이 클라이언트 요청을 모두 허용하면 시스템에 지나친 부하가 발생할 수 있다. 시스템 과부하는 사실상 장애이다. 적절한 수치에서 클라이언트 요청을 거부하여 시스템을 보호한다.
"passiveSockets": {
"listenIps": [
"10.10.10.10",
"10.10.10.11",
"127.0.0.2"
],
"maxCount": 80000,
"reopenRatio": 75
}
listenIps (기본: 0.0.0.0)모든 가상호스트가 Listen할 IP목록을 지정한다.
maxCount (기본: 80,000, 최대: 100,000)연결을 허용할 최대 클라이언트 소켓 수. 이 수치를 넘으면 신규 클라이언트 접속을 즉시 닫는다.
maxCount의reopenRatio (기본: 75%)비율만큼 소켓 수가 감소하면 다시 접속을 허용한다.reopenRatio (기본: 75%)(최대 패시브 소켓접속 도달 시) 접속차단 후 이 비율만큼 소켓 수가 감소하면 다시 접속을 허가한다.
(기본 설정에서) 전체 클라이언트 소켓 수가 8만을 넘으면 신규 클라이언트 접속은 즉시 종료된다. 전체 클라이언트 소켓 수가 6만(8만의 75%)이 되면 다시 접근을 허용한다.
예를 들어 3만개의 클라이언트 세션을 처리할 때 원본 서버들이 모두 한계에 도달하면 이 수치를 3~4만 정도로 설정하는 것이 좋다. 이로 인해 얻을 수 있는 효과는 다음과 같다.
별다른 Network 구성(e.g. L4 세션조절 등)이 필요 없다.
불필요한(원본 부하로 처리될 수 없는) 클라이언트 요청을 방지한다.
서비스의 신뢰성을 높인다. 서비스 Burst 이후 재시작 등 점검 작업이 필요 없다.
http¶
HTTP 요청을 처리하기 위한 초기/증설 세션 수를 설정한다.
"http" : {
"initCount": 10000,
"increaseCount": 6000
"recvBufferSize": 16384
}
별도 설정하지 않을 경우 물리 메모리 크기에 따라 자동으로 설정된다.
물리메모리 |
initCount, increaseCount |
|---|---|
1GB |
2.5천, 1천 |
2GB |
5천, 2천 |
4GB |
1만, 4천 |
8GB 이상 |
1만, 6천 |
initCount최초 세션 수
increaseCount증설 세션 수
recvBufferSize (기본: 16KB)세션당 기본 수신버퍼 크기
제한적인 환경에서 적은 수의 소켓만으로도 서비스가 가능할 때 소켓 수를 줄이면 메모리를 절약할 수 있다.
https¶
HTTPS 요청을 처리하기 위한 초기/증설 세션 수를 설정한다.
"https" : {
"enableSni": true,
"initCount": 10000,
"increaseCount": 6000
}
enableSni (기본: true)
true같은 IP+Port 조합(생략할 경우*:443)으로 여러개의 인증서를 지원한다.아래의 경우처럼 443포트로 여러개의 인증서를 지원할 수 있다.
false (기본)Multi Port 또는 Multi NIC 방식으로 여러 인증서를 지원해야 한다.
initCount (기본: 10000)최초 세션 수
increaseCount (기본: 6000)증설 세션 수
http2¶
HTTP2를 활성화한다.
"http2": {
"enable": false,
"enableHttp3": false,
"concurrentStreamMaxCount": 10,
"keepAliveSec": 10,
"maxRequestHeaderFields": 200,
"maxResponseHeaderFields": 500
}
enable (기본: false)http2를 활성화한다.
enableHttp3 (기본: false)http3를 활성화한다.
concurrentStreamMaxCount (기본: 10)단일 HTTP2 세션으로 진행가능한 HTTP Stream의 최대 개수
keepAliveSec (기본: 10초)세션 유지시간(초)
maxRequestHeaderFields (기본: 200개)HTTP 요청헤더의 최대개수
maxResponseHeaderFields (기본: 500개)HTTP 응답헤더의 최대개수
HTTP/2는 동적 리로딩이 지원되지 않는다. 설정 변경 후 반드시 재가동 해주어야 한다.
Note
HTTP/2가 활성화되면 통계 수집시점이 Payload가 송/수신 되는 어플리케이션으로 변경된다. 따라서 아래의 이유로 통계 집계 시 약간의 오차가 발생할 수 있다.
HTTP/2HPACK과 멀티 Stream 처리 방식TLS에서의 멀티 프로토콜HTTP/1.1,HTTP/2수용
tls¶
tls 프로토콜 동작을 설정한다.
"tls": {
"ciphers": "ALL:!DSS:!RC4:!IDEA:!CAMELLIA:!aNULL:!eNULL",
"minVersion": "TLSv1.2",
"maxVersion": "TLSv1.3"
}
ciphers (기본: ALL:!DSS:!RC4:!IDEA:!CAMELLIA:!aNULL:!eNULL)minVersion (기본: TLSv1.2)최소 사용버전
minVersion (기본: TLSv1.3)최대 사용버전
geoip¶
GeoIP를 사용하여 국가별로 접근을 차단할 수 있다. GeoIP Databases 중 Binary Databases를 GEOIP_MEMORY_CACHE and GEOIP_CHECK_CACHE 로 링크하여 실시간으로 변경내용을 반영한다.
"geoip": {
"enable": false,
"ver": "geoip2",
"path": null
}
enable (기본: false)GeoIP를 활성화한다.
ver (기본: geoip2)현재는
geoip2단독버전만 지원한다.pathGeoIP 경로를 설정하면 해당 경로의 파일을 로딩한다.
Note
국가코드는 ISO 3166-1 alpha-2 규격을 지원한다.
정상구성되어 있다면 로딩된 GeoIP 파일목록을 제공한다. (없을 경우 404 가 응답된다.)
http://127.0.0.1:10040/monitoring/geoiplist
결과는 JSON형식으로 제공된다.
{
"version": "2.0.0",
"method": "geoiplist",
"status": "OK",
"result":
{
"path" : "/usr/local/m2/geoip/",
"files" :
[
{
"file" : "GeoIP.dat",
"size" : 766255
},
{
"file" : "GeoLiteCity.dat",
"size" : 12826936
}
]
}
}
pipelineSession¶
M2 서비스 파이프라인 구성 세션에 대해 설정한다.
"pipelineSession": {
"internalTimeout": 300,
"externalTimeout": 10,
"listenTimeout": 10,
"keepAlive": {
"enable": true,
"reuseTimeout": 10
}
}
internalTimeout (기본: 300초)Loopback 타임아웃
extenalTimeout (기본: 10초)외부통신 타임아웃
listenTimeout (기본: 10초)Listen 타임아웃
keepAlive세션 Keep-Alive 설정
enable (기본: true)세션 재사용
reuseTimeout (기본: 10초)세션 재사용 시간(초)