퀵바


강호정담

우리 모두 웃어봐요! 우리들의 이야기로.



작성자
Lv.50 한혈
작성
15.05.31 17:02
조회
1,289

[ 접속자가 한계점을 넘어서면 문피아 사이트가 심하게 버벅되어 이용이 어려워지고 결재에도 심각한 영향을 미친다 ]
[ 서버이전 작업을 공지하고 진행하려 했었다 ]
[ 데이터가 방대하여 이전작업이 얼마나 걸릴지 짐작하기 어려워 작업을 연기했다 ]

사전에 공지까지 하고 준비했던 서버이전 작업이 무기한 연기되었다는 공지를 보았습니다.

100원짜리 글 팔아 매출 100억원을 넘긴다는 문피아라면(이거 정말 대단한 거잖아요) 개발팀에 전문가들이 다수 포진해있을 거라는 짐작은 하고도 남지만, 확인된 세 가지 사실과 비약이 심한 추론, 그리고 노파심과 기우를 섞어 되나케나 지껄여보고자 합니다.

1. 병목점


병목점을 정확하게 파악하는 것은 쉬운 일이 아닙니다. CPU가 99% 사용률을 지속적으로 보이고 있다고 해서 CPU 클럭도 높이고 코어 수도 두 배로 늘리면 해결될 줄 알았는데, 그래도 99% 사용률을 유지하는 경우가 많습니다. 그래서 모든 자원에 대한 총체적인 해석을 통해 정확하게 병목점을 파악해야 합니다.
대표적인 병목점은 연산 자체가 느려서 대기 세션이 점점 증가하는 CPU 병목이 있겠고, 메모리를 모두 쓰고도 디스크 스와핑을 엄청나게 해댄다면 메모리 병목도 틀림 없습니다. 그 밖에 데이터 입출력이 느려서 I/O 병목이 일어나기도 하고, 트래픽이 한계량까지 소진되어 네트워크 병목이 일어나기도 합니다.
문제는 CPU 병목이 아닌 다른 병목을 통해서도 CPU 사용률 99%를 유발시킬 수 있다는 데 있습니다. 당연하겠지요. 세션을 처리하고 빨리빨리 클로징시켜야 하는데 디스크 I/O 때문에, 트래픽 때문에, 메모리 부족으로 인한 느려터진 하드디스크 스와핑 때문에 CPU에서 처리중인 세션이 종결이 느려지고 대기중은 세션은 점점 늘어나고, CPU는 지금 연산을 요청하면 언제 답을 내려줄지 모르겠다고 하는 상황이 오면 CPU 부하 100%가 됩니다.
그래서 병목점을 파악하려면 먼저 해당 서비스와 어플리케이션의 특성을 정확하게 인식해야 합니다.
저는 C도 자바도 php도, 심지어는 html 소스 보는 것도 모르니 문피아가 어떤 형태로 서비스하는 지 알 수도 없고 따라서 병목점을 추정할 수도 없습니다. 다만 동영상을 스트리밍하는 것도 아니고, 게임엔진을 돌리는 것도 아니기에 결론적으로 보면 사용자의 브라우저가 요청하는 연재 문서, 즉 작은 파일을 사용자의 브라우저에 배달(delivery)하는 서비스일 것이며, 따라서 핵심은 CPU가 아니고 파일 I/O와 트래픽이 아닐까 생각합니다.
트래픽 병목이라면 작업 공지에 회선증설이라고 올라왔을 겁니다. 디스크 I/O 병목이었다면 고속 스토리지로 교체한다고 했을 것 같습니다. 그런데 서버이전이라고 했거든요. 왜 그랬을까, 문피아 서비스에서 CPU는 별 역할이 없고, CPU 연산 자체가 거의 없는 파일 배달이 주된 작업이라면 메모리도 쓸 일이 거의 없는데, 왜 서버이전이라고 작업공지를 내보냈을까. 이 의문이 여전히 가시지 않습니다. TCP나 I/O 병목인데, 혹시 잘못 판단하지는 않았을까. 그럴 리는 없겠지만.......

