- peter482431
서버리스

애자일그로스는 서버리스 프레임워크인 Nuclio를 사용하여 MLOps 편집기를 배포하였습니다.
Nuclio를 독립형 Docker 컨테이너로 사용하거나 kubernetes 클러스터 내부에서
사용하는 두 가지 방법이 존재합니다.
저희는 kubernetes 환경을 사용하고 있기 때문에
kubernetes 위에 서버리스를 구축하여 대용량의 데이터를 빠르고 정밀하게 처리하도록 구성했습니다.
Nuclio CI/CD 프로세스

개발 - 배포 과정
spec 관련 yaml 파일을 사용하여 docker image 빌드를 진행합니다.
docker image가 repo에 성공적으로 저장되면 컨트롤러 서비스를 이용하여 kubernetes에 배포 및 service가 생성됩니다.
function pod(function instance)들은 nuclio cli를 통해 관리됩니다.
kubernetes를 통해 function을 호출하고 복제본, 수명 주기, 버전들을 유연하게 관리 가능한 이벤트를 수신합니다.
Nuclio CLI를 활용한 배포
nuclio를 배포하는 방법은 대시 보드를 통한 배포, Nuclio CLI를 통한 배포가 있습니다.
애자일그로스 개발팀은 nuclio CLI를 활용하여 nuclio 배포를 성공적으로 수행했습니다. Docker와 kubernetes 각각의 배포 명령어가 서로 다르기 때문에 많은 주의가 필요합니다.
개발팀이 kubernetes 환경에서 function를 배포한 과정을 간략하게 설명 드리겠습니다.
function 배포
nuctl deploy agilegrowth
agilegrowth 이름의 function를 배포하기 위한 명령어입니다.
platform 명시
nuctl deploy agilegrowth \
--platform kube
--platform kube 옵션을 추가하여 kubernetes 플랫폼을 사용한다고 지정해주었습니다.
--platform local 옵션을 사용한다면 docker 플랫폼으로 실행한다는 의미입니다.
service type 명시
nuctl deploy agilegrowth \
--platform kube \
--http-trigger-service-type NodePort
--http-trigger-service-type NodePort 옵션을 추가하여 function port를 열어주어야 합니다. kubernetes에서는 NodePort를 통해 외부와 통신할 수 있기 때문에 해당 옵션을 추가하지 않는다면 service port가 열리지 않아 오류가 발생합니다.
service의 NodePort가 자동으로 할당되고, HTTP POST를 사용하여 function을 트리거할 수 있습니다. clusterIP는 kubernetes 클러스터의 모든 node IP중 하나가 할당됩니다.
기능이 정상적으로 배포된다면 function pod가 아래와 같이 노출되는 것을 확인할 수 있습니다.

Nuclio 도입 효과
실시간 처리 : CPU/GPU 오버헤드를 최소화하고 병렬 처리로 초당 수십만 개의 HTTP 요청 또는 데이터 레코드를 처리할 수 있습니다. 단일 스레드 문제를 해결하기 위해 Non-blocking 데이터 접근 방식을 사용하여 function이 실시간으로 필요한 데이터에 접근 가능합니다.
GPU 지원이 가능한 프레임워크 : Nuclio는 GPU를 지원하는 최초의 서버리스 플랫폼으로, 다양한 ML 프레임워크와 트리거, 처리 모델과도 잘 통합됩니다.
대시보드 활용 : nuclio는 HTTP를 통해 액세스되는 독립형 마이크로서비스를 제공하며 function 편집, 배포 및 테스트를 위한 GUI 환경을 제공합니다.
트래픽 예측 : Nuclio는 최소 수의 복제본을 구성할 수 있는 기능을 제공합니다. 이를 통해 트래픽이 급증할 경우 Nuclio는 API 호출을 통해 최소 복제본 수를 지정하여 사전에 충분한 리소스를 예약하고 예측 가능한 트래픽에 대처할 수 있습니다.
실시간으로 ML 모델 제공 : ML 모델을 실시간으로 제공하기 위해서는 크기가 큰 모델을 로드하고 작업할 수 있는 기능과 API 지연 시간을 예측할 수 있어야 합니다. Nuclio는 크기 제한이 없는 kubernetes 볼륨과 연결할 수 있으며 까다로운 워크로드를 구현할 수 있습니다.
마치며
Nuclio를 도입하며 서비스 자체를 모듈화하기 수월해지고, 이로 인해 유지 보수 및 관리가 쉬워진 이점이 존재합니다. 특히 유저의 접속량이 빠르게 변화하는 플랫폼을 가지고 있다면 서버리스 아키텍쳐를 사용하여 관리하는 것은 나쁘지 않은 선택이라고 생각합니다.
Nuclio를 더 효과적으로 활용하기 위해 개발팀은 계속 연구하고 있습니다. 앞으로 더 성장하는 애자일그로스가 되겠습니다.
자료출처 : https://nuclio.io/