• 110개의 Q&A 사이트
  • 사용자: 430만명
  • 질문: 760만건
  • 답변: 1,360만건
  • 최근 30일 PV: 5.6억 (Y/Y 100% 성장중)
  • 서버 25대
    • 웹서버 11대
    • 로드밸런서 1대 (+ 예비1대)
    • DB서버 4대
    • 검색서버(ElasticSearch) 3대
    • Redis 2대
  • DB서버는 CPU 10% 를 유지하고, 384GB RAM 정도가 효과가 있었다.
    • 웹서버도 CPU 10% ~ 15% 정도 유지하도록 함.
  • .NET 프레임워크 프로젝트 9개
    • Build, SocketServer, StackAuth, Stackoverflow, Api, Api v2, Mobile, Tests
    • 코드 11만줄
    • 테스트 코드는 총 287개로 적다.
    • 대신 meta.stackoverflow.com 에 적용하고 이곳에서 유저들이 버그를 적극적으로 말해주고 있다. ㅎㅎ
    • 빠르게 움직이고 문제가 생기면 고친다.
      • 하루에 실서버도 5번 배포한다.
  • 거의 모든 곳에서 캐싱을 한다
    • Network Level Caches (Browser, CDN, etc.)
    • Server Level Cache (HttpRuntime.Cache)
    • Site Level Cache (Redis)
    • SQL Server Database Cache (384 gigs of RAM!)
    • Solid State Disk
  • 정적 메소드, 정적 클래스를 사용하여 캐싱한다.
    • (흠… 이 부분은 정확히 이해가 안 되지만 대충 이해한걸 적어보자면…)
    • 이게 객체지향 관점에선 별로 좋지 않다.
    • 하지만 성능이 좋으니까.
    • 예를 들어. 답변 리스팅의 탭은 active, oldest, votes 가 있는데.
      • 3가지 탭을 위한 클래스 처리가 실제로 나노초 밖에 걸리지 않지만.
      • 그래도 무조건 캐싱 한다.
      • 클래스를 만들면 가비지 컬렉터 대상이 늘기 때문이다.
      • 그래서 클래스 복사본을 만들고 캐싱을 하고, 각 페이지에서 재사용하는 구조로 되어있다.
  • 개발자는 5명
  • 성능을 위해 .NET 어셈블리 레벨까지 디어셈블해서 판다.

슬라이드:

동영상:

p.s, 월PV 5억 이상의 트래픽이 나오는 사이트도. DB 4대에 개발자 5명으로 운영된다니. 대단하다. (이정도 트래픽이면 내가 봐왔던 곳에서는 얼마나 많은 리소스를 쓸지…)