애플리케이션을 확장 가능하게 만드는 것은 무엇입니까?

신청자가 “확장 가능한”신청서 작성 경험이 있어야한다는 구인 공고를 계속보고 있습니다. 애플리케이션을 확장 가능하게 만드는 것은 무엇이며 내 코드가 수백만 명의 사용자로 확장 될 수 있다는 것을 어떻게 알 수 있습니까?


이 질문을 더 잘 표현할 수있는 방법은 다음과 같습니다. 확장 성으로 코드를 작성하려면 어떻게해야합니까? 마음에? 그래서 코드는 나중에 생각하는 것과는 반대로 처음부터 확장 가능합니다. 특정 설계 방법이 있습니까? 아니면 단순히 작업에 적합한 알고리즘을 선택하는 문제입니까?

답변

확장성에는 두 가지 방향이 있습니다.

  • 수직 (확장이라고도 함) : 더 빠른 CPU, 더 많은 RAM, 더 많은 디스크 공간;
  • 가로 (일명 확장) : 더 많은 CPU 코어, 더 많은 CPU, 더 많은 서버 ;

첫 번째의 경우 임의의 제한이 없는지주의해야합니다. 이는 너무 작은 정수 크기 또는 고정 / 제한 길이 구조 때문입니다. 이러한 구조는 기본 OS와 관련이있을 수 있습니다. 예를 들어 더 많은 스레드 또는 프로세스를 사용하여 확장하려고하면 어떤 시점에서 OS의 한계에 도달하게됩니다. 이것이 바로 현재 고 확장 성을 위해 빌드 된 서버가 비동기 이벤트를 기반으로 동시성을 수행하는 이유입니다.이 문제는 유명한 C10K에 설명되어 있습니다. 문서 .

두 번째는 더 어렵습니다. 두 가지를 염두에두고 프로그래밍해야합니다. 데이터는 병렬로 처리되고 데이터는 노드 간의 통신이 제한되어야합니다. 실제로 이는 일반적으로 ACID의 일부를 희생하는 것을 의미합니다 (전체 ACID와 확장 기능을 동시에 가질 수 없음이 입증 됨). 데이터에 대한 가장 알려진 솔루션 이 패러다임의 스토리지는 NoSQL 솔루션입니다. 매우 단순한 키-값 저장소에서 RDBMS와 같은 시스템에 이르기까지 다양하며 조인 기능 만 제거되었습니다. 키-값 저장소 는 확장 성이 매우 뛰어나지 만 가격이 따릅니다. 기본적으로 기본 키에 대해서만 쿼리 할 수 있습니다. 즉, 지도 축소 입니다. 누적 복잡성 관점에서 보면 매우 차선책으로 보일 수 있지만 “대량 병렬로 실행되고 있다는 점을 명심해야합니다.

실제 사례를 통해 확장성에 대해 자세히 알아 보려면 , HighScalability.com 블로그 를 확인하십시오.

댓글

  • +1은 확장에 대해 언급합니다. 더 많은 리소스를 추가하는 것은 의사 결정자에게 매우 빠르고 매력적입니다 (일부 헥스 코어를 구입하고 메모리를 두 배로 늘리십시오! ).하지만 애플리케이션이 ' 그들에게 압력을 가할 수 없다면 더 큰 문제가 있습니다.

답변

확장 성은 일부 변수를 기반으로 한 처리량 측면에서 측정됩니다. 예를 들어 X 명의 사용자에 대한 초당 요청 수입니다. 확장 성을 설명하는 가장 간단한 방법은 다음과 같습니다.

부하 증가에 따른 효율성 측정

확장 성을 위해 설계 할 때 가장 먼저 이해해야하는 것은 애플리케이션에서 가장 중요한 측정이 무엇입니까? 확장 성의 핵심 요소 인 효율성 을 측정하는 방법에는 여러 가지가 있습니다.

  • 초당 동시 요청
  • 요청 당 평균 응답 시간
  • 초 / 분당 처리되는 레코드 수

사용할 수있는 더 많은 효율성 측정이 있지만 이는 웹 기반 시스템 또는 일괄 처리 시스템에서 일반적입니다.