2. 병목의 해소


1) 트래픽
회선이 1Gb인데, 동접자가 너무 많으면 1Gb 회선을 하나 더 구매해서 트렁킹하여 2Gb로 서비스하면 문제는 그냥 해결됩니다. 그거였다면 저런 작업공지도 없었고, 30분 내로 작업이 마무리 되었을 겁니다. 그 문제는 아니라는 뜻이겠지요.
1Gb 회선을 다 쓰지도 않는데 속도가 안나오고 신규 접속이 안되어 대기하는 세션이 늘어나는 경우가 있습니다. 트래픽에 여유가 있다고 해서 TCP 세션을 무한정 받을 수 없기 때문입니다. 예를 들어 5천 세션을 처리할 수 있는데, 그 중 활성세션(ESTABLISHED)는 천개고 4천개는 클로징 대기세션일 수도 있습니다. 그래서 TCP 튜닝이 필요합니다. 오픈할 수 있는 파일 개수나 디스크립터 수도 최적화시켜야 하고 TCP 세션을 클로징하기 위해 대기하는 세션들(TIME_WAIT)을 서비스 특성을 해치지 않는 범위 내에서 빠르게 강제로 클로징시킬 수 있는 튜닝도 필요합니다. TCP 튜닝의 항목들은 아주 많습니다.
TCP 튜닝은 OS 차원에서도 해야하고, 웹서버 차원에서도, 컨테이너나 미들웨어들(WAS나 검색엔진 등의 어플리케이션 서비스)에서도 해야합니다. 필요하다면 DB에서도 해야할지 모릅니다.

2) 디스크 I/O

 (1) 파일 개수
스토리지의 로지컬 볼륨 내에 파일 개수가 일정한 한계를 넘어서면 모든 서비스가 끝장나고 백약이 무효한 상태가 됩니다. 이건 대부분 알고도 당하고 모르고도 당하는 흔한 문제입니다. 꼭 한 번 제대로 당하고 나서야 문제의 심각성을 인식합니다.
어떤 파일작업을 하기 위해서는 볼륨매니저에게 파일 관련된 테이블을 받아야 합니다. 그런데 파일 개수가 너무 많으면 그 테이블 값을 받는데 시간이 걸립니다. 디렉토리 복사를 명령하면 볼륨매니저는 먼저 그 디렉토리에 대한 정보를 넘겨주는데 파일 개수가 수백만 개라면 그 정보를 구성하는데 몇 분, 길면 몇 십분이 걸리기도 합니다. 아직 파일이 넘어가지도 않았는데 말이죠. 파일 개수가 천만개 넘어가는 볼륨도 있던데, 그럴 경우 데이터 이전은 아주 난감해 집니다. 신규 파일은 다른 볼륨으로 넘기고, 그 볼륨은 읽기전용으로 바꾼 뒤에야 작업할 수 있는데 어떤 때에는 일주일 걸리기도 합니다.
그래서 서비스에 연결되는 파일 개수는 무조건 줄여야 합니다. DB에 때려박든, 여러 개의 파일을 레이어를 주어서 바이너리로 묶든 간에 파일 개수는 무조건 최소화 하는 게 답이고, 지나치게 늘어난다면 새로운 볼륨으로 넘겨야 합니다.

 (2) 스토리지의 성능
