개발로 웹 동시 접속자 늘리는 두가지 방법
일단 웹 백엔드 개발자로 2년차 밖에 안된 주니어니 틀린내용이 있을수도 있고 부족한 내용이 있을수 있습니다.
이는 댓글이나 메일로 보내주시기바랍니다.
AWS와 같은 기술이 늘면서 서버를 여러개를 두는것과 서버의 사양을 올리는건 이제 흔한 개념이 되어 되어버렸고 인프라로 쉽게 해결 할수 있게되었지만
그럼에도 불구하고 대부분 비용문제로 인해서 좋은 서버를 두지못하거나 서버의 개수를 쉽게 못올리는 경우가 많습니다.
그런분들을 위해서 위와 같은 글을 적습니다.
대부분의 서버구조는 다음과 같습니다
앞단의 로드밸런서가 애가 Web Server을 로드밸런싱을 해주고 그뒤에 웹서버는 DB서버를 쓰게 되어있다.
결국 웹이 하는거는 DB에 원하는값을 저장하고 불러오는 것인데 이말은 DB에 부하가 걸리면 웹서버가 널널하더라도 부족한 느려지는 현상이 오게됩니다.
물론 대역폭문제도 있을수 있지만 이 문제가 발생하는 경우는 극히드믈고 인프라 개선 말구 답이없기때문에 생략합니다.
즉 웹에서 가장 중요한건 DB이고 이를해결하면 웹서버를 수평적으로 확장이 쉬워집니다.
어떻게 하면 웹서버의 부하를 줄일수 있을까 고민해야합니다.
방법은 다음과 같다.
1. JOIN, LEFT,GROUP같은 DB가 부하가 될만한 것들은 웹서버로 옮긴다.
보통 RDB같은경우 이 위와 같은 DB를 자주 쓸수밖에 없다. 두개의 테이블을 JOIN시키면 무세팅으로 N*2 의 연산이 듭니다.
결국 DB의 부하가 많이 가는 작업이라는 점 입니다.
이 데이터를 웹서버에서 하게되면 웹서버만 쉽게 늘리수 있게되고 DB의 부하를 줄일수 있습니다.
C# 인경우 쉽게 해결할수 있는데 LINQ를 쓰면 됩니다.
2. 실시간성이 거의없는 데이터들은 웹서버의 메모리를 쓰자
비 실시간성인 데이터는 웹서버에 메모리를 쓰자는 겁니다.
아래의 스샷을 보면
흔히 말하는 BEST인데 이값을 실시간으로 계산해서 보여줄 필요는 전혀 없습니다.
이거와 별개로 사이트의 배너도 마찬가지 이며
저 같은경우 위와같은 데이터는 전부 메모리에 올려두고 해당데이터를 30분마다 새로운 데이터를 가져오는 전략을 선택합니다.
만약에 여러서버가 있고 동일한 페이지를 보여줘야한다면 정각 30분이 지났고 캐시가 리필을 안했다면 다시가져오면 됩니다.
그러면 동일한 페이지를 보여줄수 있게되고 큰문제가 없습니다..
간단한 두가지 방법으로 반응성 좋고 수평 확장이 편해져 많은 동시접속자를 유지할수 있게 됩니다.