Amazon과 같은 회사는 데이터베이스 계층에 액세스하는 병목 현상을 어떻게 방지합니까? (또는 다른 대형 전자 상거래 웹 애플리케이션)과

아마존 (또는 다른 대형 전자 상거래 웹 애플리케이션)과 같은 회사가 대규모 온라인 매장을 운영하고 있으며 창고에 물리적 품목의 수량이 제한되어 있다고 생각한다면 어떻게이를 최적화 할 수 있습니까? 단일 병목 현상? 물론 복제 할 수있는 많은 데이터베이스와로드를 독립적으로 처리하는 많은 서버가 있어야합니다. 그러나 여러 사용자가 별도의 서버에서 서비스를 받고 있고 둘 다 동일한 항목을 장바구니에 추가하려고하면 해당 항목에 남은 수량에 대해 “진실한 소스”가 있어야합니다. 최소한 단일 품목의 제품 정보에 액세스하는 모든 사용자가 동일한 데이터베이스를 직렬로 쿼리해야한다는 의미는 아닙니까?

분산 컴퓨팅을 사용하여 대형 매장을 운영하고 재고 정보가 포함 된 단일 DB에서 큰 병목 현상을 발생시키지 않는 방법을 알고 싶습니다.



답변

그러나 여러 사용자가 별도의 서버에서 서비스를 받고 있고 둘 다 동일한 항목을 장바구니에 추가하려고하면 해당 항목에 남은 수량에 대해 “진실한 소스”가 있어야합니다.

실제로는 아닙니다. 두 가지 오류 사례 모두 비용이 많이 들지 않는 비즈니스 솔루션이 있기 때문에 100 % 완벽한 기술 솔루션이 필요한 문제는 아닙니다.

  • 사용자에게 상품이 매진되었다고 잘못 알리면 판매가 중단됩니다. 매일 수백만 개의 상품을 판매하는 경우 하루에 한두 번 정도 발생하면 소음이 없어집니다.
  • 주문을 수락하고 처리하는 동안 품목이 부족한 것으로 판명되면 고객에게 알리고 재입고가 가능할 때까지 기다리거나 주문을 취소하도록 선택할 수 있습니다. 약간 성가신 고객이 있습니다. 주문의 99.99 %가 정상적으로 작동 할 때 큰 문제는 아닙니다.

사실, 나는 최근에 두 번째 사례를 직접 경험했기 때문에 가설은 아닙니다. 그것이 일어나고 아마존이 처리하는 방식입니다.

이론적으로 해결하기 어려운 문제가있을 때 자주 적용되는 개념입니다 (성능, 최적화 등). 대부분의 경우 실제로 잘 작동하는 솔루션으로 생활하고 때로는 받아 들일 수 있습니다. 장애 발생시이를 감지하고 처리 할 수있는 한 장애가 발생합니다.


답변

의 조합

  • 해싱
  • 샤딩
  • 복제
  • 분포
  • 높은 페일 오버
  • 키-값 저장소

마술은 없으며 점점 더 복잡한 상황입니다. DNS와 마찬가지로 확장이 가능합니다.

‘단일 버전의 진실’은 그러한 시스템의 일부입니다. 새로운 키를 생성하는 것은 시퀀스에서 다음 숫자를 생성하는 것보다 더 복잡한 작업이됩니다. 예를 들어 다른 시퀀스가 ​​존재합니다. 이는 분산 데이터베이스 시스템이 처리 할 수있는 복잡한 유형으로, 새로운 객체를 만들 때 다른 객체에서 사용할 수 있도록 구성 요소에 대해 여러 작업을 수행하고 필요에 따라 시퀀스가 ​​고유해야합니다 (복합 키 등). .


답변

‘최종 품목 재고’문제가 다음과 같은 방식으로 해결되었습니다.

모든 재고 레벨을 매일 업데이트하고 임계 값 레벨에 따라 주문시 또는 재고 부족 범주로 제품을 높음, 낮음으로 표시하십시오.

분명히 문제가되는 ‘낮은 재고’항목

  • 재고 수준이 높은 품목

재고 수준을 확인하지 않아도됩니다. 그냥 주문하십시오

  • 재고 수준이 낮은 품목

‘Last few left!’를 탐색 할 때 사용자에게 경고하십시오. 그들이 지불하려고 할 때, 재고 수준을 확인하고 감소시킵니다. 재고가 없으면 품목 상태를 업데이트하십시오.

이렇게하면 ‘낮은 재고’품목에 대해서만 데이터베이스에 도달 할 수 있으며 고객이 구매 프로세스를 훨씬 더 잘 수행 할 때만 그렇게합니다. 비용은 일부 고객이 구매를 완료 할 수 없다는 것입니다.

그러나 대부분의 경우 ‘재고 없음’은 실제로 다른 배송을 기다리는 것을 의미하므로 주문을 수락하고 경고 메시지를 표시하거나 배송 옵션을 제한하고자 할 수 있습니다. 그래서 그 고객들은 길을 잃지 않았습니다.

판매와 같은 높은로드 시간 동안 재고 확인을 끄고 나중에 고객에게 전자 메일을 보낼 수도 있습니다. ‘죄송합니다. X가 부족합니다. Y를 원하십니까?’

본질적으로 전자 상거래 플랫폼의 목표는 데이터베이스에서 읽지 않습니다. 항상 캐시 된 페이지를 제공하고 클라이언트 측에서 모든 작업을 수행하십시오.


답변

이 비디오에서 Martin Fowler는 NoSQL 데이터베이스에 대해 설명합니다.

https://www.youtube.com/watch?v=qI_g07C_Q5I

요점 (어딘가에 있음) 중 하나는 아마존과 같은 곳에서 실제로 주문 가능한지 “확인”하지 않고 주문을 수락함으로써 99 %의 사람들을 행복하게하고, “죄송합니다. 누군가 당신을 이길 것 같습니다.”

다시 말해서, 당신이 묘사 한 시나리오에 대한 실제 처리는 없으며, 아마존이 마지막으로 성공한 인벤토리를 기반으로 의심의 이점을 누리고 동시 트랜잭션이 oopsie 사이에서 미끄러 져 나가는 경우 이점을 얻습니다.

(Btw, NoSQL에 대해 궁금하다면 좋은 비디오입니다)