요즘 스토리지는 올플래시(SSD) 디스크를 장착한 고속 제품이 많이 보급되었습니다. 값이 비싸겠지요. 문피아는 서비스 특성상 이런 고속 스토리지를 전술적으로 활용할 여지가 큽니다.
베스트 연재, 포스팅 된 지 1개월 이내의 모든 연재물은 이 고속스토리지로 서비스하면 사용자들은 정말 쾌적한 서비스를 받을 수 있습니다. 데이터들은 무거운 영상이나 이미지가 아니기 때문에 실 용량은 얼마 되지 않을 겁니다. 나머지 연재물 중 1년 이내에 포스팅 된 데이터들은 중속 스토리지(1만 rpm 정도의 디스크 어레이)에 배치합니다. 그 밖의 모든 연재물은 초저속, 초저가 스토리지(7200 rpm SATA나 NAS)에 배치해도 됩니다. 요청자가 거의 없으므로 요청하는 세션이 있어도 디스크 I/O에서 경쟁이 없으므로 금방 찾아서 보내줄 수 있습니다.
큰 비용을 들이지 않고도 모든 연재물을 쾌적하게 서비스할 수 있는 방법은 찾아보면 꽤 있을 겁니다.

 (3) 캐싱 장비
캐싱장비는 자주 입출력하는 파일을 메모리에 보관하고 있다가 디스크 I/O를 거치지 않고 바로 보내주는 서버 시스템입니다. 캐싱되지 않은 데이터는 실 경로를 찾아가서 서비스하고 그 파일은 그 순간부터 메모리에 캐싱됩니다. 효과 만빵입니다.
주식 시세나 환율 시세 같은 정보는 초 단위로 변경되는 값을 반영해줘야 하므로 캐싱하기가 곤란합니다. 그런 데이터를 캐싱하려면 실시간 파일 변화를 반영해주는 다이나믹 캐시 같은 장비를 써야하는데, 값도 비싸고 기대만큼 효과가 안나올 때도 많습니다.
문피아는 그 정도로 실시간 반영할 필요도 없고, 캐싱되지 않은 데이터는 스토리지에서 실제로 찾아다가 서비스 해주므로 캐싱 데이터를 1분 단위로 설정해도 무난하리라 생각합니다.
캐싱장비는 돈을 주고 구매해도 되지만, 리눅스 기반에 오픈소스 캐시 툴을 써서 직접 만들어도 됩니다. 비용대비 효과를 생각하면 10대 정도 만들어 돌려도 됩니다.

전산의 일반론에 따라 생각나는대로 지껄여봤습니다. 아마도 전문가들이 있으니 이 문제들 외의 다른 문제였겠지요. 만일 되나케나 지껄였다는 이 게시물이 문피아에 상당부분 부합하고 있다면 TCP 튜닝이고 스토리지고 나발이고 간에 우선 급한 일은 CTO를 영입하는 것일텐데, 설마 그 정도는 아니겠지요.

늘 애쓰는 개발팀~~ 화이링!


