차례[숨다][보여 주다]
- 1. 시스템 디자인이란 무엇을 의미합니까?
- 2. 시스템 디자이너의 가장 중요한 자질은 무엇입니까?
- 3. CAP 정리는 정확히 무엇입니까?
- 4. 로드 밸런싱이란 무엇을 이해합니까?
- 5. 비동기 프로그래밍과 병렬 프로그래밍의 차이점은 무엇입니까?
- 6. 수평 및 수직 스케일링의 차이점은 무엇입니까?
- 7. 지연 시간, 처리량 및 시스템 가용성이 정확히 무엇을 의미합니까?
- 8. ACID 속성이란 무엇입니까?
- 9. 샤딩이란 정확히 무엇입니까?
- 10. CDN이란 무엇입니까?
- 11. 왜 CDN을 사용합니까?
- 12. 샤딩과 파티셔닝의 차이점은 무엇입니까?
- 13. 캐싱이란 정확히 무엇입니까?
- 14. CDN 에지 서버란 무엇입니까?
- 15. 시스템 설계를 위한 다양한 일관성 패턴은 무엇입니까?
- 16. 낙관적 잠금이란 무엇을 의미합니까?
- 17. "리더 선출"이란 정확히 무엇을 의미합니까?
- 18. TinyURL과 같은 URL 단축 서비스를 설계하기 위한 접근 방식은 무엇입니까?
- 19. 트위터 디자인에 대한 당신의 접근 방식은 무엇입니까?
- 20. Facebook용 뉴스피드 시스템 만들기
- 21. 시스템의 BASE 속성은 무엇입니까?
- 22. IP 주소 선호도 기술을 사용한 로드 밸런싱이란 무엇입니까?
- 23. 캐시 교체(또는 축출 정책) 알고리즘은 정확히 무엇입니까?
- 24. 분산 트랜잭션이란 정확히 무엇을 의미합니까?
- 25. 기아란 정확히 무엇입니까?
- 결론
시작하기 전에 다음을 읽는 것이 좋습니다. 시스템 설계 입문 가이드 기본 지식을 새로 고칩니다.
시스템 설계 지식이 필요한 직위에 대해 인터뷰할 때 배경에 대해 이야기하고 복잡한 시스템을 개발하는 능력을 보여줄 기회가 있습니다.
잠재적인 고용주와 이야기할 때 전문 지식을 표현하는 방식은 귀하가 해당 직책에 대한 유능한 후보자임을 입증하는 데 도움이 될 수 있습니다.
기본적인 디자인 개념을 익히고 그에 대한 질문에 어떻게 대답할지 생각함으로써 면접을 준비할 수 있습니다. 다음 인터뷰를 준비하는 데 도움이 되도록 이 게시물에서 몇 가지 일반적인 시스템 디자인 인터뷰 질문과 답변을 살펴보겠습니다.
1. 시스템 디자인이란 무엇을 의미합니까?
미리 정해진 기준에 따라 모듈, 아키텍처, 구성 요소 및 해당 인터페이스와 데이터를 포함한 시스템 특성을 설정하는 프로세스를 시스템 설계라고 합니다.
회사 또는 조직의 특정 목표 및 목표를 충족시키기 위해 시스템을 정의, 생성 및 설계하는 프로세스입니다. 시스템 디자인은 코딩보다 시스템 분석, 아키텍처 패턴, API, 디자인 패턴 및 이 모든 것을 결합하는 것에 관한 것입니다.
2. 시스템 디자이너의 가장 중요한 자질은 무엇입니까?
- 사용자 상호 작용
- 외부 API 호출
- 오프라인 프로세스
3. CAP 정리는 정확히 무엇입니까?
CAP(Consistency-Availability-Partition Tolerance) 정리에 따르면 분산 시스템은 C, A, P를 동시에 보장할 수 없습니다. 최대 세 가지 보증 중 두 가지만 제공할 수 있습니다. 이를 이해하는 데 도움이 되도록 분산 데이터베이스 시스템을 사용합시다.
- 일관성: 데이터베이스 트랜잭션이 완료되면 데이터가 일관성을 유지해야 함을 지정합니다. 예를 들어, 모든 쿼리는 데이터베이스 업데이트 후에 동일한 응답을 반환해야 합니다.
- 가용성: 데이터베이스는 항상 사용 가능하고 응답성이 있어야 합니다.
- 파티션 허용 오차: 통신에 문제가 발생하더라도 데이터베이스 시스템은 계속 작동해야 합니다.
4. 로드 밸런싱이란 무엇을 이해합니까?
로드 균형 조정 백엔드 서버 집합 간에 들어오는 트래픽을 효율적으로 분산하는 프로세스입니다. 이를 서버 풀이라고 합니다. 최신 웹사이트는 고객의 수백만 건의 쿼리를 처리하고 빠르고 안정적으로 응답하도록 구축되었습니다. 이러한 요구를 처리하려면 더 많은 서버가 필요합니다.
이 경우 과부하를 피하기 위해 각 서버 간에 요청 트래픽을 효율적으로 나누는 것이 중요합니다. 로드 밸런서는 트래픽 경찰의 역할을 하여 요청을 가로채서 사용 가능한 서버 간에 라우팅하여 한 서버에 과부하가 걸리지 않도록 하여 잠재적으로 애플리케이션 성능을 저하시킵니다.
5. 비동기 프로그래밍과 병렬 프로그래밍의 차이점은 무엇입니까?
무엇이든 비동기식으로 실행할 때 다른 작업을 계속하기 전에 완료될 때까지 기다릴 필요가 없다는 의미입니다. 병렬 처리는 많은 작업을 동시에 실행하는 것을 말합니다.
작업을 여러 노동 덩어리로 나눌 수 있으면 병렬 처리가 효과적으로 작동합니다. 비동기 및 콜백은 동시성을 나타내는 수단(도구 또는 메커니즘), 즉 리소스를 통신하고 공유할 수 있는 엔터티 그룹입니다.
6. 수평 및 수직 스케일링의 차이점은 무엇입니까?
분산된 장치 네트워크에 걸쳐 처리 및 메모리 요구를 분산시키는 네트워크에 새로운 컴퓨팅 장비를 추가하는 것을 수평 확장이라고 합니다. 간단히 말해서 현재 풀에 새 서버 인스턴스가 추가되고 이러한 장치 간에 트래픽 부하가 효율적으로 분산됩니다.
수직 확장은 RAM, 효율적인 CPU를 추가하거나 더 높은 용량의 새 시스템으로 마이그레이션하여 단일 컴퓨터의 리소스 용량을 확장하는 개념을 나타냅니다. 프로그래밍 변경 없이 서버의 기능을 향상시킬 수 있습니다.
7. 지연 시간, 처리량 및 시스템 가용성이 정확히 무엇을 의미합니까?
성능은 서비스의 속도와 안정성에 기여하므로 시스템 설계의 필수 요소입니다. 가장 중요한 세 가지 성능 측정은 다음과 같습니다.
- 단일 메시지를 밀리초 단위로 전달하는 데 걸리는 시간을 대기 시간이라고 합니다.
- 특정 기간 동안 시스템을 통해 성공적으로 전송된 데이터의 양을 처리량이라고 합니다. 이를 측정하기 위해 초당 비트 수를 사용합니다.
- 시스템이 쿼리에 반응할 수 있는 시간은 가용성에 따라 정의됩니다. System Uptime / (System Uptime+Downtime)은 이를 계산하는 공식입니다.
8. ACID 속성이란 무엇입니까?
- 원자성(Atomicity): 데이터베이스 변경이 모두 또는 없음을 보장합니다.
- 일관성: 데이터베이스의 데이터 값이 일관성이 있습니다.
- 격리: 두 트랜잭션의 분리를 나타냅니다.
- 내구성: 서버에 장애가 발생하더라도 데이터는 보존됩니다.
9. 샤딩이란 정확히 무엇입니까?
샤딩은 거대한 논리적 데이터 세트를 여러 데이터베이스로 나누는 기술입니다. 데이터가 여러 컴퓨터에 저장되기 때문에 수평 데이터 분할을 의미하기도 합니다. 결과적으로 공유 데이터베이스는 하나의 거대한 컴퓨터보다 더 많은 쿼리를 처리할 수 있습니다.
10. CDN이란 무엇입니까?
콘텐츠 전송 네트워크는 인터넷 정보를 신속하게 제공하기 위해 협력하는 전세계 컴퓨터 네트워크입니다. 인터넷 콘텐츠를 로드하는 데 필요한 HTML 페이지, JavaScript 파일, 스타일시트, 사진 및 비디오와 같은 요소를 빠르게 전달할 수 있습니다.
11. 왜 CDN을 사용합니까?
- 정적 자원이 웹사이트의 약 80%를 차지한다는 점을 감안할 때 CDN을 채택하면 원본 서버의 부담을 크게 줄일 수 있습니다.
- 이동 거리가 짧기 때문에 여러 지역에서 방문자가 있는 웹 사이트 소유자에게 정보가 더 빨리 제공됩니다.
- CDN 사용자는 트래픽 급증에 대응하여 신속하게 확장 및 축소할 수 있는 기능도 활용할 수 있습니다.
12. 샤딩과 파티셔닝의 차이점은 무엇입니까?
데이터베이스 샤딩 - 데이터베이스 샤딩은 단일 데이터 세트를 여러 데이터베이스로 분할하여 다른 워크스테이션에 저장할 수 있는 방법입니다. 더 큰 데이터 세트는 더 작은 청크로 나누어 여러 데이터 노드에 저장하여 시스템의 총 저장 용량을 늘릴 수 있습니다.
여러 시스템에 데이터를 분산함으로써 공유 데이터베이스는 단일 시스템보다 더 많은 쿼리를 처리할 수 있습니다.
데이터베이스 분할은 저장된 데이터베이스 개체(테이블, 인덱스 및 뷰)를 별도의 조각으로 나누는 프로세스입니다. 제어 가능성, 성능 및 가용성을 높이기 위해 큰 데이터베이스 개체가 분할됩니다.
경우에 따라 분할은 분할된 데이터에 액세스할 때 속도를 향상시킬 수 있습니다. 분할은 인덱스 크기를 줄이고 인덱스의 선행 열 역할을 하여 메모리에서 가장 필요한 인덱스를 찾을 가능성을 높일 수 있습니다.
13. 캐싱이란 정확히 무엇입니까?
캐싱은 데이터 액세스 속도를 높이고 사이트 대기 시간을 줄이는 캐시라고 하는 임시 저장 영역에 파일 복사본을 보관하는 기술입니다. 캐시에는 일정량의 데이터만 저장할 수 있습니다.
따라서 비즈니스 목표에 가장 적합한 캐시 업데이트 기술을 결정하는 것이 중요합니다.
14. CDN 에지 서버란 무엇입니까?
원본 서버 또는 스토리지 클러스터에서 획득한 자료를 캐시하는 CDN 서버를 에지 서버라고 합니다. 접속 지점은 에지 서버(POP)를 설명하는 데 자주 사용되는 용어입니다.
에지 서버는 물리적으로 POP에 위치합니다. 해당 POP에서 정보는 많은 에지 서버에 의해 캐시될 수 있습니다.
여러 위치에서 웹사이트의 섹션을 제공하는 기능은 방문자와 웹 서버 사이의 거리를 줄여 지연 시간을 줄입니다. CDN 에지 서버는 이 정확한 목표를 달성합니다.
15. 시스템 설계를 위한 다양한 일관성 패턴은 무엇입니까?
모든 읽기 요청은 CAP 정리에 따라 가장 최근에 작성된 데이터를 검색해야 합니다. 많은 데이터 복사본에 액세스할 수 있는 경우 고객이 지속적으로 최신 데이터를 받을 수 있도록 동기화하는 것이 어렵습니다. 다음은 가능한 일관성 패턴입니다.
- 약한 일관성: 데이터 쓰기 후 읽기 요청이 업데이트된 데이터를 가져오거나 얻지 못할 수 있습니다. 이 수준의 안정성은 VoIP, 화상 채팅 및 멀티플레이어 게임과 같은 실시간 애플리케이션에 이상적입니다.
- 최종 일관성: 읽기는 결국 데이터가 기록된 후 밀리초 이내에 가장 최근 데이터를 봅니다. 이 경우 데이터가 비동기적으로 복제됩니다. DNS와 이메일 시스템이 그 예입니다. 이것은 고가용성을 가진 시스템에서 효과적으로 작동합니다.
- 강력한 일관성: 데이터 쓰기 후에 미래의 독자는 가장 최근 데이터를 보게 됩니다. 이 경우 데이터는 동기적으로 복사됩니다. 이는 데이터 전송에 적합한 RDBMS 및 파일 시스템에서 관찰할 수 있습니다.
16. 낙관적 잠금이란 무엇을 의미합니까?
낙관적 잠금은 레코드를 읽고 버전 번호(날짜, 타임스탬프 또는 체크섬/해시를 포함하는 대체 방법)를 기록한 다음 다시 쓰기 전에 버전이 변경되지 않았는지 다시 확인하는 메커니즘입니다.
레코드를 다시 쓸 때 버전을 사용하여 업데이트를 필터링하여 원자성인지 확인합니다. (즉, 버전을 확인할 때와 디스크에 레코드를 쓸 때 사이에 변경되지 않음) 한 번에 업데이트하십시오.
17. "리더 선출"이란 정확히 무엇을 의미합니까?
애플리케이션의 가용성에 기여하는 수많은 서버가 있는 분산 시스템에서는 API를 사용할 때 여러 서버가 문제를 일으킬 수 있으므로 한 서버만 타사 API 업데이트를 담당하는 경우가 있을 수 있습니다.
이 서버를 주 서버라고 하며 선택하는 절차를 리더 선출이라고 합니다. 분산 시스템에서 리더 서버에 장애가 발생하면 서버는 장애를 인지하고 새 리더를 선택해야 합니다. 합의 기술을 사용하는 이 접근 방식은 고가용성 및 강력한 일관성 응용 프로그램에 가장 적합합니다.
18. TinyURL과 같은 URL 단축 서비스를 설계하기 위한 접근 방식은 무엇입니까?
TinyURL은 긴 URL을 하나의 고유한 짧은 URL로 변환합니다. 이러한 기술은 짧은 URL을 허용하고 전체 URL을 반환할 수도 있습니다.
결정적인 자질에는 어떤 것들이 있습니까?
- 원본보다 짧은 URL을 만드십시오.
- 더 긴 URL을 유지하고 더 짧은 URL로 바꿉니다.
- 짧은 URL에서 리디렉션을 허용합니다.
- 사용자 정의 이름이 있는 짧은 URL이 지원됩니다.
- 여러 문의를 한 번에 처리합니다.
가장 흔한 문제는 무엇입니까?
- 데이터베이스 스토리지를 어떻게 추적합니까?
- 사용자 부하가 예상을 초과하면 어떻게 됩니까?
- 두 사람이 동일한 맞춤 URL을 사용한다면 어떻게 될까요?
다음 제안을 고려하십시오.
- 해싱은 이전 URL과 새 URL을 연결하는 데 사용할 수 있는 개념입니다.
- REST API 프런트 엔드 통신을 처리하고 무거운 로드의 균형을 유지하는 데 사용할 수 있습니다.
- 멀티스레딩은 한 번에 여러 요청을 처리할 수 있는 개념입니다.
- 원본 URL은 NoSQL 데이터베이스에 저장됩니다.
19. 트위터 디자인에 대한 당신의 접근 방식은 무엇입니까?
주어진 요구 사항:
- 트윗 보내기
- 다른 사용자 팔로우
- 트윗 피드/뉴스피드
- 시스템 확장 가능
- 빠르게로드
- 시스템은 신뢰할 수 있습니다
기준을 설정하면 Twitter API 디자인에 대한 생각을 시작할 수 있습니다. 다음과 같이 표시됩니다.
시작하기 위해 API의 주요 엔드포인트를 스케치합니다. 다음은 몇 가지 예입니다.
- sendTweet(메시지)
- 팔로우유저(userID)
- 언팔로우 유저(userID)
- getFeed(페이지)
그런 다음 이러한 특성을 가능하게 하는 아키텍처를 스케치할 수 있습니다. 서버 요청을 제출한 사용자부터 시작할 수 있습니다. 로드 밸런서 뒤에 추가 API 서버를 설치하여 확장성 요구 사항을 충족하기 위해 더 큰 트래픽 수준을 라우팅할 수 있습니다. 이제 트윗을 저장할 데이터베이스를 추가해야 합니다.
우리가 제공하는 API는 확장 가능해야 함을 기억하는 것이 중요합니다. 이 서비스를 확장 가능하게 만들기 위해 API 서버 중 하나를 뉴스피드에 대한 별도의 캐시에서 읽도록 할 수 있습니다. 그렇게 하는 동안 피드 공급자를 사용하여 피드 캐시를 최신 상태로 유지해야 합니다.
20. Facebook용 뉴스피드 시스템 만들기
Facebook의 뉴스피드를 통해 사용자는 친구의 서클, 즐겨찾는 페이지 및 팔로우한 조직에서 진행 중인 일을 볼 수 있습니다.
필수 특성에는 어떤 것이 있습니까?
- 사용자가 팔로우하는 다른 시스템 엔터티의 게시물을 기반으로 뉴스피드를 만듭니다.
- 텍스트, 사진, 오디오 및 비디오는 모두 뉴스피드 게시물에 사용할 수 있습니다.
- 실시간으로 사용자의 뉴스피드에 새로운 콘텐츠를 추가합니다.
가장 일반적인 문제는 무엇입니까?
- 새 게시물이 뉴스 피드에 표시되는 데 시간이 오래 걸린다면 어떻게 합니까?
- 알고리즘이 사용자 활동의 급증을 관리할 수 있습니까?
- 뉴스피드에 어떤 게시물이 가장 먼저 표시되어야 합니까?
다음 제안을 고려하십시오.
- 팔로워에게 게시물을 배포하기 위한 팬아웃 메커니즘을 살펴보세요.
- 높은 사용자 부하를 효율적으로 처리하기 위해 샤딩을 사용할 수 있는 방법을 살펴봅니다.
- 사용자의 피드 데이터가 여러 서버에 복제되어서는 안 됩니다. 대신 사용자 ID를 기반으로 샤딩을 수행할 수 있습니다.
21. 시스템의 BASE 속성은 무엇입니까?
BASE 기능은 최근에 등장한 NoSQL 데이터베이스에 어디에나 있습니다. CAP 정리에 따르면 BASE 시스템은 일관성을 제공하지 않습니다. 이것은 CAP 정리의 다음과 같은 시스템 속성에 해당하는 구성된 약어입니다.
- "기본적으로 사용 가능"이라는 용어는 시스템을 항상 사용할 수 있음을 의미합니다.
- 소프트 상태는 입력이 제공되지 않더라도 시스템 상태가 시간이 지남에 따라 변할 수 있음을 의미합니다. 이는 주로 모델의 최종 일관성 때문입니다.
- 시스템이 해당 기간 동안 입력을 수신하지 않는다는 점을 감안할 때 최종 일관성은 시스템이 시간이 지남에 따라 일관성이 유지된다는 것을 의미합니다.
22. IP 주소 선호도 기술을 사용한 로드 밸런싱이란 무엇입니까?
로드 밸런싱의 또 다른 눈에 띄는 방법은 IP 주소 선호도입니다. 이 방법으로 클라이언트 IP 주소는 서버 노드와 연결됩니다. 하나의 서버 노드는 클라이언트 IP 주소의 모든 요청을 처리합니다.
이 방법은 HTTP 요청 헤더에서 IP 주소에 항상 액세스할 수 있고 추가 설정이 필요하지 않기 때문에 구현이 간단합니다. 클라이언트가 쿠키를 비활성화할 가능성이 있는 경우 이러한 형태의 로드 밸런싱이 유리할 수 있습니다.
23. 캐시 교체(또는 축출 정책) 알고리즘은 정확히 무엇입니까?
캐시 알고리즘(캐시 교체 알고리즘, 캐시 교체 정책 또는 캐시 제거 정책이라고도 함)은 컴퓨터 프로그램 또는 하드웨어 유지 구조가 컴퓨터에 저장된 데이터 캐시를 관리하는 데 사용할 수 있는 최적화 명령 또는 알고리즘입니다.
캐싱은 최근에 사용했거나 자주 액세스한 데이터를 기존 메모리 저장소보다 액세스 비용이 더 빠르거나 저렴한 메모리 영역에 저장하여 속도를 높입니다. 캐시가 가득 차면 알고리즘은 새 항목을 위한 자리를 만들기 위해 제거할 항목을 결정해야 합니다.
24. 분산 트랜잭션이란 정확히 무엇을 의미합니까?
분산 트랜잭션은 단일 이벤트로 인해 원자적으로 커밋될 수 없는 둘 이상의 고유한 데이터 소스가 변경되는 모든 상황입니다.
마이크로 서비스의 세계에서는 각 서비스가 작업 단위이고 대부분의 경우 비즈니스를 성공시키기 위해 수많은 서비스가 협력해야 하기 때문에 훨씬 더 복잡해집니다.
25. 기아란 정확히 무엇입니까?
스레드가 공유 리소스에 대한 일반 액세스 권한을 얻을 수 없는 경우 이를 기아 상태라고 합니다. 이것은 "탐욕스러운" 스레드 또는 "우선 순위"가 더 높은 스레드가 공유 리소스에 장기간 액세스할 수 없도록 만들 때 발생합니다.
자주 늦게 반환되는 동기화된 메서드를 제공하는 개체를 고려하십시오. 한 스레드가 이 메서드를 반복적으로 호출하면 동일한 개체에 대해 자주 동기화된 액세스가 필요한 다른 스레드가 차단되는 경우가 많습니다.
결론
브레인스토밍 세션은 시스템 설계 인터뷰가 수반하는 모든 것입니다. 우리는 이 게시물에서 가장 일반적인 시스템 디자인 인터뷰 질문을 다뤘습니다.
특정 시스템을 만들 때 취하는 방법에 대한 포괄적인 이해는 시스템 설계 인터뷰를 통과하는 데 중요합니다..
댓글을 남겨주세요.