확장 성의 다음 측면은 부하가 증가함에 따라 효율성이 어떻게되는지 측정하는 것입니다. 로드를 늘리는 일반적인 방법은 다음과 같습니다.

  • 더 많은 사용자가 서버에 연결 (예 : 더 많은 웹 트래픽)
  • 데이터베이스에 더 많은 데이터 (예 : 쿼리 시간이 더 오래 걸리거나 처리 시간이 더 이상)
  • RAID의 하드 드라이브 오류 (스토리지 성능 / 안정성이 영향을 받음)
  • 네트워크 포화

확장 가능한 애플리케이션의 목표는 부하 문제를 처리 할 때 효율성을 유지하거나 개선합니다. 간단히 말해 응답 시간이 너무 오래 걸리면 다른 서버를 추가하여 부하를 균등하게 분산 할 수 있습니까? 이 접근 방식은 한 서버에서 수행 할 작업량을 줄이고 효율성을 위해 서버가 “스위트 스팟”에서 작동하도록 유지합니다.

귀하의 애플리케이션은 특별히 확장되도록 설계되어야합니다. 즉, 세션 데이터에주의해야하며 요청을 올바른 서버로 라우팅하여 애플리케이션 확장 기능을 제한하는 병목 현상을 줄여야합니다.

답변

기본적으로 사용자 수를 늘리거나 더 큰 데이터 세트를 처리 할 때 성능 병목 현상을 피하려고합니다. , 그리고 / 또는 더 많은 언어 등으로 인터페이스를 제공합니다.

기본적으로 데이터베이스 스키마, 알고리즘 및 소프트웨어 개발 프로세스를 살펴보고 향후 문제를 예측하려고합니다. 또한 구축을 시작할 때 문제를 식별하기 위해 성능 모니터링을 설정하려고합니다.

확장 가능한 웹 사이트 구축 (link to amazon).

도움이되기를 바랍니다!

답변

응용 프로그램이 통과 할 수없는 (또는 매우 비싸게) 제한을 두지 않음으로써 진정으로 확장 가능할 수 있습니다.

사용 가능한 CPU주기가 부족하면 어떤 일이 발생합니까? 프로그램이 다중 트레드 인 경우 다중 코어가있는 상자에서 실행할 수 있지만 더 이상 더 큰 상자를 구입할 수 없으면 어떻게됩니까? 응용 프로그램은 더 이상 확장 할 수 없으므로 확장 할 수 없습니다.

진정으로 확장 가능한 모든 응용 프로그램은 투명하게 여러 컴퓨터에 분산 될 수 있어야하며 눈에 띄는 충돌없이 그렇게 할 수 있어야합니다. 이것은 쉬운 일이 아니며 Google이 성공한 이유 중 하나입니다.

답변

독특한 문제가 있습니다. 대규모 애플리케이션 지원과 함께 제공됩니다. 채용 공고는 그 환경에서 일하고 그러한 문제를 해결해야하는 지원자를 찾고 있습니다.

높은 수준의 응용 프로그램에서 “는이 코드 조각을 아주 짧은 기간에 수천 번 실행하도록 요청하면 어떻게 될지 지속적으로 질문함으로써 확장 가능하게됩니다. 이는 메모리 공간을 관리하는 것을 의미합니다. , 합계 및 데이터 캐싱 사용, 자체적으로 확장 가능한 데이터 소스 사용 등.

답변

검색 할 DB에 100 개의 행이 있고 한 번에 10 명의 사용자가 사용하고있을 때 잘 수행되는 검색 기능 구축 100 명의 사용자가 동시에 사용하고 조회 할 10 만 행이있을 때 얼마나 잘 수행 될까요?

무엇이 좋든 똑같은 성능을 발휘한다면 사용자 / 데이터의 양에 비례하여 성능을 발휘한다면 (데이터 10 배 더 == 처리하는 데 10 배 더 오래 걸린다는 의미) 좋은 것입니다. 데이터가 많을수록 (10x 모드 데이터 == 10x ^ 10 처리 시간이 더 길어짐) 제대로 확장되지 않습니다.

제 예는 실제로 Big O 표기법으로 표시되어야하지만 rrently는 Big O에서 예제를 작성할만큼 잘 모릅니다.

더미 데이터를 DB에 덤프하여 더 많은 데이터를 시뮬레이션 할 수 있으며 Apache AB와 같은 더 많은 사용자를 시뮬레이션하는 도구가 있습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다