Comment ' 26

  • 작성자
    Lv.99 만리독행
    작성일
    15.05.31 17:08
    No. 1

    무슨 말인지는 잘 모르지만, 좋은 제안을 하신 것 같습니다. ^ ^

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.70 졸린고먐미
    작성일
    15.05.31 17:20
    No. 2

    ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

    찬성: 0 | 반대: 0

  • 작성자
    Lv.55 이경훈
    작성일
    15.05.31 17:26
    No. 3

    흠. 좋은 글입니다.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.70 졸린고먐미
    작성일
    15.05.31 17:20
    No. 4

    문과라 이해는 못하겠지만.. 대단해요!

    찬성: 0 | 반대: 0

  • 작성자
    Personacon Rainin
    작성일
    15.05.31 17:46
    No. 5

    개 발에 편자
    돼지 목에 진주목걸이
    문피아에 훌륭한 하드웨어적 조언
    도찐개찐

    찬성: 0 | 반대: 0

  • 작성자
    Lv.56 다크월넛
    작성일
    15.05.31 17:55
    No. 6

    말씀하신대로 텍스트가 주 내용인 문피아이므로... 사용자에 의한 페이지요청이나 트랜잭션에 의한 병목을 의심하는 게 괜찮겠군요. 전 쥐뿔도 모르는 사람이지만...

    찬성: 0 | 반대: 0

  • 작성자
    Lv.36 옥탈플로
    작성일
    15.05.31 18:30
    No. 7

    웹서비스 보다는 추가된 모바일 앱서비스때문에 그럴 가능성이 높아보이네요.
    결국 server/client를 잘못 구성한 경우라면 서버를 이전해도 개선의 여지는 별로이고
    server/client 구조를 새롭게 해야하므로 앱부터 서버쪽까지 새로 개발해야겠죠.
    한마디로 총체적 난국이 아닐지...
    만약 모바일 앱을 TCP로 구성했다면 차라리 UDP로 하는게 부하를 줄여주는 방법이 될 수 있죠.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.74 석박사
    작성일
    15.05.31 18:32
    No. 8

    제 생각은 조금 다른데.. 문피아가 구현 된 것을 보면 기본적으로 파일이나 DB를 읽어서 페이지를 배달하기 보다는 페이지 넘길 때 마다 아예 새로 로드가 됩니다. 애초에 주소도 달라버리구요.
    결국 한 사람이 여러 페이지를 읽으면 그 때마다 계속 html 파일을 재생산 할텐데, 서버에는 이게 충분히 과부하가 될 수 있습니다. 말씀하시는걸 보면 네트워크쪽 전문가신 것 같아서 조심스럽긴 하지만.. 서버단에서도 병목현상이 생길 수 있다는게 제 의견입니다.

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.74 석박사
    작성일
    15.05.31 18:38
    No. 9

    보통 CPU 성능에 따라서 웹서버가 제공 할 수 있는 초당 페이지 생산량이 정해져있습니다. 이것을 넘어서는 페이지를 생산하려고 시도하면 웹서버가 제대로 작동하지 않게 되는데, 이것을 고의적으로 발생시키는 것을 DDOS라고 부릅니다. 시간당 페이지 생산량이 못 따라가면 서버를 이전하는 수 밖엔 없겠지요

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.50 한혈
    작성일
    15.05.31 18:41
    No. 10

    그런 비슷한 경우도 있을지 모른다는 생각이 들어서 제가 자바도 html 태그조차도 모르는 사람이라고 안전장치를 걸기는 했는데, 어김없군요.
    석박사님 말씀이 확실히 일리가 있고, 굳이 [서버이전]이라고 공지한 것과도 잘 부합되는 것 같습니다.

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.74 석박사
    작성일
    15.05.31 18:45
    No. 11

    그러나 사실 이런 부분도 한혈님이 말씀하신 부분이 적용이 된다면 나아질 수 있는 부분이긴 합니다 ㅋㅋ CPU의 다른 로드를 줄이면 당연히 초당 페이지 생산량도 늘어나기 마련이니까요

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.50 한혈
    작성일
    15.05.31 21:06
    No. 12

    생각을 해보니까요, 서버단의 병목이라면 그냥 서버를 추가하고 L4에서 로드밸런싱하면 되잖아요.
    단지 그 문제는 아닌 것 같아요. 신 서버가 성능이 좋다면 가중치를 주어서 구서버2:신서버5 이런식으로 하면 되는 거고, 해 봤다가 서버 튜닝이 미흡한 부분이 있다면 L4에서 우선 빼고 구 서버들로만 서비스 돌리고. CPU와 서버단 문제라면 오히려 문제가 간단해져요.
    오히려 TCP 튜닝과 파일 개수 문제가 원인일 수 있을 것 같습니다. 데이터 이전에 문제가 있다고 했으니까요.

    찬성: 0 | 반대: 0

  • 작성자
    Personacon 적안왕
    작성일
    15.05.31 18:33
    No. 13

    좋은 이야기지만 대체로 못알아 듣겠네요.
    orz
    여하튼 추강이요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.4 코트
    작성일
    15.05.31 18:37
    No. 14

    신고된 글이라 볼 수 없습니다.

  • 답글
    작성자
    Lv.26 시스나에
    작성일
    15.05.31 19:04
    No. 15

    신고된 글이라 볼 수 없습니다.

  • 작성자
    Lv.50 한혈
    작성일
    15.05.31 18:47
    No. 16

    코트님은 왜 또 이러시려나.
    시선이 다소 비관적인 것 같습니다.
    제가 올린 글이 문피아에 대한 불만글 같나요?
    문피아에 대한 애정 없이 이런 글을 올릴 수 있을까요?
    한 번 마음을 가라앉히고 정독하면서 생각 좀 해주시면 안될까요??

    찬성: 0 | 반대: 0

  • 답글
    작성자
    Lv.88 청광류
    작성일
    15.05.31 20:43
    No. 17

    저분 밑에 다른 글 댓글도 보기 좀 그렇던데요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.17 夢ster
    작성일
    15.05.31 18:57
    No. 18
    비밀댓글

    비밀 댓글입니다.

  • 답글
    작성자
    Lv.50 한혈
    작성일
    15.05.31 21:08
    No. 19
    비밀댓글

    비밀 댓글입니다.

  • 작성자
    Lv.68 장과장02
    작성일
    15.05.31 19:06
    No. 20

    연식이 오래됐으니 RDBMS 쓰고 있겠죠 아마.. NoSQL로 완전 갈아타거나 캐시로 쓰면 좋을 것 같아요. 특징이 딱 맞아떨어지네요.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.88 청광류
    작성일
    15.05.31 20:19
    No. 21

    문피아가 100억대 였어요? 진짜 깜놀이네요.
    그런데 이용 체감상 솔직히 운영 품질이 그 수준은 아닌 거 같던데.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.1 [탈퇴계정]
    작성일
    15.06.01 00:26
    No. 22

    말씀드리기가 조심스럽습니다만...

    코트님의 '...쳐 남기세요 씹'은 정말 어이가 없네요.
    쌍스런 욕설을 정담란에 버젓이 써 놓으시다니?
    코트님의 인격수준이 심히 의심스럽습니다.
    스스로 지우시고, 회원님들께 사과하는 게 좋다고 생각합니다.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.1 [탈퇴계정]
    작성일
    15.06.01 00:36
    No. 23


    그리고...
    한혈님은 지식이 상당히 많으신 것 같은데,
    문제 제기방법이 다소 도발적이지 않나 싶습니다.
    한 단계 더 언어순화를 시켜서 말씀을 하셨다면
    훨씬 나앗을 것으로 여겨집니다.
    '...되나캐나(아무렇게나) 지껄여 보고자...'
    이런 표현은 듣기에 약간 거부감이 듭니다.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.5 크렌스
    작성일
    15.05.31 22:44
    No. 24

    껙 무슨말인지 모르겠네요

    찬성: 0 | 반대: 0

  • 작성자
    Personacon [탈퇴계정]
    작성일
    15.06.01 02:38
    No. 25

    전체적으로 여러가지 조언 감사히 들었습니다.
    개발팀에 전달하여 좋은 방안을 마련하도록 하겠습니다.
    말씀하신 부분들 중 몇가지는 이미 시행되고 있는 것으로 알고 있습니다. 하지만 자세한 기술적인 문제는 CS의 영역을 벗어난 부분이라서 제가 답변을 드릴 수가 없을 것 같습니다.
    서버를 이전하는 것은 현재 서비스 되는 서버의 수를 향후 서비스를 감안하여 대량으로 신서버를 구입하여 쾌적한 서비스를 하기 위함입니다. 새로 구입한 서버는 당연히 SSD이고 현재 서비스되고 있는 서버도 스토리지는 SSD로 구성되어 있습니다.
    조언 감사드립니다.

    찬성: 0 | 반대: 0

  • 작성자
    Lv.68 금강초롱꽃
    작성일
    15.06.01 03:19
    No. 26

    와....문피아로 넘어온지 얼마 안됐지만 옳은말씀 ... 렉이 자주걸려서....

    찬성: 0 | 반대: 0


