Search

[운영체제] 분산 시스템

제목
Tag
작성일

분산 시스템의 개요

분산 시스템이란?

크기나 성능이 다를 수 있는 여러 대의 컴퓨터가 네트워크로 연결되어 이루어지는 시스템
→ 물리적으로 떨어진 컴퓨터들이 하나의 시스템처럼 동작함

분산 시스템의 장점

자원 공유
각 컴퓨터의 자원을 다른 컴퓨터에서도 사용할 수 있음 (예: 프린터, 저장장치 등)
성능 향상
작업을 여러 컴퓨터에 나눠 병렬로 처리하여 처리 속도 향상
신뢰성 향상
일부 컴퓨터가 고장나도 다른 컴퓨터가 계속 작업을 수행할 수 있음
통신의 편리성
마치 로컬에서 작업하는 것처럼 원격 자원에 접근 가능 (예: 파일 복사)

분산 시스템의 네트워크 구성

완전 연결 네트워크
부분 연결 네트워크

부분연결 네트워크의 구성형태

트리구조
스타형
링형
버스형
통신비용
비교적 저렴
저렴
높음
저렴
신뢰성
노드나 링크 고장시 시스템이 둘이상으로 분리
중심 노드 고장시 전체 네트워크 연결 끊어짐
하나의 노드나 링크 고장나도 연결 안끊어짐
버스 고장나면 전체 네트워크 연결 끊어짐

분산 시스템 구축시 고려사항

망 구축비용: 사이트들을 물리적으로 연결하는 비용
통신비용: 메시지를 보내는 데 필요한 비용
신뢰성: 링크나 사이트 고장 시 정상적 동작 가능 정도

네트워크 연결방법

근거리 통신망(LAN, Local Area Network)
→ 하나의 건물이나 캠퍼스처럼 제한된 지역 내에서 사용
빠른 속도
좁은 담당 면적 (회사 내부, 가정용 네트워크 등)
설치 및 유지 비용이 비교적 적음
낮은 혼잡도, 짧은 지연 시간으로 실시간 처리에 유리
원거리 통신망(WAN, Wide Area Network)
국가나 대륙 단위로 넓은 지역에 걸쳐 있는 네트워크
상대적으로 느린 속도 (수십 Mbps ~ 수백 Mbps)
광범위한 담당 면적 (인터넷, 기업 간 VPN 등)
전용선, 라우터 등으로 인해 비용이 많이 듬
높은 혼잡 가능성, 지연 시간도 상대적으로 큼

분산 운영체제

분산 시스템 전체를 하나의 시스템처럼 관리해 주는 운영체제
투명성 제공
사용자에게 로컬과 원격의 구분 없이 하나의 통합된 시스템처럼 보이게 함
로컬 자원과 원격 자원의 구분을 없앰
원격 자원 접근에 필요한 일들을 분산 운영체제가 자동으로 처리

자원 사용 최적화를 위한 이주(Migration)

분산 환경에서는 자원과 작업이 여러 컴퓨터에 흩어져 있어 무엇을 어디서 실행할지를 잘 결정하는 것이 성능에 큰 영향을 줌
분산 운영체제는 시스템 상태를 모니터링
어느 노드가 더 바쁜지
어디에 데이터가 있는지
어떤 노드에 여유가 있는지
이를 바탕으로 작업이나 데이터를 적절한 위치로 옮기는 마이그레이션을 수행함
이주(Migration) 방식
작업이나 데이터를 필요한 위치로 옮겨서 효율성을 높이는 기법
데이터 이주 (Data Migration)
필요한 데이터를 로컬로 가져와서 작업을 수행
예: 원격 서버에 저장된 파일을 내 컴퓨터로 다운로드해서 처리
계산 이주 (Computation Migration)
계산을 원격 서버에서 수행하고 결과만 전달
예: 클라이언트가 요청만 보내고, 서버에서 계산 후 결과만 받아옴 (RPC 사용)
프로세스 이주 (Process Migration)
실행 중인 프로세스 자체를 다른 컴퓨터로 옮김
예: 현재 실행 중인 작업을 부하가 적은 서버로 옮겨서 계속 실행
부하 분산, 처리 성능 향상에 유리

분산 파일 시스템 Distributed File System

분산 환경에서도 파일을 로컬처럼 사용할 수 있게 해주는 시스템
클라이언트가 원격 파일을 마치 로컬 디스크에 있는 파일처럼 접근할 수 있게 함
파일이 실제로는 다른 컴퓨터에 존재하더라도, 사용자는 디렉터리 탐색, 파일 열기/읽기/쓰기 등을 일반 파일 시스템처럼 수행 가능

분산 파일 시스템의 네이밍 방식

