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! 라고 대답할 수 있는 새로운 방식이 필요하다.

솔루션

M2On the fly 컨셉을 구현한다.

/

Batch

On the fly

방식

일괄

OnDemand

우선순위

없음

요청순

생산기간

Batch 수행기간

요청에 의한 시분할

실패처리

Batch

Purge/해당 콘텐츠 재요청

보관

스토리지 or 데이터베이스

메모리 or 로컬 디스크(분산)

삭제

없거나 별도 작업

유효시간(TTL)에 의한 자동삭제

검증된 서비스 경험은 Contents Service Patterns 으로 제공된다.

Architecture

M2 아키텍쳐 컨셉은 확장성 있는 마이크로 서비스와 손쉬운 통합이다. 구조는 다음과 같다.

_images/0001.png

각 구성요소의 역할과 책임은 다음과 같다.

  • Core - M2 라이프 사이클, RESTful API, 설정관리, 라이선스

  • Runtime - 서비스 런타임, 가상호스트 관리, 전역자원, 시스템 추상화

  • Modules - HTTP와 Payload를 다루는 단위 기능 라이브러리

  • Virtual Host - 가상호스트, 로그, 통계, 세션, 라우팅, 업/다운 스트림

  • Call Chain - 빌트인, 커스텀, 파이프라인, 외부 자원연계, 분기, 트레이스

  • Workload - 비지니스 로직, 콘텐츠

Call Chain

준비된 모듈을 유연하게 연결하여 Workload를 on the fly로 처리한다.

_images/0002.png

이렇게 하나의 Workload를 처리하기 위해 연결된 흐름을 콜체인 Call Chain 이라고 부른다.

Call Chain 동작방식은 Open Tracing 의 SPANS 와 TRACE 컨셉으로 이해하면 쉽다.

_images/opentracing.png

Call ChainHTTP Transaction 을 처리하는 일종의 Micro Service Bus로 3가지 흐름이 존재한다.

  1. Runtime 에 의한 가상호스트 사이의 연결

    _images/0005.png
  2. Virtual Host 내에 사전 정의된 모듈의 연결. 대표적으로 《임의의 외부 이미지를 다운로드/RESIZE 한 뒤 캐싱 서비스한다.》 라면 복잡한 구성없이 모듈 활성화만으로 Call Chain 을 구성한다.

    _images/0004.png
  3. Virtual Host 내에 사용자가 임의로 구성한 연결. 임의의 비지니스 로직 구현이나 Legacy 연계에 적합하다.

    _images/0006.png

모듈

모듈은 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)

error

cycle 동안 count 만큼 I/O가 실패하면 디스크 배제

cycle=<SEC>

실패 카운팅 주기

count=<COUNT>

최대 실패회수

onCrash=<ENUM>

모든 디스크 배제시 동작방식

  • hang (기본) - 복구없이 동작

  • bypass - 모든 요청 원본 바이패스. 디스크 복구시 서비스 재개.

  • selfkill - 데몬 종료

cleanUp

저장한계 도달시 삭제정책

diskSize=<GB>
  • 미설정시(또는 0) 디스크 용량의 20% 삭제

  • 설정시 해당 용량만큼 디스크 삭제

indexCount=<COUNT>
  • 미설정시(또는 0) 인덱싱 10% 삭제

  • 설정시 해당 개수만큼만 인덱싱 삭제

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 - 서비스 관리, 운영 목적의 대고객 API

  • Internal - 서비스 컨텍스트 관리, 컴포넌트 연동을 위한 워크로드 처리용 API

CLI

리눅스 콘솔의 m2 명령어 모음이다.

m2 init
m2 stop
m2 purge
m2 cluster
m2 vhost
m2 gcomp
m2 vcomp

Demo

서비스 상품별 레퍼런스, 가상호스트 구성, 함수 체인, 데모와 그 아키텍쳐 모음이다.

  • 코어/캐싱엔진

  • 스마트 API

  • 미디어 HLS/trimming

  • 프론트엔진/상품기술서

  • 이미지 처리

  • 스마트배너

  • 마이그레이션 게이트웨이

Tips

구현시 주의사항, 팁 모음이다.

  • DIMS 동작방식과 주의사항

  • 외부 이미지 참조시 배제와 복구정책

  • Transfer-Encoding: chunked 의 이해

  • 가상호스트 링크시점

  • 갱신용 가상호스트 구성패턴

  • 마이그레이션 3원칙