# 익명 세션 피크로 인한 높은 부하, 유니콘 워커를 늘릴까요?

**URL:** https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102
**Category:** Support
**Created:** [2월 9, 2021, 6:19오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102 "2021-02-09T18:19:12Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 9, 2021, 6:19오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/1 "2021-02-09T18:19:12Z")

</div>

방금 단일 페이지를 방문하는 동시 접속자(대부분 익명 사용자)가 약 1,500명에 달하는 피크 트래픽을 경험했습니다.

그리고 포럼은 높은 부하에 대해 모든 멤버에게 경고가 표시되는 모드로 전환되었습니다.

CPU 최적화 Digital Ocean Droplet

전용 CPU: 4 vCPU  
RAM: 8 GB

Unicorn 워커: 10

RAM과 CPU 사용량이 약 50%에 불과한 상황에서, 익명 방문자의 이러한 피크 트래픽 케이스를 위해 Unicorn 워커를 늘리는 것이 도움이 될까요, 아니면 아닐까요?

 ![image](https://global.discourse-cdn.com/meta/original/3X/0/4/04555e3fdc8a5e0d679818b3e6ee285ad4fb145a.png)

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2월 9, 2021, 6:27오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/2 "2021-02-09T18:27:57Z")

</div>

네, 유니콘을 늘리는 것이 여기서는 첫 번째 단계입니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 18, 2021, 7:28오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/3 "2021-02-18T19:28:05Z")

</div>

워커를 24개로 늘렸습니다. 하지만 달라진 점이 없습니다(여전히 "극심한 부하로 인해, 현재는 비로그인 사용자가 보는 것처럼 임시로 표시됩니다."라는 메시지가 표시됩니다). 방금 전에도 비슷한 동시 접속자 피크(99%가 비로그인)가 발생했습니다:

 ![image](https://global.discourse-cdn.com/meta/original/3X/5/4/54af2f773c9b0a9da60159934847de9333c0b1ae.png)

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2월 18, 2021, 7:46오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/4 "2021-02-18T19:46:13Z")

</div>

@sam 님이 최근에 이 부분에 많은 시간을 보냈으니, 혹시 코멘트가 있을까요?

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 20, 2021, 7:04오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/5 "2021-02-20T19:04:20Z")

</div>

@sam 익명 트래픽(예: 특정 주제가 소셜 미디어에서 바이럴되는 경우)으로 인한 피크 트래픽을 추가로 최적화하는 방법에 대해 아이디어가 있으신가요? 위에서 언급한 두 경우 모두 Digital Ocean 기준으로 메모리와 CPU에 여전히 여유가 있으며, 부하가 4에 도달하지도 않았는데도 워커 수를 3배로 늘렸음에도 포럼이 “극한 부하” 모드로 진입합니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 20, 2021, 7:52오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/6 "2021-02-20T19:52:53Z")

</div>

