shekwl24
60
2020-05-04 03:41:27
2
664

웹서버 과부하 해결방법이 궁급합니다.


maplecal.com 현재 이 사이트를 운영중에 있습니다. 심볼 계산기 쪽에서 사용자에게 닉네임을

입력받고 그 닉네임을 토대로 다른 사이트에 검색하여 크롤링을 한 뒤 다시 html로 데이터를 넘겨주고 있습니다.

이때 selenium과 beautifulsoup 2개를 사용하고 있고 크롤링 시간은 5 ~ 6초 정도 걸리는 것 같습니다.

현재 개발 컴퓨터와 서버컴퓨터를 동일하게 운영,

개발환경은 window10이고 apache로 서버를 운영중입니다.

업데이트 완료하고 배포 게시글을 올리니 동시접속자가 몰려서 그런진 모르겠는데 한 200명까지 몰린 것 같습니다.

컴퓨터가 버벅거리면서 도저히 다룰 수 없게 됩니다. 

현재 인터넷을 검색하던 도중 httpd.conf 파일에서 prefork를 수정하여 동시접속자 수를 조절할 수 있다고 하여 

이것을 몇가지 수정해보고 있는데 어떤 것을 기준으로 하고 이게 맞는건지도 잘 구분이 안가네요.

혹시 해결할 방법이 있을까요?


3줄 요약
1. 크롤링 5~6초 걸리는 웹사이트를 Apache 개인 서버를 이용하여 운영중입니다.

2. 접속자가 100명쯤 되니 서버컴퓨터가 버벅거리며 도저히 사용할 수가 없네요

3. 혹시 크롤링 속도 문제인 것인지 apache 서버에서 설정해줘야 할 것이 있는지 의견 구합니다.



항상 좋은 답변 감사합니다.
0
  • 답변 2

  • 므흐므흐
    456
    2020-05-04 07:16:43 작성 2020-05-04 08:51:10 수정됨

    1. Selenium은 메모리용량(RAM)을 많이 잡아먹는 크롤러입니다.

    일단 개인적으로 저는 동시접속자 보단 다수의 사용자가 동시다발적으로 크롤링 요청으로 인해 RAM 부족으로 인한 서버 버벅임(프로세스 작업 병목)으로 의심하고 있는데, 개인적으로 이를 확인하기위한 증상체크는 크롤링을 돌리는 상황에서

    1) Chrome 프로세스 확인

    ps -ef | grep "chrom"

    2) 위에서 크롬 프로세스가 있는게 확인되었다면, 서버에서 Total/사용중인 메모리 확인

    free -m

    조금이라도 서버가 이상하다(느리다) 싶을 때 위 두 명령어를 확인하면서 서버상태를 확인해봤으면 좋겠습니다.


    저도 웹크롤링을 메인으로 서비스를 운영중인데 크롤러가 RAM을 많이 잡아먹어서 Background Job에서 서버자원(CPU, RAM)을 효율적으로 사용하도록 할당할 수 있도록 설계할 때 많이 애먹었던 기억이 나네요..


    참고로 저도 서버에서 Selenium을 통해 크롬을 4개 켜서 크롤링을 돌리는데 약 950MB의 메모리를 차지합니다.


    2. 사용자가 크롤링 요청 시, 요청에 대해 모두 한번에 작업을 하는게 아닌, Background Queue에 한정된 Selenium 크롤링 공간을 생성해준 후 Selenium을 Backgound Queue Job 단에서 작업을 시키게 하는게 어떨까 싶습니다.


    지금 개발자님의 개발 방식이 어떤지 모르겠지만, 만약 요청이 들어오는 속속 작업을 처리함에 있어 프로세스 제한을 따로 걸어두지 않을 경우 병목현상이 발생할 수 있습니다.


    개인적인 개발 시나리오는 아래와 같습니다.

    1) Background Job을 담당하는 프로세스에는 n개의 공간이 있다.

    2) 이 n개의 공간 중, Selenium에게는 5개의 공간을 할당시킨다.

        * Selenium 작업이 5개를 넘어갈 시, 이전에 이루어지는 작업이 끝날 때 까지 기다렸다가, 공간을 할당해준다.

        * 제가 파이썬 개발자가 아니라서 잘 모르겠지만, 검색좀 해보니까 이런게 있네요 : CeleryRQ

    3) 작업은 FIFO 방식으로 진행한다.

    4) 위 과정을 간단하게 그림으로 표현한다면 아래와 같습니다. (서버는 꼭 AWS를 안써도 됩니다.)




    3. 동시접속자를 고려해서 개발을 하고 싶다면, 후에 Nginx를 사용하는게 어떨까 개인적으로 생각합니다. 아파치는 요즘 시대의 대용량 트래픽 대응에서는 적합하지 않은걸로 압니다.

    * [참고] Nginx와 c10k Problem : https://songc92.tistory.com/53

  • shekwl24
    60
    2020-05-12 13:26:13

    정성스런 답변 감사드립니다.

  • 로그인을 하시면 답변 을 등록할 수 있습니다.