WEEK1 Flashcards
시스템 디자인이란 ?
주어진 목표를 달성하기 위해서 시스템 아키텍처, 시스템 구성 모듈, 인터페이스 데이터 등을 정의하는 과정
simple sns 시스템을 디자인 하려고 한다. 4가지 과정을 요약하자면 ?
- simple sns 가 sns 서비스를 제공하기 위해서 필요한 기능을 정의
- sns 서비스 구현을 위한 모듈, 구성요소 정의
- 시스템 디자인 -> 여러 디자인 고려, 대안책들 중 적합한 것을 선택
- 시스템 개선
simple sns 시스템 디자인 4가지 과정에서 각각의 과정의 예를 드시오
- sns 서비스 제공을 위한 필요한 기능 정의
: 가입/등록 (신규사용자 가입 시 -> id/pwd 생성), 친구 요청/수락/거절 , 게시판에 글쓰기/글읽기 - 위에서 정의한 기능 구현을 위한 모듈 과 컴포넌트 정의 : 서버측 -> 웹서버(웹페이지 제공, 사용자 생성/관리, 친구관계 관리, 글 쓰기/읽기 etc), 데이터베이스(사용자 계정 정보 저장, 친구관계저장, 사용자가 작성한 글 저장 etc)
- 여러 시스템 디자인 고려하여 최선의 것을 선택
: ex) 경제적 여건 때문에 일단, 웹 서버와 db 를 한 대의 서버 pc 에 설치 - 시스템 개선
: 사용자 수가 증가하여 부하 발생 접속속도 느려지고 오류 발생 -> 디자인의 개선 ; 한대의 서버를 2개로 늘려서 기능에 따른 분할 (db 시스템, 웹 서버 시스템 으로 분할)
또다른 문제가 발생하면 다른 방법으로 계속 개선해 나감
서비스제공을위해서 한 대의 컴퓨터에 웹서버와 db 를 설치하게 되면 발생할 수있는 문제점은?
서비스사용자가 많아지게 되면 접속 속도 저하(응답시간 증가), 오류증가 등의 과부하가 생길 수있다.
한 대의 컴퓨터에 설치되어있는 웹서버와 db 를 컴퓨터 수를 늘려서 기능별로 분리 시키면 (한대 -> 웹서버, 다른 한 대 -> db) 장점은 ? 하지만 어떤 문제가 발생할 수 있을 까 ?
장점 : 접속 속도 증가, 오류 감소 (= 서비스 품질의 개선)
발생할 수 있는 문제 : 접속자와 사용자 수가 더 증가하여 품질이 다시 떨어 진다. 이 경우, 이제는 기능에 따른 분할이 불가하므로 시스템 확장을 위한 새로운 대안책이 필요함
시스템 확장 (scaling) 의 대표적인 두가지 방법은 ?
vertical scaling (vs; 수직적 확장; scaling up), horizontal scaling (hs ; 수평적 확장;scaling out)
VS(vertical scaling) 이란 ?
기존의 시스템 장비/부품을 고 사양으로 대체하는 방법
예: 고성능 CPU로 교체, 고성능 메모리로 교체, 고성능 HDD로 교체
VS의 장점은 ?
서버 부품이 고성능으로 교체되어, 시간당 연산량/처리량이 증가함
VS의 단점은 ?
-VS 수행 중에는 서비스가 중단될 수 있다.
-VS은 무제한으로 할 수 없고, 장비 또는 기술의 한계에
제한된다
-부품 교체 시, 기존의 부품은 잘 활용이 안되어, 비용
낭비를 초래함
HS (Horizontal scaling) 이란 ?
you get the additional resources into your system by adding more machines to your network, sharing the processing and memory workload across multiple devices.
( 자원의 추가 -> 컴퓨터 혹은 장치를 네트워크에 추가하므로서 -> 부하를 분산시킴 -> 각 장치는 프로세싱과 메모리를 공유)
scaling out 방법으로 웹서버를 1대에서 2대로 늘렸다고 하자. 그러면 발생할 수 있는 문제들은 ?
-부하(load)를 어떻게 분산시키나?
-누가 부하를 분산시키나?
웹서버가 2대로 늘어나면, —사용자는 어느 웹서버에 접속해야 하나?
scaling out 방법으로 웹서버의 부하를 분산시킬 때 발생할 수 있는 의문들은 다음과 같다.
-누가 부하를 분산시키나?
-부하(load)를 어떻게 분산시키나?
웹서버가 2대로 늘어나면, —사용자는 어느 웹서버에 접속해야 하나?
각각에 대해 답하시오.
- LB (Load balancer, 부하 분산자)를 도입
- LB는 정해진 정책에 따라서 부하를 분산시킴
(예: RR (round-robin) 기법;
사용자의 요청이 들어오면 순차적으로 번갈아 가며 서버에 요청을 전달함;
요청1=>서버1, 요청2=>서버2, 요청3=>서버1, 요청4=>서버2, …) - DNS 에서 주소요청하면 DNS 가 LB의 주소를 알려주고, 그 주소로 접속하여 LB에게 다시 서비스 요청을 하면, LB가 웹서버를 선택하여 응답해주면, 웹서버와 연결되어 서비스를 사용할 수 있음
만약 웹서버들 중 하나가 SHUT DOWN 되면 LB 가 SHUT DOWN 된 서버에 사용자들을 접속시켜서 문제가 발생할 수 있음. 이것을 해결 하기 위한 방법은 ?
LB는 heartbeat 메시지
교환을 통해 각각의 웹서
버 상태를 체크함 (ping)
웹서버 늘리기 를 통해 웹서버 부하 문제는 해결했지만 웹서버 2대에서 한대의 DB로 서비스 요청을 보내고, DB성능이 이를 따라가지 못하여 응답시간이 느려지는 DB 병목 현상이 발생했다. 해결책은 ?
DB 늘리기 ;DB를 1대 더 추가하고, 데이터 타입에 따라 역할을 분리
EX)
• DB#1 : 사용자 계정 및 친구관계 정보만 저장/관리
• DB#2 : 사용자 게시 글만 관리
HA (High Availability; 고가용성) 이란?
-서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정
상 운영이 가능한 성질
- 고 가용성=가용성이 높다=시스템이 고장 나지 않는다=서비스가 중단되지 않는다
고가용성을 실현하는 방법은 ?
여분의(redundant) 장비를 추가로 사용하면 고 가용성을 높일 수 있다
즉, “대기”하고있는 장비를 두고, 서비스중인 장비가 고장 나면 즉시 대체
HA 클러스터 란?
서비스를 제공하는 다수의 장비로 구성된 그룹으로써, 시스템의 안정성을 높이고
downtime(중단시간)을 최소화 하고 uptime(가동시간)을 최대화 함
HA 클러스터를 통한 장애극복이란?
하나의 장비가 고장나면 클러스터 내의 다른 장비가 서비스를 처리한다. 이러한 과정
을 failover(장애극복) 라고 한다.
클러스터 내의 장비가 동작하는 2가지 방법은 ?
클러스터 내의 장비는 active-active 또는 active-standby 모드로 동작한다.
HA 클러스터가 동작하는 방법 중 하나인 Active-active 란?
두 대의 장비가 모두 활성화 되어 서비스를 제공하고, 한대의 장비에 문
제가 생기면 해당 장비는 사용하지 않음
HA 클러스터가 동작하는 방법 중 하나인 Active-standby 란?
한대는 active, 다른 한대는 standby 모드로 설정하고, active 상태인
장비만 서비스를 제공함. Active 장비가 고장나면, 즉시 standby 장비가 active 상태로
전환하여 서비스를 제공
이것을 우리가 개발하는 Simply SNS 서비스의 LB 가용성을 위해 적용 시키면 ?
LB 를 두대로 하여 한개는 active 모드, 다른 하나는 stand-by 모드로 한다. active 인 LB 가 고장나면 standby 상태였던 다른 LB 가 대체한다.
웹서버에 접근하는 사용자가 더더욱 늘어나거나 웹서버 두대가 동시에 고장나면 ?
웹서버를 확장하여 HA 클러스터를 확장시킴 (Horizontal scaling + HA clustering)
사용자수가 늘어나 DB로 인한 병목현상이 발생하거나 DB 장애가 발생하면?
DB 서버를 확장하여 HA 클러스터 확장시킴 (Horizontal scaling + HA clustering)
동기화란 무엇인가 ?
동일한 데이터나 파일의 내용이 하나 이상의 장소(혹은 장치)에서 동일하게 유지 되게 하는 것을 의미함
같은 역할을 하는 DB가 다수일 때 동기화 필요한가? 그 이유는 ?
예를들어 친구목록을 관리하는 DB 서버가 여러 대인데 그 중한대만 업데이트를 하게 되면, 다른 DB가 동기화 되지 않을 경우, 친구목록이 달라질 수 있음.
HA 클러스터로 묶인 장비들 간에 주기적으로 필요한 것은 ?
Heartbeat 체크 (shut down 되었는지여부를 체크하기 위해서) ; ping
같은 역할을 하는 DB 간에 필요한 것은 ?
동기화
각각의 웹 서버는 여러개의 DB 중에서 어떤 DB 를 사용하는 가 ?
물리적으로 가깝거나 부하량이 적은 DB 사용 (처
리/응답시간 감소를 위해)
응답시간을 줄어서 서비스 품질을 개선하려고 한다. 빈번하게 access 되는 데이터가 있다는 가정하에 어떤 방법을 사용할 수 있을 까?
빈번하게 호출되는 데이터를 db (= 하드 디스크) 대신에 응답시간이 빠른 캐시(on-chip memory)에 저장한다.
응답 시간 속도를 높이기 위해 캐시 시스템을 도입했을 때, 어떤 방식으로 작동하는 가?
접근할 데이터가 캐시 시스템에 있는지를 먼저 확인하고, 없으면 DB 에서 데이터 읽어옴
simply sns 사용자가 많이 늘어서 horizontal scaling + HA clustering 을 했는데, 갑자기 90% 사용자가 탈퇴한다면?
- 대부분의 시스템 자원이 사용되지 않음
- 비용 낭비 (서버 등등의 구입비가 낭비되고, 서버 운영비도 낭비됨)
- HS (horizontal scaling) 방식으로 성능 확장을 한 경우, 일부 장비를 제거하여 다른
시스템의 성능 확장에 사용할 수 있음
사용자의 90 % 가 탈퇴해서 서버 성능을 줄였는데, 갑자기 사용자가 100배 폭증한다면?
- 서버의 성능을 줄여놓은 상태이므로, 서비스 품질이 크게 저하됨
- HS 방식으로 시스템 성능을 다시 확장해야함
HS 방식의 단점은 ?
서비스에 장애 없이 성능을 높이거나 줄일 수 있지만,
이 과정에서 서버 재배치, OS/SW 설치 등에 시간+노력이 필요함
VS/HS 방식의 공통된 단점 2가지는 ?
- 새로운 부품/장비 등을 구매해야 하는데, 이 과정에서 많은 비용+시간+노력이 필요함
(-부품/장비 구매 시, 초기 비용이 큼
-특히, 특수 목적으로 제작된 서버 구매 시 오랜 시간을 기다려야 함
기다리는 기간 동안의 서비스 품질 저하를 막을 수 없음) - VS/HS 방식으로 시스템이 확장되는 경우, 이에 따른 운영비가 증가함 (서버실 운영비 (전기, 냉방 등, 서버실 관리자 인건비 등)
기존의 성능 확장 방식 (vs/hs )의 2가지 단점은 ?
- 비용과 시간이 많이 필요함.
2. 사용자 트래픽이 시시각각 큰 폭으로 변동하는 경우, 빨리 대응할 수 없음
적은 비용으로 동적으로 신속하게 시스템 성능을 높였다가 낮출 수 있을까
yes -> 클라우드 컴퓨팅 기술을 이용하면 됨