Zero to Hero
Published 2021. 4. 23. 12:51
Docker 01 Programming

가상화

  • CPU, 메모리 등 내가 가지고 있는 자원을 논리적인 형태로 묶는 행위

가상화 등장 배경

기존 상황

  • 메일 서비스, 백업 서비스의 2개의 서비스를 운영해야 한다고 가정해보자.
  • 그럼 단순히 보면 메일 서비스를 위한 서버 1대, 백업 서비스를 위한 서버 1대, 총 2대의 서버가 필요하다.
  • 그래서 2대의 서버를 운영 중이다.

문제점

  • 비효율적이다.
      1. 실제로 한 서비스에 할당된 서버 자원이 좀 지나치게 풍부하다.
      1. 서비스 특성상 피크 타임이 다르다.
      1. 메일 서버는 일과 시간에, 백업 서버는 밤에 리소스 사용량이 많다. 그래서 메일 서버는 밤에는 놀고, 백업 서버는 낮에 논다.
      1. 결국 내가 가진 자원이 굉장히 비효율적으로 사용되고 있는 상황이다.
  • 즉 내 자원에 대한 Utilization이 굉장히 떨어진다.
  • 그럼에도 불구하고 서비스는 계속해야 하니깐 서버 2대에 대한 유지 비용은 계속 나간다.

해결법

  • 가상화 도입하자
    • 서버의 자원은 크게 4가지가 있다.
      • CPU
      • Memory
      • Disk I/O
      • Network I/O
    • 이 자원의 일부를 가상화해서 분리하고(-> 가상 머신을 사용해서)
    • 그 위에 독립적인 OS를 올려서 메일 서비스와 백업 서비스를 올린다.
    • 이렇게 하면 자원을 효율적으로 활용해서 서비스를 할 수 있다.

가상화의 문제점

지나친 레이어

  • 가상화를 하게 되면 호스트 OS, 하이퍼바이저, 게스트 OS를 거쳐서 서비스(프로세스) 계층으로 진입한다.
  • 즉 실제 하드웨어 리소스를 접근하기 위한 레이어가 많아진다.
  • 또 각 서비스마다 독립적인 게스트 OS를 할당하는 과정에서 중복되는 레이어도 발생한다
  • 하드웨어 위에 호스트 OS 없이 하이퍼바이저가 바로 올라가는 반가상화를 생각해볼 수 있지만, 커널 레벨의 조작이 필요해 일반적인 PC에선 쉽게 사용할 수 없다.

결론

  • 가상화는 대안이 될 순 있지만 여전히 문제점이 있다.
      1. 자원을 가상화하기 위한 오버헤드
      1. 여러 레이어를 통과해야 하는 오버헤드 (특히 I/O가 많은 서비스의 경운 가상 머신을 사용하는 것이 성능 저하의 원인이 되기도 함)

도커(Docker)

요약

  • 리눅스 컨테이너 기술을 응용,
  • 프로그램이 동작하기 위해 필요한 모든 것을
    • 라이브러리
    • 바이너리
    • 코드
    • 런타임
    • 기타
  • 컨테이너(container)라는 하나의 공간에 전부 넣고 리눅스 OS 위에 올리는 기술

포인트

    1. 격리 (namespace)
    • 컨테이너끼리의 접근을 원천 봉쇄
    • 컨테이너 각각이 마치 독립적인 서버에서 돌아가는 것처럼 하게 한다.
    • 실제로 컨테이너 내부에서 프로세스 목록을 조회하면 다른 컨테이너의 프로세스는 조회할 수 없다.
    1. 자원 할당 (cgroup)
    • 최대 할당되는 지원을 제약
    • 컨테이너 간 유동적으로 하드웨어 자원을 효율적으로 활용

장점

  1. 게스트 OS가 없기 때문에 부팅할 필요가 없다.
  2. 부팅하지 않아도 되니깐 서비스 시작도 빨리된다.
  3. 계층이 줄어들어서 전체 서비스 구조가 단순해지고 훨씬 가벼워진다.
  4. 하드웨어 가상화만을 하기 때문에 성능 측면에서도 확실히 좋아진다. (I/O를 위해서 거치는 레이어가 줄어들었기 때문)

'Programming' 카테고리의 다른 글

Spring Study 01  (0) 2021.04.27
Docker 02  (0) 2021.04.23
M1 맥북에서 Docker + Tomcat 이미지 사용하기  (0) 2021.04.17
/dev/null 2>&1  (0) 2021.04.05
Crawling with Selenium & BeautifulSoup  (0) 2021.04.05
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!