대규모 트래픽 애플리케이션 성능 튜닝 노하우 다 알려 드림|라인개발실록
라인개발실록 영상을 보고 문답을 정리했습니다. 실무가 느껴지는 영상!
Q) 애플리케이션 관점에서는 어떤 준비를 하시는지?
두 가지로 나눌 수 있다.
미리 준비할 수 있는 것
문제가 생겼을 때 대응할 수 있는 것들.
1번 예시. keep-alive를 이용해서 connection을 맺어놓고 계속 쓰는 방법을 쓴다. 프록시랑 애플리케이션 트래픽을 처리할 WAS단의 서버가 있을 수 있는데, 프록시에서 WAS단에 전달할 수 있는 Max Connection을 미리 제한해 둔다. 마찬가지로 Proxy에서 뒷단으로 전달되는 connection 수도 제한을 걸어둔다.
keep-alive를 적용할 때도 timeout, maxRequests를 설정할 수 있다. 라인 메시징 서버 같은 경우에는 짧은 시간에 트래픽이 확 오르기 때문에 maxRequests 기준으로는 여유있게 늘려주거나 아예 제한을 없애버려서 keep-alive connection이 충분히 유지될 수 있도록 설정을 해둘 수 있다.
keep-alive를 키게 되면 connection들이 연결된 채로 많이 물려 있을 수 있기 때문에 tomcat의 max connections 설정도 미리 문제가 없도록 프록시 서버들의 수준을 계산해서 늘려 놓는다.
Q) 전송하는 파일의 유형에 따라서 최적화된 서버 파라미터라는 건 너무 많다. 관리할게 많을 텐데 이런걸 다 한 명이 관리하는 건가?
아니다. 각 서비스의 특징에 맞게 튜닝한다.
Q) 모니터링하다가 문제가 생기면 어떻게 대응하는지?
모니터링 수치들, 주요 매트릭들을 보고 있다가 문제가 생겼을 경우엔 어떻게 대처할지 방법을 논의하게 된다.
일반적으로 두 가지 방법이 있을 것이다.
문제가 생겼을 때 서버로 들어오는 리퀘스트 자체를 줄이는 방법
한 컴포넌트에 문제가 생겼을 때 다른 컴포넌트에 요청을 보내지 않도록 하는 대응
서비스 관점에서 Throttling을 건다면 어떻게 동작을 하는가? 만약 VoIP 쪽 서버에 문제가 생겨서 10%만 수용할 수 있게 되었다면? 서버를 다 꺼버리는 것이 아니라, 10%라도 서버를 이용할 수 있게 하고, 나머지에게는 다시 시도해달라는 메세지를 보내게 된다.
Q) 많은 트래픽을 효율적으로 처리하는 방법은?
이 질문에 대한 답은 서비스마다 달라질 수 있을 것이다.
만약 메신저 서비스처럼 일반적인 서비스의 경우에는 활동시간대가 다를 수 있다. 또 어떤 서비스의 경우 이미지를 많이 쓰거나 영상을 많이 쓰는 등 상황에 따라 트래픽이 달라진다.
일반적으로 stateless한 서버 같은 경우 앞단에 정적(static) 콘텐츠를 서빙하기 위한 서버를 따로 빼고 CDN을 적용해 놓고 Application layer에는 Storage쪽으로 가기 전에 캐시 등을 구성하는 일반적이고 보편적인 구성들이 있을 수 있는데, 나머지들은 수치 같은 것을 좀 더 조정할 수 있을 것 같다. 어떤 병목의 쓰레드 풀(Thread pool)을 늘리는 등등!
Q) 라인에서는 비동기 처리를 어떤 로직이나 기술로 하시는지?
라인은 Armeria 오픈소스를 한번씩 봐주면 좋겠다. 퍼포먼스도 좋고 서버, 클라이언트 둘 다 기능이 있다.
Q) 라인의 장애대응방은 어디에 쓰고 계세요?
라인 메세지로 장애 대응을 할 때는 라인 웍스나 Slack을 쓰고 있다.
Q) CDN 활용에 대해서 더 자세히 알고 싶다. REST API 응답 처리도 CDN으로 상당 부분 처리 가능할 것 같은데, 신년대응 시점에는 TTL 등을 어떻게 처리하는가?
메신저는 바로 보내야하기 때문에 캐싱할 수 있는 부분이 거의 없긴 하다. 스티커 정도??
기본적으로 신년 대응을 위해 TTL을 따로 조정하는 경우는 없다. 보통 API 콜 같은 경우는 캐시할 수 없는건 non-store로 처리되고 있다.
Q) 신년 대응을 내년에 또 한다면 올해와 뭐가 달라질 것 같은가?
코로나 상황이 계속될지 여부에 따라 달라질 것 같다.
Last updated