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; 고가용성) 이란?
-서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정
상 운영이 가능한 성질
- 고 가용성=가용성이 높다=시스템이 고장 나지 않는다=서비스가 중단되지 않는다