* 분산시스템
– 인터넷에 연결된 여러 컴퓨터들의 처리 능력을 이용하여 메시지를 하나에서 다른 하나로 보냄(message passing)으로써 거대한 계산 문제를 해결하려는 분산처리 모델
– 느슨하게 네트워크로 연결된 컴퓨팅 자원들 간에 자원을 공유하는 것이 분산 시스템의 주요 목적임
• CPU, 메모리, 저장장치(HDD, SSD), 네트워크등 모든 물리적 혹은 논리적 자원
- 사용 예: 웹서비스, 클라우드 컴퓨팅, P2P, 분산 데이터베이스 등
- 분산 시스템의 물리적 모델
• 분산 시스템의 하드웨어 구성요소(컴퓨터와 네트워크)를 추상화하여 상위 계층으로 서비스를 제공해 하위 계층에 대한 지식없이 분산 자원을 사용함
• 분산 시스템의 발전 과정:
– 초기 분산 시스템 [70-80s]: LAN-based, 10-100 nodes
– 인터넷 규모의 분산 시스템 [early 90-2010]: 클러스터, 그리드, P2P
– 오늘날의 분산 시스템: 클라우드, 모바일 컴퓨팅, IoT 등으로 분산 시스템에 참여하는 컴퓨팅 노드가 동적으로 변경됨
• 분산 시스템의 특징
– 동시성
– 글로벌 시계의 부재: 시간 동기화의 어려움
– 부분적인 장애 및 오류
– 네트워크로 느슨하게 연결된 구조로 인한 성능 저하
- 분산 시스템의 구조
• 분산 시스템의 구조는 컴퓨팅 노드들의 위치와 각각의 관계에 따라 달라짐
– 클라이언트-서버 모델
• 클라이언트: 메시지를 보내는 역할
• 서버: 메시지를 수신하여 요청된 작업을 수행하고 결과를 다시 보내주는 역할
• 서버는 또 다른 서버의 작업을 요청할 수 있음 (예: 웹서비스)
– 2-tier(티어) 혹은3-tier 구조가 일반적인 웹 서비스 모형임
– 피어-투-피어(Peer-to-peer) 모델
• 클라이언트와 서버가 서로 대등한 관계로 클라이언트와 서버의 구별이 모호함
• 예: 블록체인, 토렌트 등
* RESTful APIs
– 분산 시스템 (혹은 서버)가 가진 자원에 접근하고 작업을 요청하기 위한 웹 기반의 인터페이스
– HTTP를 기반으로 한 응용 계층에서 컴퓨팅 노드들 간의 메시지 전송을 위한 커뮤니케이션 수단
– 많은 REST API들이 공개되어 있으므로 이를 활용하여, 새로운 서비스를 개발할 수 있음
– 서로 다른 언어를 사용하여 REST API를 사용할 수 있음
• REST API는 Python으로 구현되더라도 클라이언트는 Python, Java, Javascript 등을 모두 사용할 수 있음
• REST 기반 서비스에서는 HTTP Verbs를 사용하여 서버 자원에 접근함
– GET — 특정 자원을 ID에 기반하여 추출
– POST — 새로운 자원을 생성
– PUT — 기존의 자원을 업데이트
– DELETE — ID를 사용하여 기존 자원을 삭제
<REST example>
•GET 함수를 사용하여 유저 DB의 정보를 추출함 (조회)
– 데이터 포맷에 대한 정보는 “Accept” 헤더에 의해 표시됨
<DB>
•POST 함수를 사용하여 유저 DB에 정보 추가 (삽입)
•PUT 함수를 사용하여 유저 DB를 업데이트함 (갱신)
•DELETE 함수를 사용하여 특정 유저를 삭제함 (삭제)
•잘못된 자원에 접근할 때
–HTTP 상태코드를 사용하여성공/실패를 표시함
* 마이크로서비스(Microservice)
• 마이크로서비스(Microservice)는 작은 크기로 잘 정의된 API를 의미하며, 소프트웨어를 개발할 때 여러 개의 마이크로서비스를 조합하여 만들 수 있음
• 마이크로서비스는 독립적이며 작은 규모이므로 개발이 쉬우며, 운영시에도 쉽게 확장하거나 축소할 수 있음
• 오늘날의 클라우드 기반의 웹 서비스에서 많이 사용됨
* 클라우드 컴퓨팅이란?
• 클라우드 컴퓨팅은 클라우드 컴퓨팅은 인터넷(“클라우드”)을 통해 서버, 스토리지, 데이터베이스, 네트워킹, 소프트웨어, 분석, 인텔리전스 등의 컴퓨팅 서비스를 제공하는 것입니다. 클라우드 컴퓨팅을 통해 더 빠른 혁신과 유연한 리소스를 제공하고 대규모 경영의 이익 효과를 누릴수 있게 됩니다. 일반적으로 사용한 클라우드 서비스에 대해서만 요금을 지불하므로, 운영 비용을 낮추고 인프라를 보다 효율적으로 운영할 수 있습니다. 그뿐만 아니라,비즈니스 요구 사항의 변화에 따라 규모를 조정할 수 있습니다.
•Cloud = Lots of storage +computations
–It’s a cluster!
–It’s a supercomputer!
–It’s a datastore!
(위 조건들을 만족해야 클라우드 컴퓨팅)
* 클러스터란?
• 컴퓨터 클러스터(computer cluster)는 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합
– 저렴한 마이크로프로세서와 고속의 네트워크, 그리고 고성능 분산 컴퓨팅용 소프트웨어들의 조합 결과
* 클라우드 컴퓨팅의 구성요소
* 클라우드 컴퓨팅 공급자
•AWS: Amazon Web Services
–EC2: Elastic Compute Cloud
–S3: Simple Storage Service
–EBS: Elastic Block Storage
•Microsoft Azure
•Google Cloud/Compute Engine/AppEngine
•Rightscale, Salesforce, EMC, Gigaspaces, 10 gen,Datastax, Oracle, VMWare, Yahoo, Cloudera
* 클라우드 컴퓨팅의 특징
• 자원 공유와 관리
– 클라우드는 자원을 공유하기 위하여 공용 자원 풀(Pool)을 사용함
– 인터넷 기술을 사용하여 확장성(Scalable) 있고, 서비스를 제공함
• (“elastic computing”) 탄력 컴퓨팅은 동적으로 수요에 따라 컴퓨팅 자원을 획득할 수 있는 기술을 말함
• 사용된 자원은 계량되고 사용자는 그에 따라 요금이 청구됨
* 클라우드 컴퓨팅의 특징
• 사용량에 따라 자원을 동적으로 할당할 수 있음
– 기존의 컴퓨팅 환경에서는 최대 사용량에 맞춰 자원을 미리 확보해 둬야함
* 클라우드의 종류
• 퍼블릭(Public) 클라우드
– 퍼블릭 클라우드는 가장 일반적인 클라우드 서비스 종류로 최종 사용자가 소유하지 않은 IT 인프라에서 생성되는 클라우드 환경
– 주변에서 자주 볼 수 있는 Google Cloud, AWS, Microsoft Azure 등이 퍼블릭 클라우드에 해당함
• 사설(Private) 클라우드
– 프라이빗 클라우드는 클라우드를 한 기업 내부에서 독점하는 클라우드 서비스 종류로 제한된 네트워크 내에서 특정 기업이나 사용자만을 대상으로함
– 클라우드 오픈 스택 기술 등을 이용해 컴퓨팅 구성요소를 직접 구축하기 때문에 보안이 뛰어나고 각 상황에 맞게 기능을 맞춤형으로 커스터마이징할 수 있음
• 혼합(Hybrid) 클라우드
– 하이브리드 클라우드는 퍼블릭 클라우드와 프라이빗 클라우드가 결합한 클라우드 서비스 종류
– IT 서비스의 대부분이 하이브리드 클라우드 형태를 가지고 있지만 고객이 이를 인지하기는 어려움
* 클라우드 서비스의 종류
- Infrastructure-as-a-Service (IaaS)
• 사용자는 운영체제 및 데이터,애플리케이션, 미들웨어 및 런타임을 담당하고 제공업체는 사용자가 필요로 하는 네트워크, 서버, 가상화 및 스토리지의 관리와 액세스를 담당
• 제공업체가 사용자를 대신해 인프라를 유지 관리하거나 업데이트하며, 사용자는 애플리케이션 프로그래밍 인터페이스(API) 또는 대시 보드를 통해 인프라에 액세스 및 제어
• 필요한 구성 요소만 구매하고 필요에 따라 확장 또는 축소 가능
– IaaS는 개발 및 테스트 환경의 구축 및 제거가 빠르고 유연하므로 개발 환경에서 구축해야 할 인프라만 사용하고 필요에 따라 확장 또는 축소하며, 개발이 완료되면 사용을 중단하고 사용량에 대한 비용만 지불 가능함
• IaaS의 주요 단점은 제공업체의 보안 문제 가능성, 제공업체가 여러 클라이언트와 인프라 리소스를 공유해야 하는 멀티 테넌트(Tenant/세입자) 시스템 및 서비스 신뢰성 (멀티 테넌트 시스템으로 인해 VM 또는 메모리를 oversee 할 수도 있음)
• 예: AWS, Microsoft Azure, Google Cloud
- Platform-as-a-Service (PaaS)
• 제공업체가 자체 인프라에서 하드웨어와 소프트웨어를 호스팅 하고 이러한 플랫폼을 사용자에게 통합 솔루션, 솔루션 스택 또는 인터넷을 통한 서비스로 제공
• 주로 개발자와 프로그래머에게 유용한 PaaS를 통해 사용자는 자체 애플리케이션을 개발, 실행 및 관리할 수 있으며, 이 과정에서 일반적으로 이러한 프로세스와 관련된 인프라 또는 플랫폼을 구축하고 유지 관리할 필요가 없음
• 사용자는 애플리케이션 코드를 작성, 빌드, 관리하지만 소프트웨어 업데이트 또는 하드웨어 유지 관리가 필요 없음
– 빌드 및 배포를 위한 환경이 사용자에게 제공됨
• 예: AWS Elastic Beanstalk, Heroku 등
- Service-as-a-Service (SaaS)
• 클라우드 애플리케이션 서비스는 가장 포괄적인 형식의 클라우드 컴퓨팅 서비스로, 모든 애플리케이션은 제공 업체가 관리하며 웹 브라우저를 통해 제공
• 제공 업체가 소프트웨어 업데이트, 버그 수정 및 기타 일반 소프트웨어 유지 관리 작업을 처리하며, 사용자는 대시 보드 또는 API를 통해 애플리케이션에 연결함
• SaaS로 시간과 유지관리를 줄일 수 있지만 제어, 보안 및 성능과 관련한 비용이 소요되며, 서비스 제공업체에 대한 의존성이 있음
• 예: Dropbox, Salesforce, Google Apps
* 클라우드 컴퓨팅의 핵심: 가상화 (Virtualization)
• 가상화
- 서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상표현을 생성하는데 사용할 수 있는 기술
• 가상 소프트웨어는 물리적 하드웨어 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행할 수 있음
• 핵심 개념
– 서버, 스토리지, 네트워크 및 기타 물리적 시스템에 대한 가상 표현을 생성할 수 있는 기술
– 가상 소프트웨어는 물리적 하드웨어 기능을 모방하여 하나의 물리적 머신에서 여러 가상 시스템을 동시에 실행할 수 있음
•구성 요소
– 호스트 –> 하위 하드웨어 시스템
– 가상머신 모니터(VMM) 혹은 hypervisor -> 가상머신을 생성하고 실행할 수 있는 구성요소
– Guest -> 하이퍼 바이저에 의해서 제공되는 가상머신
* 하이퍼바이저의 종류종류
• 유형 1 (기업, 학교)
– 호스트의 하드웨어에서 직접 실행되어 게스트 운영체제를 관리
– 호스트 운영체제를 대신하며 하이퍼 바이저가 하드웨어에 직접 VM 리소스를 예약
– 엔터프라이즈 데이터센터 등 서버 기반 환경에 적합함
• 유형 2 (개인)
– 호스트 운영체제에서 게스트 운영체제를 추상화하는 방식으로 작동함
– 개인용 컴퓨터에서 여러 운영체제를 사용하는 경우에 적합함
'KNU Freshman > 컴퓨터학개론' 카테고리의 다른 글
(14) 소프트웨어공학 (0) | 2024.06.09 |
---|---|
(13) 데이터베이스 (0) | 2024.06.09 |
(11) 네트워크 (1) | 2024.06.03 |
(10) 통신의 발전 과정 (0) | 2024.05.20 |
(9) 입출력 장치(HDD) & Thread, Lock (0) | 2024.04.17 |