댓글쓰기
0 / 3000
회원가입

강호정담 게시판
번호 제목 글쓴이 날짜 조회
222139 지금 행복하렵니다. +1 Lv.85 하늘과우리 15.06.03 814
222138 마스크 필요없다고 하던데.... +9 Lv.99 flybird 15.06.03 918
222137 메르스 확진자 통계가 허술한 것 같네요. +3 Lv.99 곽일산 15.06.03 897
222136 메르스 때문에 새누리가 당정청 회담을 제의했는데... +2 Lv.99 곽일산 15.06.03 985
222135 히오스 글 있길레 남겨봄.. +2 Lv.60 魔羅 15.06.03 1,005
222134 메르스 어디로 피해야 하나 +14 Lv.71 덕귀 15.06.03 977
222133 몇 일 후면 예비군 훈련인데 메르스라니... +8 Lv.11 여울람 15.06.03 1,179
222132 히오스 재밌네요 ㅋㅋ +6 Lv.16 남궁남궁 15.06.03 855
222131 하루 사이 573명이 늘었는데 +16 Lv.60 소요권법 15.06.03 1,175
222130 노무현 정부와 지금 정부의 사고에 대처하는 자세 +14 Lv.55 짱구반바지 15.06.03 1,310
222129 메르스 사실과 그 일부 +17 Lv.72 雲漢 15.06.03 1,141
222128 메르스는 철저하게 정부책임입니다. +4 Lv.99 곽일산 15.06.03 894
222127 메르스 현재 사실만. +3 Lv.88 청광류 15.06.03 1,179
222126 사스가 전염성은 더 있었죠 +11 Lv.60 카힌 15.06.03 1,360
222125 Curse God(저주의 신) 펠레. +7 Lv.60 정주(丁柱) 15.06.03 816
222124 천녀 유혼 기억 하시나요? +3 Lv.25 강치피쉬 15.06.03 1,076
222123 상대편 눈에 향수 뿌리고... '추억 돋는' WWF 스타들 +6 Personacon 윈드윙 15.06.03 1,072
222122 '강산 변해도..' KIA 김주형, 똑딱이 어떨까 Personacon 윈드윙 15.06.03 901
222121 황순원 <소나기> 속편 쓰기 공모전 +1 Lv.50 한혈 15.06.03 1,249
222120 거인도 두렵지 않은 '4차원 초인' 미노와맨 +5 Personacon 윈드윙 15.06.03 977
222119 EBS는 미쳤습니다. +4 Lv.55 짱구반바지 15.06.02 1,155
222118 모바일 문피아 렉 +2 Lv.63 얼음모카 15.06.02 1,079
222117 메르스 글 삭제하는 문피아는 마치 +4 Lv.60 카힌 15.06.02 1,184
222116 메르스 의심되서 찾아가도 검사 안 해준다네요. +4 Lv.53 야채별 15.06.02 1,222
222115 라쿤 평택 / 역병지대 +5 Lv.43 패스트 15.06.02 1,014
222114 좀 더 지켜봐야겠지만 +23 Lv.60 소요권법 15.06.02 816
222113 메르스 이대로 가다가 최악의 경우 ? +10 Lv.45 야웅이 15.06.02 1,123
222112 메르스와 하인리히 법칙 +4 Lv.23 풍이풍 15.06.02 1,077
222111 콧물감기걸렸네요. +5 Lv.90 슬로피 15.06.02 847
222110 오늘 아침에 뉴스에서 3차 감염환자 나온거 +4 Lv.70 졸린고먐미 15.06.02 918

신고 사유를 선택하세요.
장난 또는 허위 신고시 불이익을 받을 수 있으며,
작품 신고의 경우 저작권자에게 익명으로 신고 내용이
전달될 수 있습니다.

신고
@genre @title
> @subject @time