저자: Yan Xiaonan, JD Logistics
1. 문제점
작년 중반, 내 좋은 친구(화거라고 부를 수 있음)는 당시 심각한 전염병 상황에도 불구하고 열정적으로 사업을 시작했고, 막대한 돈을 들여 자신의 카페테리아에서 여러 노점을 계약했습니다. 원래 회사에서 갑자기 사장이되었습니다. 사장이 된 화거는 조금도 게을리하지 않고 충분한 시장조사를 했을 뿐만 아니라 과거 자신의 먹을 때 고충을 바탕으로 혁신을 이뤄냈다. 고기 요리에 12위안, 채식 요리에 거의 10위안으로 문제가 발생합니다.일반적으로 소년들은 수십 달러를 지출하고 2-3가지 요리만 먹을 수 있습니다.영양이 충분하지 않습니다.걸면 구덩이에서 높은 기대치를 가지고 있지만 실제 음식이 맛이 없다는 것을 알게 되는 상황에 직면하면 경험은 더욱 악화될 것입니다.
그래서 화 형제는 시중의 마라탕 선택 계량 모드의 특성을 빌려 자체 선택 계량 모드를 출시했다.식탁에는 다양한 종류의 기성품(고기와 야채 모두)이 있을 것이며, 모두가 밥과 찐빵 등의 주식은 무료, 죽과 국은 무료, 고구마, 옥수수 등의 주식은 유료로 제공됩니다. 주식을 선택하고 국과 죽을 선택한 다음 아래 그림과 같이 결제하고 카드를 스 와이프합니다.
Hua Ge는 이전 인터넷 거인의 금메달 제품 관리자에 걸맞습니다.그는 사용자의 고통을 예리하게 파악하고 해당 솔루션을 매우 잘 제공했습니다.셀프 계량 모드는 출시 이후 동료들로부터 열렬한 환영을 받았습니다. , 거기 는 매번 긴 줄, 점심 11시 30분에 식사가 시작되어도 11시 20분 이전에 많은 동료들이 줄을 서서 기다리고 있습니다. 긴 줄의 직관적인 예를 들어 여기에 글을 쓰게 된 소감, 첫 번째 예 생각해보니 오도구 대추과자 가게 입구에 긴 줄이 생각났는데 나중에 생각해보니 B블럭 4층 경동빌딩 2호 식당의 뚝배기 줄이 더 적절해 보였다. .
화 형제는 처음에는 매우 기뻤지만 한 달 후 수익 목록을 작성하고 뭔가 잘못된 것을 발견했습니다.줄이 길고 붐비는 것 같았지만 실제 수익은 예상과 달랐습니다. 화 형제는 낮은 주문 가격의 요인을 분석하고 배제했습니다.셀렉트 모드에서는 모두가 보고 주문하고 싶은 요리가 많습니다.왕복 후 그들은 큰 접시를 만들 것입니다.기본적으로 주문 가격은 20위안부터 시작해서 남은 주문만 남았다.수량이 적을 가능성이 있다.실제 분석을 해보니 선택할 수 있는 요리의 종류가 많기 때문에 1인당 시간이 오래 걸린다는 것을 알 수 있다. 야채 선택 과정에서 요리를 선택하는 것입니다. 또한 국과 밥을 준비해야 합니다. 식사를 픽업하는 전 과정을 완료하는 데 시간이 오래 걸립니다. 뒤에 있는 동료가 앞에 있는 동료 뒤에 순서대로 요리를 주문할 수 있지만 사람마다 선호도가 다르기 때문에 음식 앞에서 머무는 시간이 다르기 때문에 앞에 있는 동료가 특정 요리 앞에서 조금 더 오래 있으면 뒤에 있는 동료는 대기 상태가 됩니다.
그리고 때로는 극단적인 상황이 있을 수 있습니다. 예를 들어 어떤 동료는 좋아하는 음식 앞에 오랫동안 머물며 고르고 선택하고 어떤 동료는 시계 방향과 시계 반대 방향으로 번갈아 가며 무료 수프를 주문합니다. 수프에 흩어져 있는 채소 잎과 달걀 흰자위를 주우기 위해 이전에 보고했던 관리자가 칠리 치킨 채소 그릇에서 이리저리 뒤돌아 깊은 곳에 숨겨진 것을 찾는 것을 자신의 눈으로 목격했습니다. 약간의 치킨, 치킨 한 조각이 발견될 때마다 매니저는 얼굴에 만족스러운 미소를 짓게 됩니다. 그래서 팀 전체의 성과를 보면 식사 프로세스의 실행이 매우 느리기 때문에 실제로 식사 비용을 지불하는 사람의 수가 예상만큼 많지 않다는 사실을 알 수 있습니다.
둘, 프로그램
나중에 친구 모임에서 Hua 형제는 이 문제에 대해 저와 이야기를 나누며 저에게 말했습니다. 기술자 여러분 모두 시스템 최적화, 비용 절감 및 효율성 증가에 대해 자랑하지 말고 방법을 찾도록 도와주세요. 화 형제의 다소 도발적인 요구를 듣고 갑자기 무거운 책임감을 느꼈고 기술인의 품위를 지켜야 한다고 느꼈습니다. 그래서 곰곰이 생각해보니 이 사업상의 문제는 사실 기술적인 문제라고 할 수 있겠다는 생각이 들었다. 각 호출의 성능이 너무 낮아 시스템 전체의 처리량이 너무 낮아 전체 시스템의 성능에 영향을 미치므로 전체 시스템의 성능이 매우 떨어지기 때문에 호출로 간주할 수 있습니다. 낮음, 그 당시 3 라운드 동안 취했지만 마음이 그렇게 명확하지 않지만 여전히 Hua 형제를 위해 여러 가지 방법을 생각하기 위해 최선을 다합니다.
2.1 시스템 확장
가장 먼저 떠오르는 솔루션은 확장입니다.엔지니어링 기술 분야에서 시스템 성능이 표준에 미치지 못할 때 가장 먼저 떠오르는 솔루션은 일반적으로 확장입니다.엔지니어링 분야의 용량 확장은 일반적으로 수직으로 나눌 수 있습니다. 확장과 수평적 확장 방법: 수직적 확장은 단일 인스턴스의 하드웨어 능력을 향상시켜 단일 인스턴스의 처리 용량을 증가시키는 것이고, 수평적 확장은 인스턴스 노드를 추가하여 전체 시스템의 처리 용량을 증가시키는 것이다.
이 두 가지 이론을 적용하여 식탁의 처리량을 어떻게 향상시킬 수 있는지 살펴보겠습니다. 수직으로 확장하는 방식이지만 수평적 확장은 요리 테이블 세트를 몇 개 더 추가하면 병렬로 실행되는 2개의 요리 팀이 4 또는 8이 될 수 있는 한 많은 일을 할 수 있는 것 같습니다. Multi-threading이 동시에 이루어지므로 시스템의 전체 처리량을 즉시 두 배로 늘릴 수 있습니다.효과가 있을 뿐만 아니라 즉각적입니다.그래서 다음 그림과 같이 수평 확장의 개략도를 그렸습니다.
그러나 수평적 확장 계획은 Hua 형제에 의해 빠르게 거부되었습니다.엔지니어링 기술 분야에서 클라우드 네이티브 기술의 성숙도와 함께 응용 프로그램 수준의 확장 및 축소는 시스템 처리 기능을 향상시키는 매우 성숙한 솔루션이지만 여기서는 Hua 형제가 다른 식탁을 차리는 것은 불가능하며, Hua 형제가 계약한 부스에는 두 번째 식탁을 차릴 만큼 넓은 공간이 없기 때문에 거의 불가능합니다.
이 세상에서 돈으로 해결할 수 있는 문제는 문제라고 하지 않지만 지금 문제는 화형제가 돈이 없다는 것입니다.
2.2 단일 실행 최적화
시스템 동시성을 향상시키는 방법이 실패할 경우 시스템 처리량을 향상시키는 방법은 단일 요청의 처리 및 실행 시간을 단축하여 단위 시간당 시스템에서 처리하는 요청 수가 증가하여 시스템 처리량을 향상시키는 것입니다. 식탁에 관해서는 한 사람이 식사를 주문하는 시간을 단축해야 합니다. 특히 전 Hua Ge 매니저가 한 접시 앞에서 많은 시간을 보낼 때 어떻게 최적화합니까?
각 호출을 분할하고 각 접시 앞에서 야채를 만드는 프로세스를 시뮬레이션하고 논리의 일부를 실행하는 것으로 이해할 수 있으므로 야채를 만드는 전체 프로세스를 작은 코드 블록으로 분해할 수 있으며 총 호출 시간은 이러한 코드 블록의 실행 시간의 합으로 결정되며, 공학 기술의 관점에서 각 논리 조각이 예측 가능한 시간 내에 완료되도록 하여 각 논리 조각이 각 조각의 실행을 제어할 수 있도록 하는 것입니다. 타임아웃 판단 논리를 통한 코드의 시간, 여기 Baidu 검색의 예입니다. 반환된 결과의 다양성을 향상시키기 위해 Baidu는 Aladdin 아키텍처를 시작했습니다. 각 쿼리는 별 지도 모델에 의해 분석된 후 배포됩니다. 서로 다른 수직 카테고리.각 수직 카테고리는 처리 및 생성됩니다.카드는 자체 비즈니스 필드에 있으며, Aladdin의 루트 응용 프로그램은 수직 카테고리에서 반환된 결과를 집계하여 사용자에게 반환합니다.특정 수직 카테고리의 실행 속도가 느립니다. 예를 들어, 사용자가 약을 검색할 때 건강 카테고리 이러한 응용 프로그램은 검색자의 경도와 위도를 기준으로 주변 o2o 약국을 필터링하고 매장에서 약의 프로모션 할인 가격을 계산합니다.이 계산은 종종 오랜 시간이 걸립니다. 따라서 루트 응용 프로그램은 380ms 시간 초과 판단을 추가합니다. 수직 응용 프로그램은 모두 동일합니다. 반환하는 내용이 이 시간을 초과하면 결과가 폐기됩니다. 각 응용 프로그램에 대한 시간 초과 설정을 늘려 모든 사람이 이해하도록 하는 예입니다. 링크를 통해 전체 프로세스가 제어 가능하도록 보장할 수 있습니다. 시간 프레임 내에서 실행되므로 사용자 경험의 일관성을 보장합니다.
이 프로그램은 감정이 없기 때문에 타임아웃을 늘리기 쉽지만 식사를 주문하는 장면이 다르다. 5초. 이건 안 돼 뭐, 이유는 요리 주문은 주관적이고 능동적이다. 그는 요리를 하기 전에 원하는 만큼 멈출 수 있다. 이 문제를 생각한 후 사용자의 독립적으로 머무르고 통일된 체류 시간을 만드십시오.그래서 저는 공항의 컨베이어 벨트와 유사한 자동 컨베이어 세트를 식탁 양쪽에 보안 검색 후 터미널에 추가하는 화 형제를 위한 타임아웃 장치를 설계했습니다. 사람들이 양쪽에서 음식을 주문할 때 혼자 돌아다닐 필요가 없고 모든 사람이 같은 시간 동안 각 접시 앞에 머물러 있기 때문에 한 사람이 앞에 머무르는 문제가 없습니다. 특정 요리를 너무 오래 동안, 또한 당신 앞에 누군가의 오랜 시간으로 인해 식탁이 야기되는 문제를 피합니다. 시간 지연으로 인한 전반적인 정체 문제는 식탁의 처리량을 향상시켰고, 컨베이어 벨트를 추가하면 사람이 많지 않을 때 매우 느리게 주행하거나 심지어 정지할 수 있다는 장점이 있으며 피크 시간에는 컨베이어 벨트의 속도를 적절하게 높일 수 있습니다. 전체 식탁의 처리량을 보장합니다.
나의 기발한 아이디어를 들은 화 형제는 오랫동안 기절했다.가능성을 계산한 후 그는 이 방법이 정말 실현 가능하다고 느꼈다.그는 국경절이나 5월 1일 공휴일까지 기다렸다가 건설을 시작하고 양쪽에 컨베이어 벨트를 추가하기만 하면 된다. 마지막으로 그는 실행 가능한 계획을 가진 Hua 형제가 약간 흥분하고 그의 뺨도 약간 붉어지는 것을 들었습니다.
2.3 비핵심 프로세스 제거
Hua 형제가 내 계획을 수락하는 것을보고 즉시 많은 격려를 느꼈고이 프로세스를 최적화하는 방법에 대해 계속 생각했습니다. 엔지니어링 기술 분야에서 프로세스는 많은 양의 작업을 거쳐야 수행 할 수 있습니다. 중요한 것은 프로세스를 단순화하고 종종 골든 프로세스라고 하는 핵심 프로세스 링크만 유지하고 비핵심 비즈니스 노드를 기본 프로세스에서 제거하여 간소화된 기본 프로세스가 실행 시간을 단축할 수 있도록 하는 것입니다. 어느 정도, 주요 프로세스 프로세스 실행 논리가 적고 오류 확률도 감소합니다.JD Retail의 주문 계산 프로세스를 예로 들면 소매 측이 정산할 때 다음과 같은 작업을 수행해야 합니다.
사실 장바구니에 담긴 관련 정산품 삭제, 미리 점유한 셀프픽업장 등 정산에서 처리해야 할 비주요 노드는 여전히 많지만 이는 비핵심 프로세스이며 기본 프로세스에서 제거됩니다.
다시 식탁으로 돌아가서 골든프로세스는 어떤 과정인지 네, 수익과 직결되는 과정이고 밥, 찐빵, 국, 죽 등 수익이 발생하지 않는 품목은 고려해볼 수 있습니다. 주공정에서 제거하여 모두를 위해 식사를 하는 주공정을 지속적으로 단순화하고 식당의 공간을 절약합니다.남은 공간은 여러 가지로 사용할 수 있습니다.하나는 더 넣는 것입니다 주식이나 요리를 추가하면 소득이 증가할 수 있습니다.두 번째는 셀프 서비스 금전 등록기 장비를 추가하는 것입니다.이전 두 개의 금전 등록기는 식사 주문이 느릴 때 수요를 충족시킬 수 있지만 지금은 전체 프로세스가 단순화되고 모든 사람의 식사 주문 속도가 전반적으로 빨라졌습니다.이렇게 두 개의 금전 등록기는 새로운 병목 현상이 될 것이며 특히 코드를 스캔하여 직접 지불하는 학생을 만났을 때 병목 현상이 더 분명해질 것입니다. , 금전 등록기의 수를 늘림으로써 금전 등록기의 동시 처리 능력이 향상되어 새로운 성능 병목 현상의 출현을 피하고 완벽하게 식사를하는 전체 과정이 원활합니다!
화 형제는 이 제안을 듣고 매우 흡족해하며 식탁이 너무 좁고 그릇이 부족하다고 느꼈다. 화 형제 저를 존경하게 되어 매우 기쁩니다.
2.4 분산 캐시
또한 시스템 처리량을 높이고 단일 실행 시간을 단축하기 위한 인터넷의 매우 중요한 마법 무기는 분산 캐싱 기술을 사용하는 것입니다. , 여기 식탁에서도 분산 캐싱 기술을 사용할 수 있습니까?
생각해보니 앞서 주공정에서 빼낸 무상주식과 국죽은 캐싱원리, 특히 CDN 캐싱원리를 이용해 동료들의 식탁 근처에서 주식과 국수죽을 나눠먹을 수 있다. , 먹는 동료가 가장 가까운 범위에서 주식과 국과 죽을 제공할 수 있도록 표면적으로는 수익 증가가 없지만 사실 하나는 모두의 식사 경험이 더 좋다는 것이고 두 번째는 모두가 식사가 편리하고 먹는 시간이 줄어들어 식탁의 활용도가 높아집니다. 식사를 하는 다음 동료가 자리를 빨리 찾을 수 있도록 하면 경험도 향상될 것입니다. 나는 여기에 그림을 그리지 않을 것입니다. 모두가 이해할 수 있다고 믿습니다.
3. 후기
Hua 형제는 내 최적화 계획을 전체적으로 듣고 고개를 숙이고 깊은 생각에 빠졌고, 오랜만에 고개를 들고 나를 바라보며 눈이 약간 흐려졌습니다. 나는 조금 긴장했습니다. 내 계획에 대해 체계적으로 언급하고 싶었습니다 내 것은 지금 몇시인지 화 형제가 술을 너무 많이 마시고 고개를 숙이고 잠이 들었다는 것을 깨달았습니다.