Stackoverflow.com 의 아키텍처
- 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명으로 운영된다니. 대단하다. (이정도 트래픽이면 내가 봐왔던 곳에서는 얼마나 많은 리소스를 쓸지…)