All
분산 시스템의 개요
분산 시스템이란?
•
크기나 성능이 다를 수 있는 여러 대의 컴퓨터가 네트워크로 연결되어 이루어지는 시스템
→ 물리적으로 떨어진 컴퓨터들이 하나의 시스템처럼 동작함
분산 시스템의 장점
•
자원 공유
◦
각 컴퓨터의 자원을 다른 컴퓨터에서도 사용할 수 있음 (예: 프린터, 저장장치 등)
•
성능 향상
◦
작업을 여러 컴퓨터에 나눠 병렬로 처리하여 처리 속도 향상
•
신뢰성 향상
◦
일부 컴퓨터가 고장나도 다른 컴퓨터가 계속 작업을 수행할 수 있음
•
통신의 편리성
◦
마치 로컬에서 작업하는 것처럼 원격 자원에 접근 가능 (예: 파일 복사)
분산 시스템의 네트워크 구성
완전 연결 네트워크
부분 연결 네트워크
부분연결 네트워크의 구성형태
트리구조 | 스타형 | 링형 | 버스형 | |
통신비용 | 비교적 저렴 | 저렴 | 높음 | 저렴 |
신뢰성 | 노드나 링크 고장시 시스템이 둘이상으로 분리 | 중심 노드 고장시 전체 네트워크 연결 끊어짐 | 하나의 노드나 링크 고장나도 연결 안끊어짐 | 버스 고장나면 전체 네트워크 연결 끊어짐 |
분산 시스템 구축시 고려사항
•
망 구축비용: 사이트들을 물리적으로 연결하는 비용
•
통신비용: 메시지를 보내는 데 필요한 비용
•
신뢰성: 링크나 사이트 고장 시 정상적 동작 가능 정도
네트워크 연결방법
•
근거리 통신망(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 사용과 로컬 프로시저 사용이 구별되지 않아야 함
•
메모리 주소 전달 불가: 서로 다른 주소공간에 속하기 때문에 메모리 주소를 리턴하는 참조호출은 무의미
•
호출 환경 일치 필요: 서버 쪽에서 클라이언트의 호출을 제대로 처리하려면 호출 조건이나 실행 환경이 유사해야 함






