[분산 시스템] 11강 & 12강 - Process (Server cluster, code migration)

드림보이즈·2025년 1월 7일
post-thumbnail

주제 : Server cluster, Code migration

1. Server cluster

서버 클러스터란, LAN 환경에서 연결된 여러대의 서버 머신으로 구성되는 것을 말한다.

일반적으로 3티어로 구성된다.

2티어의 서버들은 서로 다른 서비스들을 돌리고, 1티어의 스위치가 잘 라우팅해줘야 한다.
클라이언트는 여러 서버들을 알 필요가 없다. 딱 하나의 Access point하고만 통신을 하는 느낌을 받아야한다.
이것이 Access Transparency 다.

이 스위치는 로드 밸런서 역할을 할 수도 있는데, 우리가 네트워크에서 배운 일반 스위치보다
더 업그레이드 된 이런 기능을 내장해서 사용한다고 한다.

어쨋든 이 경우 스위치가 모든 요청을 다 받으므로 Single point of failure가 발생할 수 있으니,
여러 AP를 쓰거나 distributed server를 사용할 수 있다.

MIPv6

이동하는 모바일 기기가 있고, 각자 집이 있다고 해보자.
각 집에서 커버하는 네트워크를 Home-agent라고 하고, 그 안에서 쓰는 기기의 주소가 있을 것이다.
내가 이동을 하면, 다른 네트워크를 사용할 것이고, 새로운 주소를 부여받을 것이다.
이 주소를 내가 Home-agent에게 알려주고, 다른 누군가가 home-agent로 나를 찾으면, 이 새로운 주소를 알려주는 방식이다.

딱봐도 알듯 Home-agent에 bottle-neck이 발생할 것이다. 매번 얘를 거쳐야 하니까.
그래서 새로운 주소인 CA를 클라이언트에게 알려줘서, 다음에 요청할땐 direct로 통신하게 하는 것이다.

이는 Access transparency를 어기는 일이다. 그래서 직접 APP한테 알려주는 것이 아니라, client의 app 아래의
middleware에서 저장하게 하고, app은 그냥 늘 먹던대로 통신하는데 아랫단에서 주소 설정을 해주는 방식이다.


이를 가져와서, 여러 클라이언트가 하나의 AP와 통신하는듯 하게, 그러나 여러 서버로 매핑하는 distributed server구현이 가능하다.


2. Code migration

분산 시스템에서의 코드 마이그레이션은 성능 향상을 위해 진행된다.
과부하가 심한 A 머신에서, 덜 바쁜 B로 작업을 이전할 수 있는 것이다.

2-1. Models

Process component model

코드 이전을 위해 3 파트로 나눠서 설명.

  • Code segment : 프로그램 코드
  • Resource segment : 프로세스가 필요로 하는 외부 리소스 참조( 파일, db 연결, 네트워크 리소스)
  • Execution segment : 프로세스의 현재 진행 상태 (변수 상태, 스택, 카운터)

Mobility model

코드의 이동성의 정도를 기준으로 나눌 수 있다.

  • Weak mobility
    - code만 이동해서, 처음부터 실행시키면 되는 간단한 문제
  • Strong mobility
    - 프로그램의 실행 상태를 유지한채 전송되어, 전송한 후 바로 하던거 다음부터 실행, 마치 컨텍스트 스위칭처럼

Mobility model

  • sender-initiated mobility : 송신자 기계에서 이동이 시작
    - 송신자가 이동을 제어하고 전송
  • receiver-initiated bomility : 수신자 기계에서 이동이 시작
    - 수신자가 코드를 요청하거나 다운로드 후 실행

weak mobility에선,
기존 프로세스에서 코드를 실행할 수도 있고,
새로운 프로세스를 생성해서 코드를 실행할 수도 있다.

strong mobility에선,
실행 상태를 전송(VM)하거나, 원격 복제를 해서 작업을 처리(Remote replication)한다.

2-2. Resource segment & Binding Model

위에서 말햇듯 리소스 세그먼트란,프로세스가 필요로 하는 외부 리소스들이다.
파일, 네트워크 리소스 등.
이걸 다른 컴퓨터로 옮기는 것이 가능한가? A의 Socket을 B에서 가져갈 수 있는가?

Process-to-resource binding

프로세스가 리소스를 참조하는 방식에 따라 세가지 바인딩이 있음

  • ID : 특정 리소스를 정확히 필요로 하는 경우이다. TCP 포트, db 엔트리처럼 대체할 수 없는 리소스다. 가장 강력하다.
  • Value : 리소스의 값만 있으면, 다른 리소스라도 대체 가능하다. 마치 현재 시간, 특정 값 처럼
  • type : 특정 유형의 리소스만 필요로 하며, 실행에 영향을 미치지 않으면 동일한 유형의 리소스로 대체 가능, 가장 약하다. 마치 파일 시스템에서 임시 파일 처럼.

Resource-to-Machine binding

리소스가 기계와 얼마나 민접해있는지에 따라 3가지 유형으로 나눌수도 있다.

  • Unattached : 텍스트 문서, 데이터 파일처럼 쉽게 이동 가능
  • Fastened : 이동 가능한데 코스트 많이 들거나 제한적, 로컬 DB, 웹사이트
  • Fixed : 특정 기계나 환경에 연결되어 있어 이동 불가 (하드웨어, 로컬 디바이스, 프린트)

Process-to-resource & Resource-to-Machine Combination

MV : 이동
GR : global reference
CP : Copy
RB : Rebind (여기서 새로 실행)

Global reference

ex 1. 이미지를 많이 쓰는 프로세스
A에 이미지 파일들과, 프로그램이 있다면,
B에 프로그램만 옮기고, 이미지 파일은 A에서 네트워킹으로 받아 쓰면 된다. 이때 필요한게 global reference다. 대신 퍼포먼스는 떨어지겠지.

Ex 2. 프로세스가 소켓을 사용중인 경우
old 머신이 소켓을 통해 다른 기기와 통신을 할 것이다.
new에서는 소켓을 만들긴 하되,
나는 old머신이 메시지 받았을 때 new에게 다시 전달하는 통로만 뚫어주면 된다. 이게 global reference.

2-3. Migration in heterogeneous system

OS고 HW고 다 다를 경우

실행환경(OS)를 옮기면 됨 => VM 같은거 써서

메모리는 어떻게 옮기나?

  • memory page를 옮기고, 이동중에 변견된건 또 옮기고, 반복해서 한다.
  • VM을 중지하고, 이동을 시키고 다시 실행하는 방법.
  • 프로세스를 실행하고 필요할 때마다 요청해서 복사해오는 방법.

profile
시리즈 클릭하셔서 카테고리 별로 편하게 보세용

0개의 댓글