3계층형 시스템
프로세스와 쓰레드
프로세스
- 하나의 프로세스가 동작하고 있으면 내부에서는 메모리 공간을 점유하는 쓰레드 하나가 동작
쓰레드
- 메모리 공간을 공유
이부분은 좀 더 알아보겠습니다.
- 실행 단위 : CPU CORE에서 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념
- 동시성 : 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것처럼 보이는 것
한 프로세스가 실행 되기 위해서 CPU를 점유하고 있으면 다른 프로세스는 실행상태에 있을 수 없습니다.
즉 어떤 A, B 프로그램이 있을 때 A를 실행하고 있을 때 B를 실행할 수가 없습니다.
이렇게 다수의 프로세스를 동시에 실행하기 위해 여러개의 프로세스를 짧은 텀(시분할)을 반복하면서 전환해서 실행한다. 이것을 Context Switching이라고 합니다.
하지만 이러한 컨텍스트 스위칭은 그림을 보면 알다시피 굉장히 부하가 많은 작업이다. 따라서 컨텍스트 스위칭이 잦아지면 오버헤드가 발생하여(비용이 높아) 성능이 떨어집니다.
그래서 등장한게 경량화된 프로세스 버전인 스레드다.
https://balldev.tistory.com/22
thread에 대해서!
프로세스와 쓰레드 프로세스 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다 최소 1개의 스레드(메인 스레드)를 가지고 있다. 쓰레드 프로그램(프로세스) 내에서 실행되는 흐름의
balldev.tistory.com
OS 커널
커널이 os에서 제일 중요!!
- 뒤에서 무슨 일이 벌어지는지 은폐하면서도 편리한 인터페이스를 제공
- 시스템 콜 인터페이스
os를 통해 어떤 처리를 하고 싶으면 시스템 콜 이라고 하는 명령을 이용해 명령
ex) 데이터 읽기, 네트워크 통신
- 프로세스 관리
os에서는 많은 프로세스 가동이 가능하지만 cpu 코어 개수는 적다.
→ 처리 우선순위를 어떻게 결정 할 것인지 관리하는 것이 이 기능의 역할
- 메모리 관리
물리 메모리 공간의 최대치를 고려
독립 메모리 공간을 확보하거나 상호 간의 참조 영역을 지키기 위해 독립성을 관리하는 등의 메모리 관리 역할을 한다.
- 네트워크 스택
- 파일 시스템 관리
물리 디스크에 제공된 데이터를 관리하는 기능
ex) 문서 파일, 엑셀 파일
- 장치 드라이버
디스크나 NIC 등의 물리 장치용 인터페이스 제공
웹 데이터 흐름
client ~ web server - nginx
- 웹 브라우저가 요청을 발행
- 이름 해석
- 웹 서버가 요청 접수
- 웹 서버가 정적 콘텐츠인지 동적 콘텐츠인지 판단
- 필요한 경로로 데이터에 액세스
- 먼저 os의 호스트명, IP주소 변환 테이블을 참조
- 존재하지 않으면 DNS 서버에 요청
- DNS 서버는 트리구조로 되어 있다.
정적 콘텐츠 - 변경 X 데이터
동적 콘텐츠 - 잦은 변경, 서버 내부의 디스크에 저장하면 갱신 빈도가 높기 때문에 디스크 성능이 병목 현상의 원인이 될 수 있다. 그리고 파일로 저장이 비효율적.
이런 동적 컨텐츠는 AP 서버가 HTML 파일을 동적으로 생성
웹 서버부터 AP서버까지
AP 서버가 동적 컨텐츠 요청 처리
- 웹 서버로부터 요청이 도착
- 스레드가 요청을 받으면 자신이 계산할 수 있는지, db 접속이 필요한지 판단
- db접속이 필요하면 연결 풀에 엑세스
- db서버에 요청 던짐
DB 서버 이외의 옵션
JVM 내부에 캐시로 저장해 두었다가 반환하는 것이 좋다.
JVM 데이터가 캐시돼 있으면 바로 데이터를 반환할 수 있어 고속 처리 가능
규모가 큰 정적 데이터 전송 시에 db 서버 이외에 cdn이라는 데이터 전송 전용 서버가 있다.
cdn
- 대량의 데이터 전송 특화
- 데이터 복사본을 배치하는 기술과 병렬 기술을 활용해서 처리를 효율화
AP서버부터 DB 서버까지
- AP 서버로부터 요청이 도착
- 프로세스가 요청을 접수하고 캐시가 존재하는지 확인
- 캐시에 없으면 디스크에 액세스
- 디스크가 데이터 반환
- 데이터를 캐시 형태로 저장
- 결과를 AP 서버에 반환
- DB는 데이터 저장 창고여서 효율적으로 액세스 하는게 중요!
AP서버부터 웹 서버까지
DB에서 데이터가 오고 AP서버의 결과 반환
- DB서버로부터 데이터가 도착
- 스레드가 데이터를 가지고 계산 등을 한 후에 파일 데이터를 생성
- 결과를 웹서버로 반환
웹 서버부터 클라이언트 PC까지
- ap서버로부터 데이터가 도착
- 프로세스는 받은 데이터를 그대로 반환
- 결과가 웹 브라우저로 반환되고 화면에 표시
웹 데이터의 흐름을 정리하면
- 프로세스나 스레드가 요청을 받고
- 요청을 파악해서 필요에 따라 별도 서버로 요청을 보냄
- 도착한 요청에 대해 응답한다.
가상화
- 컴퓨터 시스템에서 물리 리소스를 추상화하는 것
가상 머신 - 컨버팅 하는 과정이 필요
호스트 os형 - 가상화 소프트웨어를 설치해서 이용 - 성능면에서 제한이 있다.
하이퍼바이저형
가상화 소프트웨어를 실행하고 그 위에 가상머신을 동작시키는 기술 - 가상화와 준가상화가 있다.
준가상화 - 가상 환경용 가상 하드웨어를 소프트웨어적으로 에뮬레이션
컨테이너의 역사
컨테이너 - 리소스가 격리된 프로세스
처음에 chroot 이라는 것이 있었음 - 하나의 컴퓨터로 사용, 개발 환경을 사용하면 잘못된 파일로 변경 혹은 삭제할 위험이 있다고 생각 프로세스가 os의 루트 디렉토리 아래에 있는 특정 계층에 접근하지 못하도록 하는 기능으로 다양한 분야에 적용되고 있다.
도커의 등장
파일 시스템 이미지의 패키징과 버저닝이 가능, 컨테이너 이미지를 공유 할 수 있는 도커 등장
도커의 장점
- 컨테이너는 호스트 os와 os커널을 공유하므로 컨테이너 실행이나 정지 속도가 빠르다
- os의 커널을 공유하므로 vm만 사용하는 경우 비교해 한 대의 호스트 머신상에서 훨씬 많은 컨테이너를 실행가능 - 리소스를 한 곳에서 쉽게 관리
- 도커 이미지로 묶어서 공유할 수 있고 특정 환경에서는 재현되지만 자신의 개발 환경에서는 재현되지 않는 문제가 발생하기 어렵다 . - 버그를 효율적으로 수정
클라우드 가상화
클라우드 서비스는 가상머신 서비스, 컨테이너 서비스 등에 많이 사용되고 있음