전자 상거래 웹 사이트에서 동시성을 바구니로 관리하는 가장 좋은 방법 경우를 관리하는 가장 좋은 방법은 무엇입니까? 이 두

두 고객이 동시에 재고가 1 인 제품을 추가하는 경우를 관리하는 가장 좋은 방법은 무엇입니까?

이 두 고객 중 한 명이 동일한 제품을 추가하지 않도록 바구니 코드를 확인해야합니까?

또는 예를 들어 관련 제품이 아직 재고가 있는지 확인하기위한 두 번째 쿼리 (동시 고객이 아직 구매하지 않은 의미)를 수행 할 때 지불 단계에서이 점검을 수행해야합니까?



답변

이 질문에 대한 완벽한 답은 없으며 세부 사항에 따라 다릅니다.

첫 번째 ‘방어선’으로서 나는 가능한 한 낮은 상품을 팔지 않음으로써 그러한 상황을 전혀 피하려고 노력할 것입니다. 가능한 경우 상황과 판매하려는 기사의 종류에 따라 달라질 수 있습니다. 내가 일하는 회사에서는 재고가 없어지기 전에 기사가 웹 사이트에서 대부분 제거됩니다. 그러나 우리는 전체 판매를 판매하고 있으며 나머지 기사는 판매 사원이 특별 제안으로 판매합니다. 소규모 상점의 경우, 특히 고가의 기사를 판매 할 때 옵션이 아닐 수 있습니다.

바구니에 무언가를 넣을 때 이중 점검을 수행하는 솔루션은 그리 좋지 않습니다. 사람들은 실제로 주문하지 않고 바구니에 많은 것을 넣었습니다. 따라서 이로 인해 특정 기간 동안이 기사가 차단 될 수 있습니다.

따라서 소규모 직업에 대한 겸손한 의견으로는 주문이 실제로 이루어질 때 지불 직전에 최종 점검을하는 것이 가장 좋습니다. 최악의 경우 고객에게 현재 재고가 부족한 곳을 알려줘야합니다 (소규모 상점의 경우 자주 발생하지 않음).


답변

모범 사례는 특정 비즈니스 사례에적합한 옵션을 선택하는 것입니다 .

  1. 낙관적 오프라인 잠금

    … 한 세션에서 커밋 할 변경 내용이 다른 세션의 변경 내용과 충돌하지 않는지 확인 하여이 문제 ( 세션 충돌 문제)를 해결합니다 . 성공적인 커밋 사전 검증은 어떤 의미에서 레코드 데이터의 변경을 진행해도 괜찮음을 나타내는 잠금을 얻는 것입니다. 유효성 검사 및 업데이트가 단일 시스템 트랜잭션 내에서 발생하는 한 비즈니스 트랜잭션은 일관성을 표시합니다.

  2. 비관적 오프라인 잠금
    … 충돌을 완전히 방지하여 충돌을 방지합니다. 그것은 비즈니스 트랜잭션이 데이터를 사용하기 전에 데이터 조각에 대한 잠금을 얻도록 강요하므로 대부분의 경우 비즈니스 트랜잭션을 시작하면 동시성에 의해 튀지 않고 완료 할 수 있습니다. 제어…

“비관적 오프라인 잠금은 세션 충돌 가능성이 높고 시스템의 동시성을 제한한다고 가정하는 반면, 낙관적 오프라인 잠금은 충돌 가능성이 낮다고 가정합니다. 세션 충돌로 인해 여러 사용자가 동일한 작업을 수행 할 수는 없습니다. 데이터를 동시에 수집해야합니다. “


답변

이것은 데이터베이스 문제뿐만 아니라 사람 문제이며 데이터베이스 잠금은 쉬운 일입니다!

고객이 절대 체크 아웃하지 않을 수 있다고 가정하면…

두 가지 기본 옵션이 있습니다.

  • 고객이 재고를 다시 확인하거나 다시 시작해야하는 시간이 지난 후 고객이 장바구니에 상품을 추가 한 후 수정 시간 (20 분) 동안 상품을 예약합니다. 이것은 종종 행사 또는 항공사 좌석 티켓에 사용됩니다.

  • 또는 ” 24 시간 내에 xxx 일반 배송 됨 “과 같은 문구를 말하지만 결제 할 때 재고를 예약합니다.이 경우 일부 품목이 재고가 있지만 다른 품목이 아닌 경우 체크 아웃 후 주문을 취소하도록 허용해야합니다. (녹색, 노랑, 빨강 재고 수준도 제대로 작동하거나 일부 웹 사이트는 1 또는 2로 내려갈 때 “낮은 재고”라고 말합니다)


답변

항상 그렇듯이 요구 사항에 따라 다릅니다. 아마존이고 하루에 100,000,000 개의 상품을 판매하는 경우 선제 적 점검 및 잠금에 대한 오버 헤드가 엄청나게 많을 수 있으며 하루에 한 명의 고객이 결국 상품을 가져 오지 못하는 문제는 무시할 수 있습니다. 독특하고 비싼 희귀 한 골동품 종교 아이콘을 다루며 반대의 경우가 있습니다. 비즈니스 사례가 해당 스펙트럼에서 어디에 있는지 알아야합니다.


답변

이 경우 메시지 대기열을 사용하여 주문을 처리하고 동일한 제품에서 한 번에 하나의 작업 만 FIFO 방식으로 처리하도록 구성했습니다.

주의해야 할 점은 전체 주문 처리에 새로운 오버 헤드를 추가하여 상황을 약간 지연 시킨다는 것입니다.


답변

사용자에게 가장 좋은 방법은 두 번째 추가가 실패하는지 확인하는 것입니다. 그러나 이것은 0.1 % 사례를 위해 전체 사이트를 느리게 할 것입니다.

가장 기술적으로 효율적인 솔루션과 판매량을 극대화하는 솔루션은 성공한 다음 나중에 두 가지 주문을 모두 이행하는 것입니다. 바로 재고가 없어서 찾을 수 없다는 의미는 아닙니다. 비상시. 당신이 할 수 없다면 누군가가 운을 내고 사과하는 사용자에게 연락해야합니다. 그러나 이것이 올해 크리스마스 전에 소란을 불러 일으켰던 것입니다 (이것이 유일한 기사는 아니 었으므로 Best Buy에 사과하지만 처음 발견했습니다).

당신의 임무는 장단점과 함께 비즈니스에 모든 옵션 을 제시 하고 그들이 조언에 따라 결정하도록하는 것입니다. 그들이 판매를 극대화하기 위해 때때로 평판에 작은 타격을 줄 수 있다면 충분히 공정합니다. 그들이 할 수없고 트래픽이 너무 적어 이중 업데이트를 신속하게 확인할 수 있다면 그것은 또한 그들의 전화입니다.