나는 보았다 약 80분 동안 피피티 35장의 진도를 나가시는 교수님을.
분명 피피티엔 적힌게 많은데 말 한두마디 하시고 넘어가시는 교수님을 ....
잠시 원망 좀 하고 복습 들어가겠습니다. 왜그러셨어요?
분산 시스템 설계 원칙
- 가용성을 높이기 위한 복제: 복제를 통해 가용성을 높일 수 있지만, 일관성을 유지하는데 어려움이 생길 수 있다.
- 가용성과 일관성 간의 Trade off: 시스템 설계 시 가용성과 일관성 중 하나를 선택해야 하는 상황이 발생할 수 있다. 가령, 네트워크 이름 서비스(가용성 필요)와 은행 거래(일관성)을 예시로 들 수 있다.
- 캐시 힌트: 캐시는 분산 시스템 설계와 구현에서 높은 성능을 구사할 수 있게 해준다.
- 자율적인 운영을 위한 Stashing: 스태싱 기법을 사용하여 네트워크와의 연결 없이도 시스템이 자율적으로 운영될 수 있게 한다.
- 캐시를 활용한 지역성 극대화: 캐시를 사용하여 데이터 접근의 지역성을 최대한 활용하여 성능을 개선한다. 이때, chache coherence protocols(캐시 일관성 프로토콜)을 사용하여 각 캐시의 데이터가 일관성을 유지하도록 한다.
- 타임아웃을 사용하여 권한 취소: 자원 잠금, 캐시의 유효성 검사 등을 위해
- 표준 원격 호출 메커니즘 사용
- 물리적으로 보안이 확보된 기기에서만 프로그램을 신뢰
- 인증 및 데이터 보안을 위해 암호화 사용
- 분산 알고리즘의 증명: 분산 시스템의 안정화를 위해 수학적으로 증명된 알고리즘만을 사용한다.
- 유용할 수 있는 기능: 클라이언트의 요청에 인증 정보와 접근 권한을 포함하는 기능
분산 시스템의 유형
고성능 분산 컴퓨팅
- 병렬 컴퓨팅: 여러 프로세서가 동시에 계산을 수행하여 처리 속도를 높이는 방법.
- 클러스터 컴퓨팅: 여러 컴퓨터를 하나의 시스템처럼 동작하도록 연결하여 성능을 향상시키는 방법.
- 그리드 컴퓨팅: 여러 독립적인 컴퓨터들이 네트워크를 통해 협력하여 문제를 해결하는 방법.
- 클라우드 컴퓨팅: 인터넷을 통해 컴퓨팅 자원을 제공하고 사용하는 방법.
분산 정보 시스템
- 트랜잭션 처리 시스템: 여러 컴퓨터가 트랜잭션을 처리하고 관리하는 분산 시스템.
보편적 컴퓨팅을 위한 분산 시스템
- 유비쿼터스 시스템(IoT): 모든 곳에서 컴퓨터가 연결되어 작동하는 시스템.
- 모바일 컴퓨팅: 이동 중에도 컴퓨터와 네트워크에 연결하여 작업을 수행하는 시스템.
병렬 컴퓨팅
고성능의 분산 시스템은 병렬 컴퓨팅에서 시작된다.
병렬 컴퓨팅에는 멀티 프로세서와 멀티 코어, 멀티 컴퓨터가 있다.
클러스터 컴퓨팅
클러스터 컴퓨팅은 네트워크를 통해 연결된 고성능 시스템들의 그룹이다.
같은 OS, 거의 동일한 하드웨어를 사용하는 동종의 시스템들이 모여있고, 그들을 관리하는 하나의 노드가 존재한다. 이를 마스터 노드라고 하며, 다른 노드들에게 명령을 한다.
그리드 컴퓨팅
노드들이 전세계적으로, 사방에 퍼져있을 때는 노드들을 관리하는 레이어가 따로 필요하다.
- Fabric layer: 로컬 리소스에 대한 인터페이스를 제공, 상태 및 기능을 조회하거나 자원을 잠그는 기능 등을 한다.
- Connectivity layer: 통신 및 트랜잭션 프로토콜과 인증 프로토콜을 제공한다.
- Resource layer: 단일 리소스를 관리하는 계층으로, 프로세스를 생성하거나 데이터를 읽는 작업 등을 한다.
- Collective layer: 여러 리소스에 대한 접근을 관리하는 계층으로, 리소스 검색, 스케줄링, 복제 등의 작업을 한다.
- Application layer: 단일 조직 내에서 실제 그리드 애플리케이션을 포함하는 계층이다.
클라우드 컴퓨팅
- Infrastructure as a Service(IaaS): 서버, 스토리지와 네트워크 리소스를 제공하는 서비스. 사용자는 물리적 또는 가상화된 컴퓨터 인프라를 임대하여 활용할 수 있다.
- Platform as a Service(PaaS): 애플리케이션 및 서비스 개발을 위한 플랫폼을 제공하는 서비스. 사용자는 애플리케이션과 서비스를 개발하고 배포할 수 있는 환경을 제공받는다. 운영체제, 미들웨어, 개발도구 등이 포함된다.
- Software as a Service(SaaS): 애플리케이션을 제공하는 서비스. 최종 사용자는 클라우드에서 실행되는 소프트웨어 애플리케이션을 직접 사용하며, 설치나 유지보수는 따로 필요하지 않다.
트랜잭션 처리 시스템
트랜잭션(transaction)이란, 데이터베이스 작업을 안전하게 수행하기 위한 기본 단위이며, ACID 특성을 만족한다.
BEGIN_TRANSACTION 과 END_TRANSACTION을 사용하여 트랜잭션의 범위를 지정하고, 사이의 명령어들이 트랜잭션의 본체를 구성한다. 트랜잭션의 핵심 기능은, 그 사이에 있는 작업이 모두 실행되거나, 아예 실행되지 않는다.
ACID의 특성
- Atomicity(원자성): 모든 작업이 완전하게 수행되거나, 전혀 수행되지 않아야 한다.
- Consistency(일관성): 트랜잭션이 완료되면 데이터는 일관된 상태를 유지해야 한다.
- Isolation(고립성): 각각의 트랜잭션은 서로 독립적으로 실행되어야 한다.
- Durability(내구성): 트랜잭션이 완료된 후에는 시스템 장애가 발생해도 결과가 유지되어야 한다.
Nested Transcation(중첩 트랜잭션)
최상위 트랜잭션은 자식 트랜잭션을 생성할 수 있으며, 자식 트랜잭션들은 서로 다른 기계에서 병렬로 실행된다. 이렇게 함으로써 성능을 향상시키거나 프로그래밍을 단순화할 수 있다.
기업 미들웨어 시스템에서의 트랜잭션 처리(TP) 모니터
트랜잭션 프로그래밍 모델을 통해 애플리케이션이 여러 서버 또는 데이터베이스에 접근할 수 있도록 허용하는 시스템이다.
Enterprise Application Integration(기업 애플리케이션 통합, EAI)
미들웨어는 EAI에서 애플리케이션 간의 통신을 촉진하는 역할을 한다.
애플리케이션은 데이터베이스와 분리되어 독립적이여야 하고, 애플리케이션들은 서로 직접적으로 통신할 수 있어야 한다.
이를 위해 RPC나 RMI같은 애플리케이션 통신 방식을 사용한다.
- Remote Procedure Call(RPC): 애플리케이션에서 실행되는 원격 프로시저를 호출하는 방식
- Remote Method Invocation(RMI): 객체 기반 시스템에서 원격 메서드를 호출하는 방식
유비쿼터스 컴퓨팅
유비쿼터스 컴퓨팅에서의 핵심요소
- Distribution(분산): 장치들이 네트워크로 연결되고 분산되어 있으며, 투명하게 접근 가능하다.
- Interaction(상호작용): 사용자와 기기 간의 상호작용은 눈에 띄지 않게(비침해적으로) 이루어진다.
- Context-awareness(상황 인식): 시스템은 사용자의 상황을 인식하여 상호작용을 최적화한다.
- Autonomy(자율성): 장치들은 인간의 개입 없이 자율적으로 동작하며, 스스로 관리할 수 있는 능력이 뛰어나다.
- Intelligence(지능): 시스템은 다양한 동적인 동작과 상호작용을 처리할 수 있다.
예시로는 Internet of Things(IoT)를 들 수 있다.
분산 시스템의 아키텍처
분산 시스템의 아키텍처는 소프트웨어 구성 요소를 논리적으로 조직하고 상호작용하는 방법과,
이를 실제 물리적 시스템에 배치하는 방식으로 나뉜다.
- 소프트웨어 아키텍처: 다양한 소프트웨어 구성 요소의 조직, 조직한 구성 요소들과의 상호작용, 합리적인 수준에서의 분산 투명성을 반영한 조직
- 시스템 아키텍처: 실제 기계에 소프트웨어 구성 요소를 배치
소프트웨어 아키텍처 스타일
아키텍처 스타일의 특정 요소
- 컴포넌트(entities): 환경 내에서 교체 가능하고, 잘 정의된 인터페이스를 제공하는 모듈이다.
- 커넥터(communication paradigms): 컴포넌트 간의 통신, 조정, 협력을 중재하는 메커니즘이다. 원격 프로시저 호출, 메시지 패싱, 스트리밍 데이터와 같은 통신 패러다임이 있다.
- 컴포넌트 간 교환되는 데이터
- 구성(pattern): 시스템에 컴포넌트와 커넥터를 어떻게 구성되는지에 대한 패턴이다.
Layered Architecture(계층형 아키텍처)
계층형 아키텍쳐는 말그대로 각 컴포넌트가 계층적으로 배열된 구조이다.
상위 계층의 컴포넌트는 하위 계층의 컴포넌트를 콜할 수 있지만, 그 반대는 가능하지 않다. 요청은 내려갈 수만 있지 올라갈 수는 없다.
이 모델은 네트워크 모델에서도 사용된다.
계층(layer)은 하나 이상의 통신 서비스 구현을 한다. 각 계층에는 인터페이스가 존재하는데, 콜할 때 사용되는 함수가 지정되어 있다.
계층의 인터페이스는 시스템의 복잡성을 줄이고, 계층이 독립적으로 설계되고 개발될 수 있도록 한다.
각 계층의 인터페이스로 통신하기 위해서는 각 계층에 맞는 통신 프로토콜이 필요하다. (e.g. TCP)
계층 아키텍처에서 서버는 때때로 클라이언트 역할을 할 수 있다.
따라서 클라이언트와 서버의 명확한 구분을 위해 Application Layering을 사용한다.
애플리케이션 계층화란,
소프트웨어 애플리케이션을 기능별로 여러 개의 층으로 나누는 설계 방식이다.
전통적으로 3계층으로 나누는데, 사용자 인터페이스 계층, 처리 계층, 데이터 계층으로 나뉜다.
- 사용자 인터페이스 계층: 최종 사용자와 통신하는 부분이며, 사용자가 시스템에 입력을 제공하고 결과를 시각적으로 확인 하는 화면(UI)을 보여준다.
- 처리 계층: 비즈니스 로직을 처리하는 중심 부분이다. 이 계층에서 사용자의 요청을 처리하고, 애플리케이션의 실제 기능을 구현한다.
- 데이터 계층: 데이터베이스와의 연결을 담당하며, 처리되는 실제 데이터를 저장하고 불러온다. 데이터는 애플리케이션과 독립적으로 구성되며, 데이터의 조직이 변경되더라도 애플리케이션에 영향을 미치지 않는다. 데이터는 종종 지속적이며, 애플리케이션이 실행되지 않더라도 데이터는 어딘가에 저장되어 이후에 다시 사용할 수 있다.
Object-based Architecture(객체 기반 아키텍처)
객체 기반 아키텍처에서 각 개체는 하나의 컴포넌트를 말한다. 이러한 컴포넌트들은 원격 프로시저 호출(RPC)을 통해 연결된다.
캡슐화를 통해 객체의 내부 구현을 감추고 필요한 메서드만 제공함으로써 시스템의 모듈화를 강화한다.
이 아키텍처는 클라이언트-서버 시스템 아키텍처와 유사하다.
- Distributed Object(Remote Object)
분산 객체는, 인터페이스와 그 인터페이스를 구현하고 있는 객체들의 분리를 말한다.
클라이언트가 객체의 메서드를 호출하면, 그 호출이 캡슐화되어 네트워크를 통해 원격 객체로 전달되고, 실행된 후 결과가 반환된다.
위 사진에서는,
클라이언트가 메서드를 호출하면 → Proxy에서 Marshaling(전송에 적합한 데이터 타입으로 변환하는 과정. 여기서는 캡슐화)을 통해 메시지 타입으로 변환되어 네트워크를 통해 서버로 전송된다.
서버의 Skeleton은 받은 데이터를 Un-marshaling을 통해 오브젝트 타입으로 변환시키고 수행하여 객체의 메소드를 부른다.
여기서 Proxy와 Skeleton은 RPC의 시스템으로, 통칭 stub이라고 불린다. Proxy는 클라이언트의 stub이고, Skeleton은 서버의 stub인 것이다.
남은 소프트웨어 아키텍처 스타일은 다음 시간에 알아보도록 하자..
종강까지 다들 화이또 ㅠㅅㅠ
** 대학교 수업을 듣고 이해한 부분을 최대한 풀어서 작성한 글입니다.
틀린 정보가 존재할 수 있으며, 언제나 피드백은 환영입니다. **
'DKU > 분산처리' 카테고리의 다른 글
Distributed System 6 (0) | 2024.09.30 |
---|---|
Distributed System 5 (2) | 2024.09.23 |
Distributed System 4 (1) | 2024.09.20 |
Distributed Systems 2 (2) | 2024.09.09 |
Distributed Systems (7) | 2024.09.05 |