고급분산시스템 기말고사 문제 샘플

1. Request-reply communication 방식을 사용하는 client와 server 시스템이 있다.

Client가 server에게 request message를 보낸 후, 이 message가 제대로 전달되는 것을 보장하기 위해 할 수 있는 일들을 설명하시오.

retransmit request message 방식을 이용해서 server에서 요청 메시지에 대한 응답 메시지를 Client에게로 정상적으로 전송할 때까지 계속해서 요청 메시지를 보내는 방식을 사용할 수 있다.

Server가 어느 client로부터 request message를 수신하여 처리하고 있는 도중에, 그 client로부터 같은 request를 다시 수신하는 상황이 언제 어떤 상황에서 발생할 수 있는지, 그럴 경우 server는 어떻게 동작해야 하는지 설명하시오.

같은 request를 다시 수신하는 상황: 서버가 잠시 정지 상태이거나, 네트워크 환경이 불안정하여, 클라이언트의 요청이 바로 전달되지 못했기 때문에, 클라이언트는 정상적인 시간 내에 서버로부터 응답 메시지를 받지 못했고 그렇기 때문에 retransmit request message 방식으로 요청을 중복해서 보내게 된다. 이런 상황일 때 서버는 중복된 요청 메시지를 받게 된다.

server에서의 동작 방식: 이렇게 중복된 요청 메시지를 클라이언트로부터 받게 될 경우, 서버는 Duplicate filtering을 수행해서 중복된 메시지를 실행하지 않는 방식을 채택할 수 있다.

Server가 request에 대한 처리를 마치고 reply message를 보낸 후 그 client로부터 같은 request를 다시 수신하는 경우, server의 처리 방법을 제안하시오.

re-execute가 문제가 되지 않는다면, 한번 더 실행해서 그 실행결과를 보내주어도 된다. 하지만, 이러한 것이 문제가 된다면, 이전에 실행한 결과를 history에 저장 시켜 놓았다가, 그 실행 결과만을 재전송하는 방식으로 처리한다. 이렇게 할 경우 중복된 요청에 대해서 한번만 실행을 하게 된다.

2. 분산된 자원을 공유하기 위해서는 배타적 이용(mutual exclusion) 또한 보장되어야 한다. 이런 방식들에는 중앙 서버에 의한 방식과 분산 방식이 있을 수 있다. 분산 mutual exclusion 방식 하나를 간단히 기술하고 이 방식과 중앙서버에 의한 방식과의 장단점을 서술하시오.

분산 mutal exclustion 방식 하나를 간단히 기술

Ring-based algorithm:

이 방식은 추가적인 정렬 과정 없이 N개의 프로세스들이 연결되어지는 형태를 말한다. 이 방식에서는 단시 각각의 프로세스들이 인접한 프로세스들과의 커뮤니케이션 채널만을 필요로 한다. 이 방식은 critical section에 들어가기 위한 token의 획득이 단일 방향으로 구성된 인접한 프로세스들로부터 받는 형태를 가진다. 즉, 시계방향으로 token을 전달 받게 된다.

Ring-based algorithm과 중앙서버에 의한 방식과의 장단점 서술

Ring based algorithm의 장점: 중앙서버와 같은 추가적인 프로세스 없이 간단하게 구현 할 수 있는 방법이다.

단점:

critical section에 프로세스가 들어가 있을 때를 제외하고 계속해서 network bandwith를 사용하게 된다. 왜냐하면, 어떠한 process들도 critical section으로의 진입을 요구하지 않는다면, token은 계속해서 ring형태로 순환하기 때문이다.

중앙서버 방식의 장점: 가장 간단한 방식으로 분산환경에서 mutual exclusion을 구현 했다.

중앙서버 방식의 단점:

첫 번째 단점은 ordering에 있어서 안전하지 않다.

두 번쨰 단점은 프로세스들은 중앙서버로 request를 보내야하고, 또 critical section에서 나올 경우 release message를 보내야한다. 이러한 message passing 방식에 기반 하기 때문에  메시지들에 대한 round-trip 딜레이가 발생한다. 따라서 시스템 전체에 bottleneck이 발생한다.

3. 분산 file system의 성능을 향상시키기 위한 방법으로 caching을 이용할 수 있다.

Client, server측에서 적용할 수 있는 caching 방식을 설명하시오.

Server Caching: 최근에 읽은 디스크 블럭을 서버에서 유지하고 있는 것을 말한다.

