핵심 개념

여기서는 이 문서를 이해하고 따라오는데 반드시 필요한 주요 개념들을 설명합니다.

../_images/server-architecture.svg

그림 1 멀티 노드 상의 Backend.AI 서버 구조 다이어그램

그림 1 은 설치하고 설정해야 할 구성요소인 Backend.AI 서버 단의 구조를 간략하게 보여줍니다.

Each border-connected group of components is intended to be run on the same server, but you may split them into multiple servers or merge different groups into a single server as you need. For example, you can run separate servers for the nginx reverse-proxy and the Backend.AI manager or run both on a single server. In the development setup, all these components run on a single PC such as your laptop.

관리자와 에이전트

Backend.AI 관리자는 클러스터의 중앙 제어를 담당합니다. 관리자는 사용자의 요청을 수락하거나, 세션을 생성/삭제하거나, 코드 실행 요청을 적절한 에이전트와 세션에 라우팅하는 역할을 담당합니다. 관리자는 세션의 출력 값을 수집하고, 이 출력값을 이용하여 사용자에 응답하는 역할을 수행합니다.

Backend.AI 에이전트는 각각의 워커 서버를 관리하기 위해 설치되는 작은 데몬입니다. 에이전트는 커널 컨테이너의 생명주기를 관리하고 모니터링하며, 세션의 입/출력을 중재하는 역할을 수행합니다. 각 에이전트는 담당하는 서버의 자원 용량과 상황을 제공함으로써 관리자가 로드 밸런싱을 위해 유휴 서버에 새로운 세션을 할당할 수 있도록 합니다.

세션과 커널 컴퓨팅

Backend.AI는 사용자 API 요청에 따라 컴퓨팅 세션을 컨테이너의 형태로 생성합니다. 각 컴퓨팅 세션은 (여러 노드에 분산되어 있는) 한 개 이상의 컨테이너를 가질 수 있으며, 이러한 멤버 컨테이너들을 “커널” 이라고 부릅니다.이러한 다중 컨테이너 세션은 대규모 분산 및 병렬 컴퓨팅에 사용됩니다. 에이전트는 필요에 따라 자동으로 커널 이미지를 가져오고 업데이트합니다.

클러스터 네트워킹

기초적인 네트워킹 요구 사항은 다음과 같습니다:

  • 관리자 서버 (HTTPS 443 포트) 는 반드시 공용 인터넷 또는 여러분의 클라이언트가 접근할 수 있는 네트워크에 열려 있어야 합니다.

  • 관리자, 에이전트와 기타 데이터베이스/저장소 서버는 상호간의 트래픽이 투명하게 허용되는 로컬 비공개 네트워크에 같이 함께 상주하여야 합니다.

  • 대용량의 빅데이터 처리의 경우, Infiniband와 RoCE 어댑터 등을 사용하면 각 서버의 보조 네트워크 인터페이스를 이용하여 저장소를 위한 네트워크를 분리할 수 있습니다.

데이터베이스

에이전트와 (하나 이상의 커널로 구성된) 컴퓨팅 세션의 수명을 추적하기 위해 Redis와 PostgreSQL이 사용됩니다. 이 서비스들은 키 페어와 자원 사용 현황 등 사용자 메타데이터를 저장하는 데에도 사용됩니다.

설정 관리

대부분의 클러스터 단계 설정들은 etcd 서버 또는 클러스터에 저장됩니다. etcd 서버는 서비스 복구에도 사용됩니다; 새로운 에이전트가 실행될 경우, 에이전트들은 etcd를 통해 스스로를 클러스터 매니저에 등록합니다. 배포 환경의 경우 높은 기용성을 위해 홀수 개 (3개 이상) 의 노드로 구성된 etcd 클러스터를 사용하는 것이 좋습니다.

가상 폴더

../_images/vfolder-concept.svg

그림 2 두 NFS 서버를 vfolder 호스트로 사용하는 경우의 가상 폴더 개념도

그림 2 에서도 확인할 수 있듯이, Backend.AI는 네트워크 저장소를 “가상 폴더” 로 추상화하여 각 사용자에게 클라우드와 비슷한 형태의 개인용 파일 저장소를 제공합니다. 사용자는 개인별 (하나 이상의) 가상 폴더를 생성하여 데이터 파일, 라이브러리와 프로그램 코드를 보관할 수 있습니다. 각 vfolder (가상 폴더) 는 지정된 저장소 마운트 (“vfolder hosts”) 하위에 생성됩니다. 가상 폴더는 /home/work/{name} 에 존재하는 컴퓨팅 세션 컨테이너에 마운트되며, 사용자의 프로그램은 가상 폴더의 내용물들을 로컬 디렉토리와 같이 접근하여 사용할 수 있습니다. Backend.AI v18.12부터는, 사용자들이 각자의 가상 폴더들에 읽기 전용, 쓰기 전용 등 다양한 권한을 부여하여 다른 유저와 공유할 수 있습니다.

파일 시스템 내용물은 모든 노드에 동기화되므로, Backend.AI 클러스터 설정은 (관리자와 에이전트를 포함한) 각 노드의 로컬 마운트 지점을 제공하는 모든 파일 시스템을 사용할 수 있습니다. 이를 위한 유일한 요구 사항은, 로컬 마운트 지점이 반드시 모든 클러스터 노드에서 동일해야 한다는 것입니다. (예를 들면, /mnt/vfroot/mynfs 와 같이 말이죠) 일반적인 설정으로는 (NFS 또는 SMB를 통해 제공되는) 중앙 집중식 네트워크 저장소를 사용합니다만, 높은 확장성을 위해 CephFS나 GlusterFS, Alluxio와 같이 AWS S3과 같은 개별 저장소에 백업되면서 빠른 in-memory 캐시를 지원하는 분산 파일 시스템 또한 사용할 수 있습니다.

단일 노드 설정을 위해, 간단하게 빈 로컬 디렉토리를 사용할 수도 있습니다.