M2 Reference¶
Overview¶
M2
는 WineSOFT에서 개발하는 On the fly 처리 플랫폼이다.
서비스 환경¶
온라인 콘텐츠는 유행이다.
더 많이
더 짧게
더 많은 콘텐츠를 더 빠르게 생산/유통 시킬 수 있는 솔루션이 필요하다.
AS-IS |
TO-BE |
---|---|
PC |
Mobile |
Monolithic Archicurecture |
Micro-Service Architecture |
On-Premise |
Cloud |
Single Core |
Multi Core |
하지만 커다한 컴퓨팅환경 변화에도 불구하고, 사고는 여전히 Batch
에 머물러 있다.
문제 정의¶
더 많은 콘텐츠를 더 짧게 소비하는 트렌드와 Batch
는 맞지 않는다.
민첩성(Agility)만 저하되면 다행이련만 지속적으로 증가하는 관리비용은 빚이다.
모든 상품 이미지에 대해 신규 썸네일 해상도를 지원하는데 얼마나 소요될까요?
이번에 나오는 최신 아이폰 해상도에 맞추어 모든 상품기술서를 변경하는데 얼마나 소요될까요?
오늘 밤 새로운 상품이 유입되는데 얼마나 될지 모르겠어요. 내일 아침 서비스에 노출할 수 있을까요?
이상의 질문에 즉시 YES!
라고 대답할 수 있는 새로운 방식이 필요하다.
솔루션¶
M2
는 On the fly
컨셉을 구현한다.
/ |
Batch |
On the fly |
---|---|---|
방식 |
일괄 |
OnDemand |
우선순위 |
없음 |
요청순 |
생산기간 |
|
요청에 의한 시분할 |
실패처리 |
재 |
Purge/해당 콘텐츠 재요청 |
보관 |
스토리지 or 데이터베이스 |
메모리 or 로컬 디스크(분산) |
삭제 |
없거나 별도 작업 |
유효시간(TTL)에 의한 자동삭제 |
검증된 서비스 경험은 Contents Service Patterns 으로 제공된다.
Architecture¶
M2
아키텍쳐 컨셉은 확장성 있는 마이크로 서비스와 손쉬운 통합이다.
구조는 다음과 같다.

각 구성요소의 역할과 책임은 다음과 같다.
Core
- M2 라이프 사이클, RESTful API, 설정관리, 라이선스Runtime
- 서비스 런타임, 가상호스트 관리, 전역자원, 시스템 추상화Modules
- HTTP와 Payload를 다루는 단위 기능 라이브러리Virtual Host
- 가상호스트, 로그, 통계, 세션, 라우팅, 업/다운 스트림Call Chain
- 빌트인, 커스텀, 파이프라인, 외부 자원연계, 분기, 트레이스Workload
- 비지니스 로직, 콘텐츠
Call Chain¶
준비된 모듈을 유연하게 연결하여 Workload를 on the fly로 처리한다.

이렇게 하나의 Workload를 처리하기 위해 연결된 흐름을 콜체인 Call Chain
이라고 부른다.
Call Chain
동작방식은 Open Tracing 의 SPANS 와 TRACE 컨셉으로 이해하면 쉽다.