![image](https://global.discourse-cdn.com/meta/original/3X/7/a/7a9137cd2a684f2da37cee768f11f2166da160e2.png)

다시 "극한 부하 모드"에 진입했습니다. 동시 접속자는 총 600명뿐이었으며(99%가 익명) 부하 값은 1에도 미치지 못했습니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [2월 21, 2021, 1:23오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/7 "2021-02-21T01:23:58Z")

</div>

병목 현상이 무엇인지 파악할 수 있도록 일부 데이터를 수집해야 합니다.

[Prometheus exporter plugin for Discourse](https://meta.discourse.org/t/prometheus-exporter-plugin-for-discourse/72666)

---

<div class="post-metadata">

### Author: ![Alec](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alec/32/137283_2.png) [@Alec](https://meta.discourse.org/u/Alec)
#### Post date: [2월 21, 2021, 4:36오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/8 "2021-02-21T04:36:22Z")

</div>

DO의 데이터 모니터는 충분히 민감하지 않고, 다소 오해의 소지가 있다고 생각합니다. Hetzner와 Digital Ocean에서 극한 부하를 실험해 봤습니다. Hetzner의 경우, 극한 부하 메시지가 표시될 때 120%까지 치솟는 짧고 급격한 피크가 발생했습니다.

약 1초 정도 지속된 후 40~50% 수준으로 떨어졌습니다.

Digital Ocean에서도 동일한 상황을 재현해 봤는데, 기억에 따르면 CPU 사용률이 50%를 넘지 않는 것으로 보였습니다. (단, X축을 초 단위로 변경할 수 없었습니다)

제 추측으로는 DO의 CPU 수치가 5초 또는 15초 평균일 가능성이 높습니다. 따라서 짧고 급격한 피크를 볼 수 없는 것입니다.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2월 22, 2021, 4:53오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/9 "2021-02-22T04:53:14Z")

</div>

더 깊이 살펴보기 위해서는 Prometheus exporter 리포트가 필요합니다.

RAM과 CPU 여유가 있다면, Unicorn 워커를 늘려 피크 시간대에 맞춰 스케일업할 수 있습니다. 다만 메모리가 스왑되면 성능이 크게 떨어지므로 이를 피해야 합니다.

---

<div class="post-metadata">

### Author: ![TallTrees](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/talltrees/32/208620_2.png) [@TallTrees](https://meta.discourse.org/u/TallTrees)
#### Post date: [2월 22, 2021, 6:49오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/10 "2021-02-22T06:49:59Z")

</div>

> [@Terrapop](#):
>
> 익명 트래픽(예: 특정 단일 주제가 소셜 미디어에서 바이럴 될 경우)의 피크 트래픽을 위해 추가로 최적화하는 방법에 대해 아이디어가 있을까요?

이런 경우 해당 단일 주제 페이지는 백엔드에 접근하지 않고 짧은 기간 동안 캐시되고 정적으로 서빙될 수 있어야 할 것 같습니다. Discourse가 이를 수행할 수 있는지(즉, 부하가 걸렸을 때 캐시 제어 헤더를 설정하고 익명 사용자에게 콘텐츠를 서빙하는지) 그리고 DO(DigitalOcean) 설정에 체인 내에 능력이 있는 캐싱 프록시가 있는지 모르겠지만, 제가 완전히 틀린 것이 아니라면 그리고 이미 그렇게 되어 있지 않다면 고려해 볼 가치가 있는 개발 아이디어일 수 있습니다.

아마 @sam이 이미 이 부분을 생각했거나 구현했거나, 왜 나쁜 아이디어인지 알고 있을지도 모릅니다!

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2월 22, 2021, 7:05오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/11 "2021-02-22T07:05:08Z")

</div>

실제 부하 하에서 이미 토픽별로 동적으로 처리되고 있으며, 바로 이것이

> [@Terrapop](#):
>
> 포럼이 모든 회원에게 높은 부하에 대한 경고가 표시되는 모드로 전환된 상태

…를 가리키는 것입니다. 다만 해당 모드는 \*\*읽기 전용(READ ONLY)\*\*이므로, 사람들이 실제로 대화를 나눌 수는 없습니다.

---

<div class="post-metadata">

### Author: ![TallTrees](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/talltrees/32/208620_2.png) [@TallTrees](https://meta.discourse.org/u/TallTrees)
#### Post date: [2월 22, 2021, 7:10오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/12 "2021-02-22T07:10:25Z")

</div>

네, 맞아요. 제 제안은 익명 사용자를 짧은 타임아웃(60초 정도?)이 설정된 캐시된 페이지로 부팅시켜 부하를 줄이고, 나머지 사이트가 읽기/쓰기 모드로 계속 작동할 수 있기를 기대하는 것입니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 22, 2021, 10:40오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/13 "2021-02-22T10:40:08Z")

</div>

그렇게 되면 정말 좋겠습니다. 현재 저희 20만 명 이상의 텔레그램 채널에서 특정 주제를 소개하면, 로그인한 사용자가 약 50명뿐(99%가 익명 트래픽)인 상태에서 디스코스 사이트 전체가 거의 1시간 동안 ‘읽기 전용’ 모드로 전환됩니다.

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2월 23, 2021, 5:31오전 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/14 "2021-02-23T05:31:14Z")

</div>

이미 이렇게 처리되고 있습니다. 토픽 목록 페이지와 토픽 페이지에서 익명 사용자를 대상으로 Redis에서 직접 상당히 공격적인 캐싱을 수행하고 있으며, 타임아웃은 60초입니다.

---

<div class="post-metadata">

### Author: ![Terrapop](https://avatars.discourse-cdn.com/v4/letter/t/ecd19e/32.png) [@Terrapop](https://meta.discourse.org/u/Terrapop)
#### Post date: [2월 23, 2021, 5:50오후 UTC](https://meta.discourse.org/t/high-load-due-to-peak-anonymous-sessions-increase-unicorn-workers/179102/15 "2021-02-23T17:50:35Z")

</div>

병목 현상을 파악하기 위해 Prometheus를 실행해 보겠습니다. 하지만 @Alec가 언급했듯이 DO의 모니터링이 지연되고 있는 것이 가능성이 높아 보입니다. 만약 그렇다면 더 큰 머신으로 전환하는 것이 해결책이 될 것 같습니다.
