서버 모드가 많아질수록, 즉 서버 클러스터의 크기가 커질수록 고장날 확률이 높아져서 지속적인 관리가 필요하다.
하나의 서버 머신이 고장날 확률을 p, 서버 노드의 개수를 N, 고장날 확률이 독립사건이라고 가정하면
서버가 고장없이 잘 돌아갈 확률은 (1-p)^N이다.
이 때, self-manage가 가능한 서버 클러스터 노드가 개발될 수 있으면 관리가 수월해질 것이다.
Code migration : 실행 중인 프로세스를 다른 머신으로 옮기기
프로세스 부하가 많은 프로세스에서 놀고 있는 머신쪽으로 부하를 옮기면 성능이 향상되므로 code migration 작업이 필요하다.
분산 시스템에서 용량을 최적화하는 일보다 더 중요한 일은 전체 통신 횟수를 줄이는 일(Communication latency)이다.
ex) 서버 단의 입력 폼 체크 기능을 클라이언트 단으로 옮겨와서 확인한다.
-> 서버-클라이언트의 통신 횟수가 줄어들어 전체 delay가 감소한다.
code migration을 사용하면 클라이언트가 실행할 코드를 Code repository에서 받아온다.
code를 다운받는 형태이므로 flexible해진다.
이렇게 되면 분산 시스템을 동적으로 구성할 수 있다. 하지만 security 문제가 발생한다.
프로세스를 이동시킨다고 생각해보자.
프로세스는 크게 세가지 파트로 나눠져있다.
1) code segment
: instruction들의 집합체로,
바뀌지 않는 부분이기 때문에 옮기기 쉽다.
2) resource segment
: OS가 관리하는 resource이다.
특징에 따라서 옮기기 쉬울수도, 옮기는게 불가능한 경우도 있다.
ex) Files, printers, devices, other processes, etc
3) excution segment
: 실행 정보 = 프로세스의 상태정보 = context 정보
이런 데이터는 메모리에 올라가있어서 옮기기 쉽지 않고, 상태가 계속 변한다. 예를들어 메모리 주소값을 옮겨도 의미가 없다.
ex) private data, stack, PC, etc
migration 종류를 두 버전으로 나눌수 있다.
mobility model
- weak, strong
- sender-initiated, receiver-initiated
- Weak mobility
: 간단한 code segment만 옮기는 일이므로 쉽다.
코드가 옮겨가는 타겟 머신이 해당 코드를 실행할 수 있는 환경이 되어있어야한다는 요구사항이있다.
ex) Java applet : 웹 서버에 있다가 웹 브라우저가 요청하면 다운로드된다.
weak mobility에는 두가지 타입이 존재한다.
1) 타겟 프로세스가 직접 코드를 실행하는 경우
2) 타겟 프로세스가 별도의 프로세스로 실행하는 경우
1)은 java applet을 예로 들 수 있고, security 문제가 발생하지만 별도의 프로세스를 만들 필요가 없다.
2)는 성능은 조금 떨어지지만 security 측면에서는 보호가 된다.
- Strong mobility
: code + resource + execution 전체, 즉 프로세스를 이동시킨다.
지금 돌고있는 프로세스를 정지시킨후 이동시켜 다시 실행을 지속할 수 있으면 된다
weak보다 좀더 일반적인 방법이지만, 구현하기 까다롭다.
strong mobility에도 두가지 타입이 존재한다.
1) move : 파일 이동으로 원래 머신에서 지워진다.
2) clone : 파일 복제로 원래 머신에도 있다.
누가 migration을 시작하는가? 에 따라 sender/receiver initiated로 나뉜다.
- Sender-initiated
: 코드가 실행되던 곳에서 migration을 시작된다.
ex) 웹 DB 서버 쪽으로 서치하는 프로그램을 보낸다.
- Receiver-initiated
: 타겟머신에서 migration이 일어난다.
sender는 서버에게 프로그램을 요청할때 권한이 있어야 해서
굳이 비교하자면 sender보다 receiver가 더 간단하다.
'협동분산시스템' 카테고리의 다른 글
Communication (0) | 2019.04.19 |
---|---|
Code migration - 2 (0) | 2019.04.16 |
Servers : Server clusters-3 (0) | 2019.04.16 |
Servers : Server clusters-2 (0) | 2019.04.16 |
Servers : Server clusters-1 (0) | 2019.04.15 |