읽는것은 문제가 없다. 하지만 쓰기에서 문제가 발생한다. 따라서 두 개의 선택적인 동작이 가능 하다.

1) Write-through operation

서버가 현재 캐쉬에 데이터를 업데이트하고, 즉시 디스크에도 업데이트 하는 방식

2) Delayed-write

Write-through으로 인한 bottleneck을 해결하기 위한 방법이다.

서버는 단지 현재 캐쉬에 데이터를 업데이트 한다.

디스크에는 commit operation을 받았을 때 디스 에 저장 한다.

Client Caching: client 모듈은 read, write, getattr, lookup, readdir operation 결과를 캐쉬에 저장한다. 이를 통해서 서버에 전송하는 request의 수를 줄일 수 있다.

Caching과 file service reliability와의 관계를 설명하시오.

-> Caching은 서버와 클라이언트의 작업 수행 속도를 줄일 수 있다는 큰 장점을 가지고 있다.

하지만 이러한 Caching은 file service reliability를 감소 시킨다.

server의 경우 caching을 사용하는 경우 쓰기 작업을 수행하는

시간과 실제 디스크네 쓰는 시간이 다르기 때문에 디스크의 정보가 최근 정보가 아닐 수 있다.

또한 client의 경우도 모든 클라이언트들에 cache에 저장한 값이 다 같을 수는 없다. 즉, 어떤 클라이언트가 자신의 cache중 어떤 값을 변경 했을 때 신뢰성 문제가 발생한다.

둘 이상의 client가 한 file을 update할 때의 문제점 및 해결방안을 서술하시오.

-> 들 이상의 client가 한 file을 update하면 자신이 update했기에 캐쉬에 저장했던 값이 다른 client의 update로 인하여 실제 file 값과 달라지는 문제점이 발생한다.

따라서 이러한 문제점을 해결하기 위해서는 각 client들 서버의 데이터와 client 캐쉬의 데이터의 같은 지를 계속 폴링하며 확인해야 한다.

하지만 이런 polling 방식은 시간을 낭비한다는 문제점이 있다. 이러한 문제점을 해결한 방식이 callback promise다. callback promise는 client가 파일을 업데이트를 하면 그 파일 캐쉬에 저장하고 있는 다른 client는 callback을 받게 되고 callback을 받았을 때만 자신의 캐쉬 값을 수정하면 된다.

4. 다음은 Needham-Schroeder의 secret-key authentication protocol이다.

(1) 2번 과정을 설명하시오.

-> S는 A의 비밀 키로 암호화된 메시지를 A에게 보내다. 메시지 안에는 새로 만들어진 key KAB 와 B의 비밀키로 암호화된 티켓이 들어 있다. 또한 nonce NA 를 넣어 이것이 A의 요청에 의해 반환된 메시지 인 것을 입증한다.

1번에서 A는 B와의 커뮤니케이션을 위해서 S에게 Key를 달라고 요청했다.

S는 A가 가지고 있는 비밀키를 이용해서 암호화된 메시지를 리턴 한다. 그 메시지의 내용은 다음과 같다. 이 메시지는 Kb로 암호화 되어있다. 그 암호화된 메시지에는 Kab와 A가 있다. 여기서 Kab는 A와 B의 통신을 위해서 S가 새롭게 생성해준 공유 키이다. 그리고 A는 중요한정보(ticket)이다.

그리고 추가적으로 Na가 있다. 이것은 A->S를 할때 보낸 nonce 값이다. 따라서 이것을 S->A 메시지 않에 추가해서 넣어주면, A의 요청에 대한 S의 응답이라는것이 증명되는 것이다. 즉, 딴놈이 가짜로 응답한는것을 막을 수가 있다. 또한 S 만이 A의 비밀키를 알고 있기 때문에 이 메시지가 S에게서 보내졌다고 믿을 수 있다.

(2) 5번 과정에서 {NB }KAB 를 보낼 경우, 이 방식이 안전하지 못하게 되는 이유를 설명하시오.

1. A -> S:   A, B, NA

2. S -> A:  {NA , B, KAB, {KAB, A}KB}KA

3. A -> B:  {KAB, A}KB

4. B -> A:  {NB}KAB

5. A -> B:  {NB – 1}KAB

