3계층형
3계층형 시스템의 구성도
주요 구성 요소 : 웹 서버, AP 서버, DB 서버
- 세 대의 서버는 스위치를 경유해서 연결돼 있다.
- 각 서버에는 CPU, 메모리, 디스크 등과 같은 하드웨어 부품이 나열되어 있다.
주요 개념 설명
프로세스와 스레드
- 프로세스와 스레드가 활동하려면 메모리 공간이 필요하다. 이것은 커널에 의해 메모리상에 확보된다.
- 즉, 메모리 공간을 가지는 것이 프로세스/스레드이다.
- 스레드는 프로세스의 메모리 공간을 점유한다.
- 각 스레드는 메모리 공간을 공유하고 있다. 그래서 다른 스레드에 이상이 발생하면 영향을 받는다.
프로그래밍 팁
- 프로세스는 독자 메모리 공간을 가지기 때문에 생성 시 CPU 부하가 스레드와 비교해 높아진다. 때문에 멀티 프로세스 애플리케이션에서는 프로세스 생성 부담을 낮추기 위해 미리 프로세스를 시작시켜 둔다. 이 실제 예가 연결 풀링이라 부르는 것이다.
- 쓰레드는 생성시 부하가 낮지만 메모리 공간을 공유하기 때문에 의도하지 않는 데이터 읽기/쓰기가 발생할 수 있다.
OS 커널
- 커널이 존재하기 때문에 개발자는 하드웨어나 다른 애플리케이션에 끼치는 영향을 의식하지 않고 애플리케이션을 만들 수 있다.
커널의 역할
1. 시스템 콜 인터페이스
ㄴ 프로세스나 스레드로부터 명령을 받는 인터페이스
ㄴ 키보드나 마우스 입력은 끼어들기로 처리된다.
2. 프로세스 관리
ㄴ 가동되고 있는 프로세스 관리와 CPU 이용 우선순위 등을 '스케줄'한다
3. 메모리 관리
ㄴ 서버상의 메모리를 단위 크기의 블록으로 분할해서 플세스에 할당한다
4. 네트워크 스택
ㄴ 네트워크를 관리한다
5. 파일 시스템 관리
ㄴ 파일 시스템을 관리한다
6. 장치 드라이버
ㄴ 디스크, NIC, HBA 등의 물리 장치와 작업
시스템 콜 인터페이스
- 프로세스/스레드에서 커널로 연결되는 인터페이스다.
- 시스템 콜이라는 명령을 이용해 커널에 명령을 내린다.
프로세스 관리
- 언제 어떤, 프로세스가 어느 정도의 CPU 코어를 이용할 수 있는지, 처리 우선순위를 어떻게 결정할 것인지 등을 관리한다.
메모리 영역 관리
네트워크 스택
파일시스템 관리
- 물리 디스크에 제공된 데이터를 관리하는 기능이다.
장치 드라이버
웹 데이터 흐름
클라이언트 PC부터 웹 서버까지
- 웹 브라우저가 요청 발생
- 해당 사이트가 어디에 있는지 이름을 해석한 후 결과를 가지고 해당하는 웹 서버에 요청을 보낸다
- 웹 서버의 httpd 프로세스가 요청을 접수한다.
- httpd가 받은 요청 내용을 분석해서 정적인 내용인지 동적인 내용인지 판단한다
- 정적인 정보는 디스크로부터 읽고 동적인 정보는 네트워크를 경유해서 다른 서버에 요청을 보낸다.
ㄴ 동적 콘텐츠는 'AP 서버'가 HTML 파일을 동적으로 생성한다.
웹 서버부터 AP 서버까지
- AP서버에 웹 서버로부터 온 요청은 NIC를 경유해서 커널에 의해 인터럽트 처리된다.
- 스레드가 요청을 받으면 자신이 계산할 수 있는지, 아니면 DB 접속이 필요한지를 판단한다
- 동적 데이터를 가져오기 위해 연결 풀을 이용하여 db에 접속한다.
- db에 보내는 접속 요청도 물론 시스템 콜을 이용한다.
- 네트워크 경유로 db 서버에 대한 질의가 이루어진다.
- 자바를 이용한 ap 서버에서는 JVM(Java Virtual Machine)이라고 불리는 가상 머신이 동작하고 있다.
DB 서버 이외의 옵션
- 규모가 작고 갱신 빈도가 낮은 정보는 JVM 내주에 캐시로 저장해두었다가 반환하는 것이 좋다.
- 반대로 규모가 큰 정적 데이터 전송 시에는 DB 서버 이외에 CDN이라 불리는 데이터 전송 전용 서버를 이용하는 경우도 있다.
AP 서버부터 DB 서버까지
- DB 프로세스가 요청을 접수한다.
- 이전에 사용한 정보는 캐시에 있기 때문에 이 정보를 찾기 위해 일단 공유메모리를 검색한다. (캐시 존재 여부 확인)
- 캐시에 없으면 시스템 콜을 경유해서 디스크에 요청을 던진다.
- 디스크의 데이터는 요청을 보낸 프로세스로 반환된다.
- 한 번 액세스한 데이터는 메모리에 캐시 형태로 저장되고 이후 액세스 시에 재사용된다.
- 요청을 보낸 AP 서버로 데이터를 반환한다.
가상화
가상화란?
- 최근에는 온프레미스에서 가상화 기술을 사용하는 경우가 많다.
- 대량의 컴퓨터를 다루는 클라우드 환경은 가상화 기술을 기반으로 구축된다.
- 가상화란,
컴퓨터 시스템에서 물리 리소스를 추상화 하는 것
OS도 가상화 기술의 하나
가상 머신
- 가상 머신 방식에는 호스트 OS 형과 하이퍼바이저형이 있다.
- 호스트 OS형은 윈도우즈나 리눅스 등의 호스트 os상에 가상화 소프트웨어를 설치해서 이용하는 것으로 vmware server 등이 있다.
- 성능면 제한으로 인해 등장한 것이 하이퍼바이저형
- 하이퍼바이저형은 하드웨어상에서 직접 가상화 소프트웨어를 실행하고 그 위에 가상 머신을 동작시키는 기술
컨테이너의 역사
- '리소스가 격리된 프로세스'
- 하나의 OS 상에서 여러개를 동시에 가동할 수 있으며, 각각 독립된 루트 파일 시스템, CPU 메모리, 프로세스 공간등을 사용할 수 있다.
도커의 등장
참고 ㄲ
https://cultivo-hy.github.io/docker/image/usage/2019/03/14/Docker%EC%A0%95%EB%A6%AC/
클라우드와 가상화 기술
- 하이퍼 바이저 및 컨테이너 등의 가상화 기술은 대규모 웹 서비스에서 사용되고 있다.