2장 클라우드 컴퓨팅 아키텍처
아키텍처의 변화
2000년대 이후 웹이용자의 폭발적인 증가로 필요한 기술들이 변하고 아키텍처가 변화 했다. 기술들에는 아키텍처, 프레임워크, 방법론, 소프트웨어 패턴 등 여러가지 것들이 포함된다.
이들 기술들은 동시 다발적으로 필요해의해 나타났다. 이전의 기술들이 서로 대체되어 없어지는 것이 아니라 환경에 의해 선호되는 기술이 있다고 생각한다. 물론 잘 사용되지 않는 기술들도 있겠다.
따라서 이 기술들을 하나도 간과 할 수 없다. 아래 나열은 같은 레벨로 나누어 놓은것은 아니다.
- Model 1, Model 2(MVC), AOP
- EJB, Spring
- Xen, KVM, VMWare
- LaaS, Saas, PaaS
- Load Balancing, DNS Round Robtin, L4 Switch
- Web Server, Application Server, Servlet Container
- Component Based Development, Service Oriented Architecture
- Scale In, Scale Out
- REST, JSON
클라우드 서비스를 위한 아키텍처
개발자들의 역량이 상승했다(정말?). 분산 기술들도 많이 공개되어 지고 있고 무르익고 있다. 분산기술을 요구하기 시작했다.
일반화된 분산 기술
- 애플리케이션 서버용 프레임워크
- 다양한 프로그래밍 언어 지원
- 분산환경을 제어할 수 있는 기술
- 분산 스토리지
클라우드 아키텍처의 요구 사항
- 탄력적 확장성
- 고가용성
- 자동화된 리소스 관리
- 자동 복구/치료
수 많은 도구와 방법들
- NoSQL, RDBMS, Hadoop, Server Virtualization, ...
- Thrift, WSDL, SOAP, REST, ...
- Application Server(Tomcat, .NET, Thrift Server, ...)
- DATA Mapper(ORM, SQL query mapper) FileSystem Mapper, Framwork, Framework, Framework Framework.......
- 관리용 서비스들(빌링, 모니터링, 미터링, SSO, ...)
진화
다양한 구성요소들을 한꺼번에 소화할 수 없다. 따라서 적당한 수순을 밟아 아키텍처를 진화 시켜야 할 것이다.
아래 처럼 진화시켜 보자.
- 웹서버기능을 수행하는 웹 애플리케이션서버 * 1 + DBMS * 1 + 기능별 모듈 * Many
- Facade 패턴을 이용해 서브 시스템별로 모듈을 묶음
- 서브 시스템별 서버 확장
- 서브 시스템의 용량 산정후 서비스 풀 구성. 서비스 풀은 로드밸런스를 이용해 부하 분산
- DBMS * Many
- 서비스 풀별로 Cache Layer 추가
- 외부 공개 API를 제공할 서비스와 보안, SLA(Service Level Agreement)서비스 수준 계약서, 요금 정책 수립
- 외부 공개 API를 위한 gateway 추가
- 클라우드 외부에 공개된 API를 이용하기 위한 gateway 추가
- 외부 공개 API의 버전 관리를 위한 version route 추가
- 만약의 트래픽 폭주를 위한 솔루션(Iaas) 활용 고려(AWS, ucloud, ...), Paas(App Engine)
오픈소스 솔루션
제시된 클라우드 아키텍처를 오픈소스로 구성할 수 있다.
앞으로 각 구성 요소들을 간단히 실습해보자.
- 로그관리
chunkwa, scribe - 클러스터 관리
ZooKeeper - 애플리케이션 서버
thrift, Avro - 대용량 데이터 분석
Hadoop MapReduce - NoSQL
Bigtable, Cloudata, Hbase, Cassandra, MongoDB - 캐시
Memcached, Membase - 서버 가상화
Xen, KVM - 클라우드 스토리지
Hadoop