목차
비녀장머리말
시스템 구성 요소는 시스템 설계의 기본 구성 요소로 결합되어 복잡한 소프트웨어 시스템을 구성할 수 있습니다. 여기서는 시스템 설계의 기본 개념도 검토합니다. 시스템 설계는 소프트웨어 시스템의 전체 아키텍처와 설계를 포함하는 소프트웨어 엔지니어링의 중요한 연결 고리입니다. 좋은 시스템 설계는 소프트웨어 시스템을 더욱 안정적이고 확장 가능하며 유지 관리하기 쉽게 만들 수 있습니다.
물론, 이러한 구성 요소를 사용하여 시스템을 설계하려면 먼저 어떤 디자인 구성 요소가 있는지 이해해야 합니까? 각 디자인 요소는 무엇을 나타냅니까? 이 문서에서는 각 시스템 구성 요소를 소개하고, 다음 장에서는 각 구성 요소의 세부 정보와 응용 프로그램을 자세히 설명합니다.
시스템 구성 요소를 사용하는 이유는 무엇입니까?
일반적으로 시스템 설계 문제에는 몇 가지 유사점이 있지만 세부 사항은 다른 경우가 많습니다. 따라서 우리는 시스템 구성 요소를 사용하여 이러한 시스템 간 설계 문제 간의 유사성을 처리합니다. 예를 들어 로드 밸런서는 일반적인 시스템 구성 요소입니다. 로드 밸런싱이 필요한 상황이 발생하면 이 구성 요소를 직접 사용하세요.
모듈화를 통해 시스템 구성 요소를 분리하는 이유는 "기능만 논의하면 되고 구현에 대해서는 논의할 필요가 없기 때문입니다." 이 역시 앞 장에서 언급한 '추상화'의 개념입니다. 이는 또 다른 장점이 있습니다. 면접관이 특정 부분을 최적화하기를 원하는 경우 다른 시스템 구성 요소를 고려하지 않고 특정 시스템 구성 요소를 최적화하는 방법만 설명하면 됩니다.
시스템 설계의 공통 시스템 구성 요소는 Amazon Web Services(AWS), Azure 및 Google Cloud Platform(GCP)과 같은 잘 알려진 공용 클라우드 서비스에서도 사용할 수 있습니다. 위에서 언급한 잘 알려진 클라우드 서비스는 일반적으로 사용자가 사용할 수 있는 해당 시스템 구성 요소를 제공합니다.
시스템 설계 구성 요소 빌딩 블록
시스템 설계에 있어서 시스템 구성요소는 매우 중요하다. 시스템 설계에 필요한 자원과 성능을 예측하는 것 외에도, 시스템 설계 프로세스에서 가장 중요한 것은 기존 시스템 설계 구성요소를 통해 소프트웨어 시스템을 어떻게 구축하느냐이다. 다양한 시스템 구성요소에 대한 소개도 여기에 나열되어 있습니다. 향후 문서에서는 이러한 시스템 구성요소를 자세히 소개할 것입니다.
도메인 이름 시스템(DNS)
DNS(Domain Name System) 시스템 구성 요소는 다양한 인터넷 프로토콜을 통해 인터넷에 연결된 컴퓨터에 대한 계층적 분산형 명명 시스템을 설계하는 방법에 중점을 둡니다. 또한 IP 및 도메인 이름 문제를 처리하는 데 도움이 되도록 DNS를 사용해야 합니다.
로드 밸런서
로드 밸런서는 주로 서버 측 서비스 요청을 수신 클라이언트 요청으로 분산하는 데 사용되는 시스템 구성 요소로, 로드를 줄이고 실패한 서버를 우회할 수도 있습니다. 직설적으로 말하면, 많은 요청으로 인해 특정 서버가 마비되는 것을 방지하기 위해 서버와 클라이언트 사이를 오가는 요청의 균형을 맞춰야 합니다.
데이터베이스
데이터베이스는 데이터를 저장, 검색, 수정 및 삭제할 수 있는 관계형 데이터베이스인 시스템 구성 요소입니다. 다음 장에서는 데이터베이스를 설명할 때 SQL이 적합한 상황과 NoSQL이 적합한 상황에 대해서도 자세히 설명하겠습니다. 최적화 및 백업 방법도 설명하겠습니다.
키-값 저장소
키-값 저장소(Key-Value Store)는 데이터를 키 값 형태로 저장하는 비연관형 데이터베이스입니다. 이 데이터베이스를 설명할 때 키-값 저장소의 설계와 확장성, 지속성 및 구성 가능성 등을 달성하는 중요한 개념도 설명합니다.
콘텐츠 전달 네트워크(CDN)
CDN(콘텐츠 전송 네트워크)은 데이터 집약적인 애플리케이션의 웹 페이지 로딩 속도를 높이는 상호 연결된 서버 네트워크입니다. 사용자가 웹사이트를 방문하면 해당 웹사이트 서버의 데이터가 인터넷을 통해 사용자의 컴퓨터로 전송되어야 합니다. 사용자가 서버에서 멀리 떨어져 있는 경우 대용량 파일(예: 비디오, 웹 사이트 이미지)을 로드하는 데 시간이 오래 걸릴 수 있습니다. 반면, CDN 서버에 호스팅된 웹사이트 콘텐츠는 지리적으로 사용자와 가깝고 사용자의 컴퓨터에 더 빨리 도달합니다. CDN을 사용하면 대기 시간과 서버 로드를 줄이면서 최종 사용자에게 콘텐츠를 효과적으로 전달할 수 있습니다.
시퀀서
시퀀서 시스템 구성 요소 중에서 주요 초점은 고유 ID를 가진 생성기를 생성하는 방법에 있으며, 일부 공간에서는 이러한 생성기의 원리를 설명하는 데 사용됩니다. 그렇다면 ID 생성기는 무엇입니까? 사용자 번호를 예로 들어 보겠습니다. 사용자가 등록하면 해당 사용자 번호가 제공됩니다. 이 사용자 번호는 해당 사용자 번호가 반복되지 않기 때문에 무작위로 생성될 수 없습니다. 투명하며 특수 가공을 거쳐야 생산 가능합니다.
서비스 모니터링
모니터링 시스템은 분산형 시스템에서 매우 유용합니다. 모니터링 시스템은 시스템을 분석하는 데 도움이 되고 문제가 발생할 경우 엔지니어, 프로젝트 관리자 및 고객에게 알릴 수 있기 때문입니다. 모니터링은 일반적으로 조기 경고에 사용되므로 시스템 관리자는 문제가 다시 발생하기 전에 미리 조치를 취하여 다가오는 작은 문제가 큰 문제로 변하는 것을 방지할 수 있습니다. 세상에 오류가 없는 시스템은 없으므로 문제를 보고하는 데 도움이 되는 서비스 모니터링이 필요하다는 점을 기억하십시오.
분산 캐싱
소위 캐시는 데이터를 임시로 저장하여 성능을 최적화합니다. 분산형 캐시 시스템에는 다양한 유형의 저장 메커니즘과 협력하여 자주 검색되는 데이터를 반환하여 시스템을 최적화하는 여러 캐시 서버가 있습니다.
분산 메시징 대기열
분산 시스템 큐는 여러 서버로 구성된 큐 설계로, 시스템의 여러 부분이 비동기 방식으로 작업을 통신하고 처리할 수 있도록 하여 소프트웨어 시스템 확장성을 달성하고 안정성을 향상시킵니다.
발행-구독 시스템
게시와 구독은 문자 그대로의 의미와 같습니다. 게시자는 메시지를 게시하고 다른 메시지 수신자를 구독자라고 합니다. 이 게시-구독 사양에 따라 게시자는 게시를 담당하는 한 구독자가 누구인지 걱정할 필요가 없으며 구독자는 구독만 담당하면 됩니다.
속도 제한기
속도 제한기는 주로 서비스의 수신 요청을 제한하는 데 사용됩니다. 대량의 요청 흐름이 시스템에 들어오면 이 시스템 구성 요소를 사용하여 흐름을 제한하고 요청을 천천히 처리하여 시스템 마비를 방지할 수 있습니다. 또한 의도적이거나 의도하지 않은 높은 트래픽 액세스를 방지하기 위해 시스템 서비스에 대한 방어 계층으로 일반적으로 속도 제한기를 사용합니다.
블롭 스토어
"Blob"은 Binary Large Object의 약어로, 바이너리 형식의 대용량 데이터이며 반드시 어떤 파일 형식과도 일치하지 않습니다. Blob Storage는 "데이터 레이크"라고 하는 비계층적 저장소 영역에 이러한 엄청난 양의 데이터를 저장합니다. 언어적으로 이 구성 요소는 멀티미디어 파일 및 바이너리 실행 파일과 같은 구조화되지 않은 데이터의 저장 방법에 중점을 둡니다.
분산 검색
검색 시스템은 사용자로부터 쿼리 문자열을 가져와 몇 초 이내에 관련 콘텐츠를 반환합니다. 수천 개의 데이터를 사용자에게 효과적이고 신속하게 반환하는 방법이 이 시스템 구성 요소가 수행하는 작업입니다.
분산 로깅
로깅은 시간이 많이 걸리고 느린 I/O 집약적 작업입니다. 이 구성 요소의 주요 임무는 분산 시스템 서비스가 프로그램의 실행 기록을 효과적으로 기록할 수 있도록 하는 것입니다. 오류가 발생하여 수정해야 하는 경우에도 이 기록 구성 요소를 사용하여 문제의 프로세스를 추적해야 합니다.
분산 작업 스케줄링
분산 작업 스케줄링은 주로 작업과 자원 간의 조정에 사용됩니다. 작업 수준 및 시스템 수준 요구 사항을 충족하기 위해 작업에 리소스를 효율적으로 할당합니다. 간단히 말해서, 이 시스템 구성 요소를 통해 시스템은 자원과 작업을 효과적으로 예약하고 예약할 수 있습니다.
샤딩된 카운터
이름에서 알 수 있듯이 카운터는 사용자의 조회수, 댓글 수, 좋아요 수와 같은 수량을 계산하는 데 사용됩니다. 소규모 시스템이라면 간단한 프로그램으로 완성할 수 있지만, 대규모 시스템이라면 수백만 건의 요청을 처리할 수 있는 효율적인 분산 계수 시스템이 필요합니다.
결론
이 문서는 2024년 3월에 작성되었으므로 이 문서에 작성된 시스템 구성 요소는 현재 알려진 내용을 기반으로 합니다. 다음 몇 개의 문서에서도 이러한 시스템 구성 요소를 소개합니다.
모두가 이 콘텐츠를 좋아하길 바랍니다!