Call Chain
은 HTTP Transaction
을 처리하는 일종의 Micro Service Bus로 3가지 흐름이 존재한다.
Runtime
에 의한 가상호스트 사이의 연결Virtual Host
내에 사전 정의된 모듈의 연결. 대표적으로 《임의의 외부 이미지를 다운로드/RESIZE 한 뒤 캐싱 서비스한다.》 라면 복잡한 구성없이 모듈 활성화만으로Call Chain
을 구성한다.Virtual Host
내에 사용자가 임의로 구성한 연결. 임의의 비지니스 로직 구현이나 Legacy 연계에 적합하다.
모듈¶
모듈은 HTTP Transaction의 개별 구성요소를 다룰 수 있도록 개발된 단위 기능이다. 모듈의 대분류는 다음과 같다.
Config
- 설정, 라이선스, 클러스터 등Management
- 로그, 통계, API, SNMP 등Network
- DNS, 소켓, 풀링, 헬쓰체커 등HTTP
- 위변조, ACL, URL 전처리 등Payload
- 도큐먼트, 이미지, 비디오 등Traffic
- 바이패스, 쓰로틀링 등Cache
- 메모리/디스크 캐싱, 파일시스템 등Authentication
- URL 암복호화, AWS 인증 등Cloud
- AWS/GCP/Azure 연계APM
- Datadog 등
m2.global¶
cacheEnv¶
m2.vhost.cache
구동환경을 구성한다.
"cacheEnv" : {
"storage" : {
"disks" : [
{ "path": "/cache1" },
{ "path": "/cache2", "quota": 100 },
],
"error": {
"cycle": 60,
"count": 10,
"onCrash": "hang"
},
"cleanUp": {
"diskSize": 0,
"indexCount": 0
}
},
"memory": {
"systemRatio": 100,
"systemFreeRatio": 40
"contentRatio": 50
},
"cleanUp": {
"time": "02:00",
"age": 0,
"emptyDirectory": "delete"
}
"config": {
"retentionDays": 30
}
}
storage¶
-
disks=<LIST>
콘텐츠 저장 디스크 목록
최대 개수 255개
미구성시 메모리 모드로 동작
각 디스크마다 LRU(Least Recently Used)로 용량초과되지 않도록 동작
-
path=<PATH>
디스크 경로
-
quota=<N>
디스크 최대 캐싱 용량(GB)
memory¶
-
systemRatio=<PERCENTAGE>
물리 메모리 사용비율. 예를 들어 8GB인 환경에서 이 값이
50
이라면 4GB로 처리함
-
systemFreeRatio=<PERCENTAGE>
systemRatio
적용 후, 시스템 Free영역비율. 최대40
-
contentsRatio=<PERCENTAGE>
솔루션 가용메모리 중 Contents 적재비율
cleanUp¶
하루 한번 서비스부하가 가장 적은 시간에 디스크 클린업을 수행한다.
-
time=<mm:ss>
시작시간 (기본:
02:00
)
-
age=<N>
0
보다 큰 경우age
기간동안 미접근 콘텐츠 삭제
-
emptyDirectory=<ENUM>
빈 디렉토리 삭제 정책
delete (기본)
삭제keep
유지
config¶
-
retentionDays=<N>
설정 유지기간(일)
미분류 TO DO
¶
<Server><Cache><Listen>
<Server><Cache><MaxSockets Reopen=》75》>80000</MaxSockets>
<Server><Cache><HttpClientSession>
<Server><Cache><EmergencyMode>OFF</EmergencyMode>
<Server><Cache><SyncStale>ON</SyncStale>
Virtual Host Componenets¶
가상호스트 컴포넌트
란 가상호스트에 종속되어 사용되는 컴포넌트를 의미한다.
대표적으로 로그, 통계, DIMS가 존재한다.
Functions¶
함수 체인을 구성하기 위한 개별함수 리스트를 제공한다.
http.buf.contentlength
버퍼링 후Content-Length
헤더를 부여한다.image.split.oversize
일정길이 이상의 이미지를 분할한다.http.render.jpg
웹페이지를 JPG로 변환한다.aws.s3.upload
AWS-S3에 업로드한다.http.src.sslonload
페이지 내 참조된src
를 SSL/TLS로 onloading 한다.http.src.remove.obsolete
페이지 내 유해 엘레멘트를 제거한다.http.page.folding
상품기술서 접기를 구현한다.
API¶
API는 목적에 따라 2가지로 구분된다.
External
- 서비스 관리, 운영 목적의 대고객 APIInternal
- 서비스 컨텍스트 관리, 컴포넌트 연동을 위한 워크로드 처리용 API
Demo¶
서비스 상품별 레퍼런스, 가상호스트 구성, 함수 체인, 데모와 그 아키텍쳐 모음이다.
코어/캐싱엔진
스마트 API
미디어 HLS/trimming
프론트엔진/상품기술서
이미지 처리
스마트배너
마이그레이션 게이트웨이
Tips¶
구현시 주의사항, 팁 모음이다.
DIMS 동작방식과 주의사항
외부 이미지 참조시 배제와 복구정책
Transfer-Encoding: chunked
의 이해가상호스트 링크시점
갱신용 가상호스트 구성패턴
마이그레이션 3원칙