[CS] 아키텍쳐 설계 패러다임 (Client-Server, EDA, MSA, Serverless..)
Architecture(아키텍처)
시스템 아키텍쳐
- 컴퓨터(머신)의 배치 방법, 머신에 소프트웨어의 배치 방법
소프트웨어 아키텍쳐
- 소프트웨어 컴포넌트의 논리적 구성 및 역할에 대한 구성
- 이벤트 중심 , 레이어, 객체지향 아키텍쳐 등등
레이어 아키텍쳐(Layerd Architecture)
- 기능을 계층으로 쪼개어 각자의 기능에 충실하게 함
- 각 레이어는 이전 레이어를 사용하여 상위 레이어로 Export 되도록 → 상위, 하위 계층과만 교류가 가능하도록 제약조건을 걸음
- 예를 들어 TCP는 4계층
- 하나의 계층이 문제가 생기면 Bottleneck(병목 현상) 발생 가능, Single Point of Failure
객체 기반 아키텍쳐(Object-based)
Client-Server Architecture(클라어언트-서버 아키텍처)
클라이언트 (Client)
서비스를 사용하는 프로세스
클라이언트는 사용자 또는 다른 시스템에서 정보나 서비스를 요청하는 역할
클라이언트는 대부분 사용자 인터페이스를 제공하며, 사용자와 상호 작용하여 Request를 생성하고 Server로 전송한다.
서버 (Server)
서비스를 제공하는 프로세스
서버는 클라이언트의 요청에 응답하고, 요청한 데이터나 서비스를 제공하는 역할
클라이언트와 서버는 네트워크를 통해 통신하며, HTTP, FTP, SMTP와 같은 표준 프로토콜을 사용하여 요청 및 응답을 교환한다.
서버는 클라이언트에서 전송한 Request를 처리하고 Response를 다시 클라이언트에게 보낸다.
Application Layering(애플리케이션 계층화)
- User-interface layer(UI), Processing layer(애플리케이션의 기능 처리), Data layer(조작 데이터)
- 계층(Layer)은 복잡한 시스템을 분리시키고 복잡성을 감소시키는게 목적
- 해당 계층들은 Server와 Client가 분업하여 가질 수 있음.
- Client와 Server간의 통신은 주로 HTTP Request/Response를 통해서 한다.
Client-Server의 유형
Connectionless vs Connection-Oriented
Connection-oriented
- (ex)TCP, Connection-oriented IPC API(스트림 모드 소켓 등) 사용
- 일반적으로 연결은 순차적으로 이루어짐. 동시 접속자에 대한 세션은 서버가 스레드화(병렬화) 되지 않으면 순차적.
Connectionless
- (ex)UDP, Connectionless IPC API(Datagram 소켓 등) 사용
- 동시에 여러 클라이언트들이 교차적으로 이루어질 수 있다. 각 클라이언트 간에 명시적인 연결이 없으며, 서버는 각 요청을 독립적으로 처리.
Concurrent vs. Iterative Server
Concurrent Server
- 서버의 Concurrency(동시성)를 제공하는 것 : Multi-Thread 기반 서버
- Connection-oriented + 병렬화
- 동시에 여러 클라이언트에 서비스를 제공할 수 있도록 스레드화됨
Iterative Server
- Connection-oriented + 병렬X
Stateful vs. Stateless Servers
Stateful
- 상태O (클라이언트의 상태유지(엑세스 정보 유지), Request량이 줄어들음, 요청속도 빠르고 성능이 좋음. )
- 그러나 클라이언트의 상태를 유지하기 매우 어려움(특히 Failure 시). 대부분의 서버는 Stateless를 채택함.
Stateless
- 상태X, HTTP 프로토콜은 Stateless, Request량 증가, 그렇지만 클라이언트 상태 관리 안해도 됨.
- 서버의 Crash에 대한 Tolerant(내성)이 상대적으로 강함
- Request 처리 시 필요한 정보는 클라이언트가 제공.
실제 서버는 Stateful/Stateless 속성을 병행(Hybrid)할 수도 있음
데이터 중심 아키텍쳐(Data-Centered)
- 주요 목적 : 데이터 엑세스 및 업데이트.
- 데이터의 정합성과 일관성을 중시하며, 데이터 관리에 중점을 둔다.
- 서비스 간의 통신이 데이터를 중심으로 이루어지고, 데이터 모델이 전체 시스템의 중심을 이룬다.
- 프로세스는 Shared Repository에서 데이터를 읽고 수정하여 상호 작용한다.
- Passive : 기존 데이터베이스. 요청이 오면 응답
- Active : Blackboard system. 데이터의 변화가 감지되면 시스템이 클라이언트를 업데이트한다.
이벤트 중심 아키텍쳐 (EDA, Event-Driven Architecture)
- Publish, Subscribe(Consumer) 패러다임. → 이벤트는 Publisher가 게시한 후 전달되어 Consumer가 Subscribe함.
- 이벤트 버스에다가 실어 넣으면은, 컴포넌트가 이벤트를 Publish, Cousumer은 이벤트 타입에 따라서 구독함
- 비동기적인 통신을 통해 느슨한 결합 지향
- 이벤트를 통해 상태의 변경을 전파하므로 상태 Synchronization에 유리
- 변화에 대한 높은 Scalability를 제공하며, 서비스 간의 의존성을 최소화할 수 있다.
구성 요소
- Event Producer: 이벤트를 생성하고 발행
- Event Broker: 생성된 이벤트를 관리하고, 구독자에게 전달하는 역할을 하는 중앙화된 메시지 브로커
- Event Consumer: 이벤트를 수신하고, 해당 이벤트에 대한 처리를 수행.
마이크로서비스 아키텍처 (Microservices Architecture)
시스템을 작은 독립적인 마이크로서비스로 분해하고, 각 마이크로서비스가 자체적으로 동작하며 통신한다.
소프트웨어를 작은, 독립적인 서비스 단위로 나누는 방식으로 설계된다. 이러한 독립적인 마이크로서비스는 각각 자체 실행 가능하며, 특정 기능 또는 업무를 처리한다. 다른 마이크로서비스와 통신하여 전체 시스템을 구성하게 된다.
스케일 아웃과 로드 밸런싱: 서비스의 부하에 따라 필요에 따라 서비스를 확장하고 로드 밸런싱을 수행하여 안정적인 성능을 제공하기 유용하다.
데이터 중심 아키텍처와, 이벤트 중심 아키텍처의 개념은 MSA에서와 관련이 있을 수 있다.
데이터 동기화: 마이크로서비스간의 데이터의 동기화를 통해 일관성을 유지하는 것은 매우 중요하다.
서비스 간의 통신 : 각각의 API들 간의 통신을 위하 EDA의 Producer/Consumer 및 Message 개념은 매우 유용하다. Apache Kafka와 같은 Message Broker가 역할을 할 수 있으며 이를 통해 통신 및 데이터의 동기화가 이루어질 수 있다.
마이크로서비스에 대한 자세한 내용은 다음 포스팅을 참고해보자.
https://sjh9708.tistory.com/119
서버리스 컴퓨팅 아키텍처 (Serverless Architecture)
서버를 개발자나 운영자가 직접 관리하지 않고, 클라우드 서비스 제공업체가 자동으로 서버 인프라를 관리하는 아키텍처.
예를 들어 AWS의 AWS Lambda가 있다.
서버 관리를 클라우드 제공업체가 대부분 해준다. 따라서 개발자들은 논리적인 소스코드 설계에 집중할 수 있다.
서버리스 아키텍처에서는 주로 코드 중심으로 개발하며, 함수 단위로 논리를 구성한다. 이를 통해 더 빠른 개발 및 배포 주기를 가질 수 있다
서버리스 함수는 일반적으로 제한된 실행 시간을 가지며 장기간 실행해야 하는 작업에는 부적합할 수 있다.
또한 서버리스 함수는 처음 호출될 때 Latency(지연)이 발생할 수 있다. 함수가 처음 실행될 때 초기화 및 시작 작업이 필요하기 때문이다.
Content / Image Reference (CC License)
Tannenbaum and Van Steen :: Distributed Systems: Principles and Paradigms (PDF)
'CS > 아키텍쳐 & 분산시스템' 카테고리의 다른 글
[CS] 분산 상호 배제 (Distributed Mutual Exclusion) (1) | 2024.01.05 |
---|---|
[CS] 동기화(Syncronization)와 Clock (1) | 2024.01.05 |
[CS] 분산 시스템 간의 Communication과 RPC(Remote Procedure Call) (1) | 2024.01.05 |
[CS] OS / Network 아키텍쳐 (Multiprocessors vs Multicomputers, DOS/NOS/Middleware) (0) | 2023.10.31 |
[CS] Distributed System, 분산 시스템의 정의와 목표 (0) | 2023.10.31 |