서버 확장을 위한 두 가지 방법
첨부 '2' |
|
---|
서버 스케일링 (Server Scaling - Scale up / Scale out)
# 스케일 아웃과 스케일 업 (Scale Out / Scale Up)
서버를 운영하다 보면 갑작스런 사용자의 증가나 사업 확장 등의 이유로 더 많은 서버 용량과 성능이 필요하게 된다. 이럴 때 시스템을 확장하는 방법으로는 ‘스케일 아웃’과 ‘스케일 업’ 이 두 가지 방법이 있다.
1. 스케일 아웃 (Scale Out)
'스케일 아웃'이란 서버의 대수를 늘려 전체 처리 능력을 향상시키는 방법이다. 수평 스케일(Horizontal Scale)이라고 부르기도 한다. 서버의 가상화 기능을 사용하고 하나의 케이스 내에서 가상으로 복수 서버를 구축해 스케일 아웃과 동등한 효과를 제공할 수도 있다. 이러한 방식은 스케일 위드인 또는 가상 스케일 아웃 이라고 부르기도 한다.
스케일 아웃의 경우 서버 한 대가 장애로 다운 되더라도 다른 서버로 서비스 제공이 가능하다는 장점이 있다. 각 서버에 걸리는 부하를 균등하게 분배해주는 '로드밸런싱'이 필수적으로 동반되어야 한다.
개개의 처리가 단순하지만 다수의 처리를 동시 병행적으로 필요로 하는 경우에 적합하다. 또한 데이터 정합성(데이터의 모순없이 일관되게 일치함) 유지에 대한 요건이 어렵지 않은 경우에 적합하다. 주로 웹 서버나 데이터가 읽기 전용인 검색엔진 데이터 분석 처리, VOD(주문형비디오) 서비스, 일부의 과학기술 계산, 메일 서버나 게시판 등의 애플리케이션 등의 운영에 사용된다.
2. 스케일 업 (Scale Up)
'스케일 업'은 서버 자체를 증강하여 처리 능력을 향상시키는 방법이다. 수직 스케일(Vertical Scale)이라고 부르기도 한다. 주로 CPU나 RAM 등을 추가하거나 그 외의 부품을 고성능으로 교환하는 방법을 의미한다.
스케일 업의 경우 한 대의 서버에 모든 부하가 집중되므로 장애 시 해당 서비스에 큰 영향을 줄 수 있는 위험성이 있다.
애플리케이션 서버에서는 스케일 아웃이 가능하지만 빈번히 갱신이 발생하는 OLTP(On-Line Transaction Processing) 데이터베이스에는 정합성(데이터의 모순없이 일관되게 일치함) 유지를 위해 스케일 업이 적합하다.
3. '스케일 아웃'과 '스케일 업'의 비교
스케일 아웃(Scale Out) |
스케일 업(Scale Up) |
|
확장성 |
하나의 장비에서 처리하던 일을 여러 장비에 나눠서 처리하도록 설계를 변경, 수평 확장, 지속적 확장이 가능 |
더 빠른 속도의 CPU로 변경하거나 더 많은 RAM을 추가하는 등의 하드웨어 장비의 성능을 높이는 것. 수직 확장, 성능 확장에 한계가 있음 |
서버비용 |
비교적 저렴한 서버를 사용하므로 일반적으로 비용 부담이 적음 |
성능 증가에 따른 비용 증가폭이 크며 일반적으로 비용 부담이 큼 |
운영비용 |
대수가 늘어날수록 관리 편의성이 떨어지며 서버의 상면 비용을 포함한 운영 비용이 증가함 |
관리 편의성이나 운영 비용은 스케일 업에 따라 큰 변화가 없음 |
장애 |
읽기/쓰기가 여러 대의 서버에 분산되어 처리됨으로 장애 시 전면 장애의 가능성이 적음 |
한 대의 서버에 부하가 집중되므로 장애 시 장애 영향도가 큼 |
기술관점 |
Sharding, Query-off Loading, Queue, In Memory Cache, NoSQL, Object Storage, Distributed Storage |
고성능 CPU, Memory 확장, SSD |
용도 |
분산처리 시스템, Global 웹 애플리케이션, 점진적 증가 가능, 보통 스케일 업보다 저렴, 설계/구축/관리 비용 증가 |
고성능 Legacy 애플리케이션, 구축이 쉽고 관리 용이, 단계적 증가가 어렵고 근본적인 해결이 안될 수 있음 |
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
1129 | Develop | [Javascript][Ajax] 자바스크립트 강의 산출물 | hooni | 2019.10.05 | 1153 |
1128 | Develop | [ios] Locale Identifiers | hooni | 2018.11.29 | 2098 |
1127 | Develop | [ios] Swift 4 Dictionary 사용하기 | hooni | 2018.11.29 | 2522 |
1126 | Develop | [ios] Swift 4 Singleton inheritance | hooni | 2018.10.31 | 2047 |
1125 | Develop | [ios] APNS, Remote Push 사용자가 수신을 동의했는지 확인하기 | hooni | 2018.10.19 | 1739 |
1124 | Develop | [ios] APNS, Remote Push 수신 시점에서 앱의 3가지 실행 상태 | hooni | 2018.10.19 | 1457 |
1123 | Develop | [ios] Swift 4 String, Date, DateFormatter 예제 | hooni | 2018.10.18 | 1889 |
1122 | System/OS | Mac에서 Node.js 설치하기 | hooni | 2018.09.28 | 4752 |
» | System/OS | 서버 확장을 위한 두 가지 방법 | hooni | 2018.08.29 | 2904 |
1120 | Develop | [ios] Requesting Location Permissions in iOS | hooni | 2018.08.18 | 2318 |
1119 | Develop | [PHP] Mac OS에서 PHP 7 설치하기 | hooni | 2018.05.11 | 5437 |
1118 | Develop | [php] Connect to Firebase Console in Laravel | hooni | 2018.05.09 | 3616 |