이 블로그는 단국대학교 김승훈 교수님 수업을 토대로 작성되었습니다.
저작권 문제가 될 수 있는 강의자료는 되도록 지우고 작성하였습니다.
HW나 SW컴포넌트들이 NW으로 연결된 컴퓨터 상에서 돌아가는 것
→ 서로 관계가 있기때문에 Communicate 하거나 Coordinate를해야함
→ 그 방법은 message를 전달하는 방법만이 필요한 내용을 전달하고 coordination
→ 설치되어 있는 OS나 여러가지 서버를 or 서로 다른 컴퓨터를 의식하며 file을 전송한다거나.. 이렇게 사용하면 computer network, 의식하지 않고 사용하면 분산시스템
-Computer network: autonomous computers are explicitly visible
-Distributed system: 여러 개의 autonomous한 컴퓨터(서버가 있고 client가 있고.. server는 OS가 어떻게 구성이됐고..)가 있다고 해도 transparent 하게
→ 서버가 있고 OS는 리눅스고 이런식으로 생각하면 explicitly visible
→ transparent는 제일 중요한 단어 → 우리가 느끼지 못하게 라는 의미
-실행을 여러 프로세스들이 동시에 함(concurrent)
-서로 무관한 것이 아니고 어떤 resource(데이터..)를 공유하는 프로그램들 동시에 실행(coordination)할 때 필요로 한 이런 것들의 가장 중요한 특성이 concurrency
-component들이 고장날 때 각자 독립적으로 고장나는거지 서로 영향을 주지 않음 → 즉, 다른 component들은 계속 동작을 함
-특히 network가 고장(failure)이 났다? 컴퓨터끼리 단절(isolation)됨→컴퓨터가 고장난 것은 아님. 계속 running함, network가 단절되었기 때문에 서로 고립되었을 뿐
-그래서 제일 큰 문제 중 하나가 우리가 이런 컴퓨터에 고장이 났든 or 프로그램 컴퓨터는 괜찮지만 그 안에 들어가는 process가 어떤 비정상적인 상태로 termination(crash)이 됐든 or network 자체가 죽었든, 이런 모든 것들을 우리가 즉각 알 수 없다
→ 여러 component가 구성돼있는데 failure(고장)가 나는. 굉장히 서로 indepent함. 고장이 동시에 나는 것도 아니고..
→ 예) 상대편과 전화 중, 무슨 이유로 상대편과 전화가 갑자기 끊어질 때(엘리베이터, 폰문제), 우리는 상대편이 전화를 안하고 있다는 것을 모름 . 언제 끊어졌는지 알 수 없으므로 rollback해서 다시시작 → 컴퓨터는 상대편 process와 어디서부터 동기를 마쳐야하나... 등의문제가생김
-불행히도 global한 시계는 없음. 어느정도 정밀도에서 차이가 나는 시계는 있을 지언정 아주 정확한 global clock이 없다
→혼자가 아닌 여럿이서 실행의 action을 순서를 맡는다던가, 동시에 한다던가 등을 하려면 시계가 있어야 함
-disk와 pinter 같은 하드웨어 component들 공유
→ 예) 컴퓨터들이 프린터를 공유 / 가까이 달린 하드디스크 용량이 작으면 대용량하드디스크를 사무실에 두고 하드웨어공유(File System)
→ 각자의 기능적으로 봤을 때 역할이 다르므로 분산 시스템이 자연발생적으로 생겼다. 컴퓨터들이 기능적으로 다 똑같지 않음
-client/server (누구는 client, 즉 서비스를 요청하고 그 요청된 서비스를 제공하는 server.. 기능적으로 다름)
-Data gathering/data processing (데이터 모음 데이터 가공)
-Sharing of resources with specific functionalities
→ 일 분배 적절히. load balancing
→ processing 파워를 중복하자
→ 큰 슈퍼 컴퓨터 한 대 보다는 작은 컴퓨터를 더 많이 사용하는 게 효율이 높다. 이러한 경제성의 논리 때문에 processing power도 중복하게 됨