laravel nginx + php fpm, nginx unit, roadrunner octane 벤치마크

Updated on

목차:

https://zenn.dev/yamayuski/articles/96478cb4fe1573

https://github.com/il-m-yamagishi/laravel-loadtest

https://habr.com/en/post/646397/

위에서 확인할 수 있다.

내가 해본 야메 작성기. docker setting 관련해서 바꾸는 작업을 이리저리 해보면서, 확실히 nginx, php-fpm 이 빨라진 느낌이 들었고, 그래서 중간에 멈추지 못하고, 결국 여기까지 왔다.

오후 2시부터 시작해서 새벽 5시에 끝났으니, 15시간 동안 이 짓을 한거다…

테스트 설정

User 5000, request 요청

단 !!! 서버 dns은 cloudfront가 되어 있고, 서버컴퓨터는 내가 직접 돌리며 (쓰레드리퍼 3990, 256기가) 요청도 내가했다. (내가 나한테 요청하는것이므로, 내가 요청하는 대역대 한계가 걸려서 정확하지 않을 수도 있음)

근데 어쨌든 해봤음.

Nginx + php-fpm

nginx worker 가 받쳐주지 못하면, nginx 는 무조건 뻗는다.
하지만, nginx worker를 늘려준다 한들, php-fpm의 레이턴시는 끊임없이 증가한다.
또한, 요청실패도 간간히 섞여있다.

Nginx Unit

도~ 대체 여기는 좋다 저기는 안좋다 하길래 써봤다.

와.. 이게 무슨 일인지. nginx unit의 성능은 말도 안되게 빠르다. octane을 설정한 정도의 속도를 제공했다. 정말 미쳤다.. 설정 부분만 잘 해서 처리한다면, Nginx Unit 으로도 충분히 커버가 될 것 같았다.

하지만, 내 설정 실력 부족으로 Nginx Unit은 아예 뻗어버렸고, 그 이상 부활하지 못했다.
(아마도 이 부분은 설정 실력 부족이라고 생각된다, 설정만 제대로 한다면 Nginx Unit은 뻗지 않을거라 생각 되어짐, 그런데 왜 Nginx Unit을 다들 사용 안하지? 흠.. PHP도 8.1.1에 멈춰있다. 지금은 8.1.16임<물론, 직접 dockerfile 이미지로 만들면 되기야 하겠지만 귀찮>)

Roadrunner (octane)

나는 저번 포스팅에서 octane에 대해서 비관적이였던거 같은데, 이번엔 다르다. 무조건 추천이다. 코드 방식이 조금 바뀌긴 하지만, 단점보다 장점이 정말 더 많은 것 같다.

일단 뻗지 않는다. 하지만, 레이턴시가 증가 된다. 1~3초까지 증가 됬던거 같음.

그리고 중요한건, 많이 못받는다. RPS를…

Nginx + Roadrunner (octane)

처음에는 Roadrunner만 붙이는게 훨씬 좋을거라 생각했었는데, 그건 오산이였다.
물론 내 설정이 잘못 된 걸수도 있음.

이건 첫번째 결과이다. RPS가 1846이나 나오는데도 불구하고, 멀쩡히 아주 빠르게 돌아갔다.
이걸 보고 깜짝 놀라서, 한번 더 돌려 보게 됬는데.

결과는 마찬가지였다.
아마도 뒤에 RPS가 줄어드는건, 내 네트워크 대역대 한계가 Input Output 모두 달해서 일 것 같음.

하지만, 어쨌든 Nginx + roadrunner 세팅은 그냥 roadrunner 세팅보다 더 빠르게 RPS가 증가되었고, 받을 수 있었고, 받으면서도 더 빠른 ms 값을 보여줬다.

결론

laravel octane을 쓰는건 정말 추천한다. 엄청난 요청에도 서버가 절대 뻗지 않는다.

roadrunner를 직연결이 아닌, 앞에 nginx worker를 통해서 연결하자. 그것이 더 많은 요청을 수용 할 수 있고, 더 빠르게 응답해줄 수 있다.

이 테스트는 주관적입니다.
또한, request를 보내는 컴퓨터 네트워크도 제 컴퓨터이고, 서버 컴퓨터도 제 컴퓨터였기 때문에, 결과가 잘못되었을 수도 있습니다.

내 컴퓨터 -> cloudfront -> 서버컴퓨터

15시간 동안 아주 값진 경험을 했다… 근데, 해야할 작업이 있는데.. :(