라벨이 능력인 게시물 표시

한대의 서버를 최대한 능력치로 끌어올리는 방법

 서버 한대에서 서비스를 하고자 할 때 보통 최대한 능력으로 사용하지 않는다. 이런 서버를 여러대 운영하다 보면 비효율적이란 생각이 든다. X86 서버 한대에 웹서비스를 운영한 경험이 있다. 1초에 한번씩 API를 호출하는 안드로이드 앱이 6천대 정도가 실행되는 환경이었다. 서버는 단 한대...., 보안 때문에 비용 때문에 각각의 이유로.... 그러한 서비스를 받아줄 서버는 X86 서버 한대 뿐이었다. 일단 API 서비스를 만들었다. 경량웹서비스인 Perfect 웹 프레임워크를 이용해서 만들었다. 스위프트 언어를 사용할 수 있어서 고차함수를 사용하면 아무래도 서비스를 좀 더 효율적으로 만들 수 있는 장점이 있다. 그리고 아이폰 개발자에게 좀 더 쉽게 다가갈 수 있었다. 또한 많이 사용하는 프레임워크가 아니라 보안에 우수한 장점이 있다. 웹서비스를 포트로 여러개를 만들어서 컴파일 했다. web_perfect_8100, web_perfect_8101,.... 이런 식으로... 필요한 서비스를 확장시켰다. 그리고 서버에 haproxy 를 설치했다. 외부에서 접속하는 것은 443 포트만 열었으며 나머지는 닫았다. haproxy 설정에서 각 서비스를 체크해서 분기하도록 설정했다. 서버의 상태를 보면서 이 서비스를 확장시켰다. 최대한 사용하도록 했더니 한대로 서비스를 해도 충분했다. 6천대가 사용하는데 동시접속은 거의 1천대 정도 되었으며 세션은 항상 10만개 정도 붙어 있었다. 그 이상 더 늘릴 수 있는데 못한 것은 데이터베이스 서버가 그 이상을 늘렸을 경우 응답속도가 급격히 저하되었다. 다음에 시간이 되면 데이터베이스 최적화한 경험을 이야기 해볼까 한다.