Search

4주차

4. 인프라를 지탱하는 기본 이론

4.1 직렬/병렬

4.1.1 직렬/병렬이란?

병목지점때문에 단순히 병렬화를 많이한다고 성능이 늘어나진 않습니다.
직렬/병렬의 중요사항은 다음과 같습니다.
직렬 처리로 속도를 올리는 데는 한계가 있습니다.
병렬화를 통해 속도는 빨라지지 않지만, 단위 시간당 처리량을 늘릴 수 있습니다.
병렬 처리에서는 합류점, 직렬화 구간, 분기점이 병목 지점이 되기 쉽습니다.
병렬화할 때는 일을 분담해서 처리를 한 후 다시 집약할 때 오버헤드가 걸립니다. 그러므로 오버헤드를 감안하더라도 효과가 있을 경우에 병렬화 해야합니다.

4.1.2 어디에 사용되나

웹 서버와 AP 서버에서의 병렬화
AP 서버에서는 JVM 프로세스가 하나지만 복수의 스레드가 병렬로 처리합니다. Apache HTTP server에서는 멀티 프로세스와 멀티 스레드를 모두 이용하는 하이브리드형도 있습니다. JVM 프로세스는 복수 가동하면 멀티 프로세스와 멀티 스레드를 이용할 수 있습니다.
DB 서버에서의 병렬화
오라클 DB에서는 클라이언트 요청을 접수하는 서버 프로세스가 클라이언트 접속 수 만큼 생성됩니다. 병목이 발생하는 경우 메모리에 캐시된 갱신 완료 데이터를 HDD에 기록하는 DBWR 프로세스 수를 늘려서 병렬화할 수도 있습니다. 이외에도 비동기 I/O를 사용해서 OS 측에서의 쓰기 처리를 병렬화하는 방법도 있습니다. 이는 I/O 요구를 발행한 후 끝날때까지 기다리지 않고 다음 I/O를 계속 발행해가는 방식입니다.

4.1.3 정리

직렬
장점: 구조가 간단해서 설계나 구현 난이도가 낮다
단점 : 복수의 리소스를 유용하게 사용할 수 없다.
병렬
복수의 리소스를 유용하게 이용할 수 있으며, 시간당 처리 양이 증가하고, 고장이나도 처리를 지속할 수 잇습니다.
오버헤드가 발생하고, 구조나 제어가 복잡해집니다.
병렬과 병행의 차이
병렬 : 동시에 복수의 처리
병행 : 복수의 처리가 실행 상태에 있는것

4.2 동기/비동기

4.2.1 동기/비동기란?

동기 : 누군가에의 일이 끝나길 기다리는 것
비동기 : 끝나는 알림을 기다리는것

4.2.2 어디에 사용되나?

구글 검색 비동기 예시
DBMS에서 사용되는 비동기 I/O
DBMS는 HDD등의 저장소에 비동기로 쓰기 처리를 할 수 있습니다. 이것을 비동기 I/O라고 합니다. 이는 대량의 I/O를 효율적으로 처리해야 하는 DBMS에 적합합니다.
단, 비동기 I/O로 하더라도 저장소 성능 이상의 속도로는 빨라지지 않습니다.

4.2.3 정리

동기
장점 : 구조가 간단하고 구현 난이도가 낮음
단점 : 대기 시간 활용 불가
비동기
장점 : 의뢰한 처리가 진행되고 있는 동안 시간을 효율적으로 사용해서 병렬처리 가능
단점 : 불필요한 확인처리와 구조가 복잡해 난이도가 높음

4.3 큐

4.3.1 큐란?

대기행렬로 FIFO라고합니다.

4.3.2 어디에 사용되나?

CPU 처리를 기다리고 있는 프로세스나 스레드 행렬
하드 디스크 등의 저장소 읽기 처리를 기다리고 있는 I/O 요구 행렬
네트워크 접속 성립을 기다리고 있는 접속 요구 행렬
CPU를 기다리고 있는 프로세스 행렬을 런큐라고 하는데, OS 커널에서는 프로세스 스케줄러의 기능이 런큐를 관리합니다.
데이터베이스의 디스크 I/O
아래 그림과 같이