네트워크상의 파일을 어떻게 식별하고 접근할 것인지
호스트 이름 + 로컬 경로 방식
host:local_path 형식으로 접근
예: server1:/data/file.txt
원격 디렉터리를 로컬 디렉터리에 마운트하는 방식
로컬 경로에 원격 파일 시스템을 연결하여 접근
예: mount -t nfs 10.10.10.10:/backups /var/backups
/var/backups 디렉터리를 사용하면 자동으로 원격 서버의 /backups에 접근됨

원격 파일에 대한 요청처리

RPC 이용 → 하단에 상세 설명 있음
캐시(Cache)를 이용
원격 파일 접근은 네트워크 지연이 크기 때문에 자주 사용하는 데이터를 로컬에 임시 저장하여 성능을 높임
장점
성능 향상: 매번 네트워크를 거치지 않고 빠르게 데이터 접근 가능
네트워크 부하 감소: 같은 요청을 여러 번 보내지 않아도 됨
오프라인 접근 가능: 일정 범위 내에서 네트워크 없이도 파일 작업 가능
단점
일관성 문제: 원격지 파일이 변경돼도, 로컬 캐시가 오래된 데이터를 들고 있을 수 있음
공간 제약: 캐시 공간이 제한적이므로 큰 파일이나 많은 요청이 들어오면 효율 떨어질 수 있음

분산 메모리

분산 시스템에서 원격 시스템의 메모리를 효율적으로 접근할 수 있게 하는 방식

원격 메모리

한 노드의 프로그램이 다른 노드의 메모리에 직접 접근할 수 있도록 API를 제공
프로세스는 로컬 메모리 인터페이스를 통해 메모리에 접근
필요한 경우 Remote Memory API를 호출해 네트워크를 통해 원격 노드의 메모리에 접근
이를 통해 분산된 메모리를 통합된 공간처럼 활용할 수 있음

분산 공유 메모리 (DSM, Distributed Shared Memory)

물리적으로 분리된 여러 노드의 메모리를 하나의 논리적인 공유 메모리처럼 접근할 수 있게 하는 구조
운영체제나 미들웨어가 페이지 단위로 데이터를 동기화하거나 복사하여 일관성 유지
장점
노드 수가 늘어나도 확장성이 뛰어남
메모리 공유 작업을 운영체제가 자동 처리 → 프로그래머가 직접 신경 쓸 필요 적음
대용량 데이터 처리나 분산 연산에 적합
멀티프로세서 시스템 대비 비용 효율적
가상 메모리 공간을 매우 크게 확보할 수 있음
단점
로컬 메모리보다 접근 속도가 느림
동시 접근 시 데이터 충돌이나 일관성 문제 발생 가능
성능 튜닝이 어렵고, 잘못 설계하면 오히려 병목이 생길 수 있음
일관성 유지 메커니즘 구현이 복잡하거나 과도한 통신을 유발할 수 있음

NUMA(Non-Uniform Memory Access)

각 프로세서가 자기만의 로컬 메모리를 갖는 분산 공유 메모리
모든 메모리가 공유는 가능하지만, 접근 속도는 메모리의 위치(로컬/원격)에 따라 달라짐
각 CPU는 자신의 로컬 메모리에는 빠르게,
다른 CPU의 원격 메모리에는 상대적으로 느리게 접근
운영체제는 이 차이를 고려해 스레드를 로컬 메모리에 가까운 CPU에 배치하려고 함

원격 프로시저 호출(Remote Procedure Call RPC)

네트워크로 연결된 다른 컴퓨터에 있는 프로시저(함수)를 마치 로컬에서 호출하는 것처럼 실행할 수 있게 해주는 기법

RPC의 동작

1.
클라이언트가 로컬 스텁 함수를 호출
2.
스텁이 매개변수를 직렬화(serialize) 하여 메시지로 변환
3.
네트워크를 통해 원격 서버로 전송
4.
서버 측 스텁이 메시지를 역직렬화(deserialize) 하여 실제 함수 실행
5.
결과를 다시 메시지로 만들어 클라이언트에 전송
6.
클라이언트 스텁이 결과를 받아서 호출자에게 반환
스텁(Stub) 함수란?
RPC에서 실제 원격 함수 대신 호출되는 함수
네트워크 통신, 직렬화/역직렬화 등 내부 처리를 자동으로 담당하는 함수
클라이언트 입장에서 마치 로컬 함수 실행하는 것처럼 보이게 해줌

RPC 구현시 고려사항

이상적으로는 RPC 사용과 로컬 프로시저 사용이 구별되지 않아야 함
메모리 주소 전달 불가: 서로 다른 주소공간에 속하기 때문에 메모리 주소를 리턴하는 참조호출은 무의미
호출 환경 일치 필요: 서버 쪽에서 클라이언트의 호출을 제대로 처리하려면 호출 조건이나 실행 환경이 유사해야 함