Foundry
뉴스 피드 시스템 설계
고급
핵심

점수에 쓰는 집계 값

순서를 바꾸지 않는 정확도에는 값을 치르지 않는다

점수에는 반응 수가 들어갑니다. 그 숫자를 어떻게 얻는지가 이 절입니다. 겉보기에는 세기만 하면 되는데, 소셜 피드 규모에서는 그 세기가 가장 뜨거운 지점이 됩니다.

뜨거운 글 하나가 병목이 된다

반응 수의 작은 차이는 순서를 바꾸지 않으므로 정확히 셀 필요가 없다 뜨거운 글 하나 초당 수천 개의 좋아요가 한 글에 붙는다 정확히 세려면 그 한 줄을 모두가 차례로 고쳐야 한다 그런데 점수에 쓰이는 값은 반응 1만 반응 1만 50 순서가 같다 순서를 바꾸지 않는 정확도에는 값을 치르지 않는다 화면에 보여줄 숫자와 점수에 쓸 숫자를 같은 것으로 두지 않는다

인기 있는 글에는 초당 수천 개의 반응이 붙습니다. 그 숫자를 정확히 세려면 모두가 같은 한 줄을 차례로 고쳐야 합니다. 그 줄이 그 순간의 병목입니다.

일반적인 조회 쏠림은 뜨거운 키와 조회 쏠림에서 다뤘습니다. 여기서 다른 점은 쏠림이 읽기가 아니라 쓰기이고, 그래서 사본을 늘려도 해결되지 않는다는 것입니다.

그런데 그 정확도가 필요하지 않다

점수에서 반응 수는 범위를 좁혀서 씁니다. 그래서 1만과 1만 50은 같은 순서를 만듭니다.

점수 기여순서
반응 1만거의 같다같다
반응 1만 50거의 같다같다

순서를 바꾸지 않는 정확도에는 값을 치르지 않습니다. 이 판단이 있으면 세는 방법이 크게 달라집니다.

여러 곳에서 따로 세고 주기적으로 합친다
합치기 전 값은 실제보다 작지만 순서가 같다

화면에 보여줄 숫자는 다르다

같은 반응 수인데 쓰임이 두 가지입니다.

쓰임필요한 성질
점수 계산근사면 된다. 늦어도 된다
글 아래 표시사용자가 자기 반응을 바로 봐야 한다

두 번째만 즉시성이 필요합니다. 그리고 그것은 전체 정확도가 아니라 자기가 누른 것이 반영되어 보이는 것입니다. 자기 반응은 클라이언트가 화면에서 바로 더해 보여주고, 전체 수는 조금 늦게 맞으면 됩니다.

이 구분을 하지 않으면 점수용 집계에 즉시성을 요구하게 되고, 그러면 뜨거운 글에서 다시 한 줄 병목으로 돌아갑니다.

신호를 그대로 믿지 않는다

집계 값은 조작될 수 있습니다. 반응이 많으면 상위에 오는 구조를 알면 반응을 만들어 내려는 시도가 생깁니다.

신호조작 난이도
조회 수쉽다
좋아요 수계정이 있으면 쉽다
오래 머문 시간어렵지만 낚는 제목으로 올릴 수 있다
다시 찾아오기어렵다

그래서 여러 신호를 함께 보고, 한 신호에 큰 무게를 주지 않습니다. 그리고 짧은 시간에 비정상적으로 몰린 반응은 무게를 낮춰 셉니다. 정상적인 확산과 조작의 차이는 대개 속도와 출처의 다양성에서 드러납니다.

면접에서 이렇게 나옵니다

Q.인기 있는 글의 반응 수를 정확히 세려면 무엇이 문제입니까

모두가 같은 한 줄을 차례로 고쳐야 해서 그 줄이 병목이 됩니다.

초당 수천 개의 반응이 한 글에 붙습니다. 이 쏠림은 읽기가 아니라 쓰기 쏠림이라서 사본을 늘려도 해결되지 않습니다.

여러 곳에서 따로 세고 주기적으로 합친다
합치기 전 값은 실제보다 작지만 순서가 같다

흔한 실수: 캐시를 앞에 두어 해결하려는 것. 캐시는 읽기 쏠림에 듣습니다. 쓰기가 몰리는 문제는 세는 지점을 나누는 것으로만 풀립니다.

Q.반응 수를 근사로 세도 괜찮은 근거가 무엇입니까

점수에서 반응 수는 범위를 좁혀 쓰므로 작은 차이가 순서를 바꾸지 않습니다.

순서
반응 1만같다
반응 1만 50같다

순서를 바꾸지 않는 정확도에는 값을 치르지 않습니다. 이 판단이 있으면 여러 곳에서 따로 세고 나중에 합치는 방식을 쓸 수 있습니다.

흔한 실수: 근사를 모든 값에 일괄 적용하는 것. 반응 수가 0인지 1인지는 순서를 바꿉니다. 작은 값 구간에서는 정확도가 의미가 있으므로, 근사가 허용되는 구간을 확인해야 합니다.

Q.사용자가 좋아요를 눌렀는데 숫자가 안 늘어나면 어떻게 하시겠습니까

자기 반응은 클라이언트가 화면에서 바로 더해 보여줍니다.

같은 반응 수인데 쓰임이 두 가지입니다.

쓰임필요한 성질
점수 계산근사면 된다. 늦어도 된다
글 아래 표시자기 반응이 바로 보여야 한다

두 번째에 필요한 것은 전체 정확도가 아니라 자기가 누른 것이 반영되어 보이는 것입니다. 전체 수는 조금 늦게 맞으면 됩니다.

흔한 실수: 이 구분을 하지 않고 집계에 즉시성을 요구하는 것. 그러면 뜨거운 글에서 다시 한 줄 병목으로 돌아갑니다. 표시와 점수를 나누는 것이 핵심입니다.

Q.반응 수가 많으면 상위에 오는 구조를 악용하면 어떻게 되나요

신호를 만들어 내려는 시도가 생기므로 여러 신호를 함께 봅니다.

신호조작 난이도
조회 수쉽다
좋아요 수계정이 있으면 쉽다
오래 머문 시간낚는 제목으로 올릴 수 있다
다시 찾아오기어렵다

한 신호에 큰 무게를 주지 않고, 짧은 시간에 비정상적으로 몰린 반응은 무게를 낮춰 셉니다.

흔한 실수: 조작을 막는 것을 별도 시스템의 일로 미루는 것. 점수 규칙 자체가 유인을 만듭니다. 무엇에 무게를 주는지가 곧 어떤 조작이 이득인지를 정하므로, 규칙을 정할 때 함께 봐야 합니다.

먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.

읽었으면 문제로 확인해보세요

뉴스 피드 시스템 설계 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.