-> 만약 5번과전에서 {NB }KAB를 보내는 방식이라면 NB 의 값을 몰라도 4번 단계의 날아가는 메시지를 중간에 가로채서 B에게 보내게 되면 B는 메시지가 제대로 들어왔다고 생각하게 되어 보안이 뚫리게 된다. 하지만 {NB – 1}KAB  로 할 경우 NB 값을 알아야만 하므로 더 안전하다고 할 수 있다.

5. Message-oriented middleware 와 remote procedure-call 기반 미들웨어의 특징을 각각 간단히 서술하고 장단점을 비교하시오.

가. Message-oriented middleware

상이한 애플리케이션 간 통신으로 일반적으로 비동기 방식으로 지원하는 메시지 전달을 기반으로 한 것을 가리킨다. message queue를 이용하여 전달된 메시지가 활성화 될 때 까지 수집하고 저장한다.

- 동기식/비동기식 모두를 지원 (그러나 대부분 큐를 사용한 비동기적방식 사용)

- Non-blocking

- 큐를 이용하여 한쪽 에플리케이션으로부터 다른 쪽 에플리케이션으로 메시지 전송

- Message queue API 제공

- 베이스 스테이션 결함 허용

- 환경 설정 간단함

나. remote procedure-call

하나의 프로그램이 네트워크에 연결되어있는 다른 컴퓨터에서 서브루틴이나 프로시저를 실행할 수 있도록 한 IPC(프로세스간의 통신)이라고 할 수 있다. 쉽게 말하면, 내 프로그램이 다른 컴퓨터에서 실행되고 있는 프로그램 내의 함수를 실행할 수 있도록 하는 것이다. 일종의 서버 클라이언트 개념이다.

- 동기식 방식

- sender와 receiver 모두 동시에 on-line상태야 통신이 가능하다.

- 함수 처리결과가 올 때까지 blocking상태이다.

다. 장/단점

RPC는 동기식 방식 통신으로 즉각적이고 빠른 통신이 필요한 경우에 적합하다. 은행 창구에서의 입금이나 출금 등과 같이 즉각적인 응답이 필요한 온라인 업무에서 필요하다. 하지만 분산환경에서 상이한 애플리케이션들은 항상 같은 시간에 동작하고 있지 않으며 네트워크 상황이나 서로다른 애플리케이션들의 변경상항들로 인하여 이기종간의 네트워크 분산화를 어렵게 만드는 요인이 된다.

MOM은 일반적으로 비동기적 방식 으로 사용한다. 즉각적인 응답을 원하는 경우가 아니라 다소 느리고 안정적인 응답을 필요로 하는 경우에 많이 사용된다. 여러 가지 일을 종합적으로 처리한 후에야 결과가 나오는 통계 작성 등에는 메시지 기반 미들웨어가 상당한 장점이 있다.

또한 프로그램들은 각각 다른 시간에 실행이 가능하며, 애플리케이션의 구조상에 별다른 제한이 없으며, many-to-one의 통신 형태로 서로 통신이 가능하다. 이기종간의 네트워크 분산화를 쉽게 구성할 수 있다.

6. Web Service Description Language 에 대해 설명하시오.

1. 웹 서비스 기술 언어 WSDL(Web Service Description Language)

가. WSDL의 정의

- 웹 서비스의 서식과 프로토콜을 표준 방식으로 기술하고 게시하기 위한 언어이다.

- 추상화/구체화 파트가 존재한다.

나. WSDL의 역할

- 서비스 컴포넌트에서의 인터페이스 기술

- Open된 XML 기반의 명세를 통하여 서비스를 이용하고자 하는 사용자의 참조

2. WSDL의 구조 및 구성요소

가. 웹서비스를 위한 wsdl의 구조

-------------------------------요 위까지만 적으면 답일꺼 같습니다. 밑은 참고 자료----------------------

나. WSDL의 구성요소

7. 프로세스나 객체들간 통신 시 marshalling 이 이용되어야 하는 (1) 필요성  (2) 그 역할을 설명하시오.

1) 필요성 : 분산화 환경을 쉽고 빠르게 구성하고 프로세스 간의 서비스(객체)를 사용하기 위해서 프로세스나 객체의 형태와는 관계없이 사용할 수 있는 방식이 필요하였다.

2) 역할 : 클라이언트에서 원격 객체를 호출하기 위해서 필요한 모든 정보를 묶어서 클라이언트에게 전송하여 클라이언트가 사용하고자 하는 객체의 형태에 관계없이 같은 방식으로 인터페이스 함수를 사용할 수 있게 해준다.