StackOverflow는 9대의 on-prem 서버로 운영중
(hanselminutes.com)- Scott Hanselman의 팟캐스트에서 스택오버플로우의 엔지니어링 디렉터 Roberta Arcoverde가 인터뷰한 내용 요약
- 8년전 소프트웨어 엔지니어로 입사해서 스태프 엔지니어(테크리드)가 되었다가, 올해 초에 관리자로 피봇
S: 엔지니어링 디렉터가 되어서 바뀐 것?
- R: 사람을 관리하게 됨. 경력을 관리하고, 성장하도록 도움. 또한 우리가 어디로 가야할지에 대한 전략전 비전을 가짐
소프트웨어 아키텍처가 어떤지 살펴보고 성장을 위한 방향으로 나아가는지, 이번 PR이 아닌 향후 3년간 우리가 원하는 곳으로 움직이는지 등을 지속적으로 챙김 - S: 좀 더 장기적인 계획을 세우고 행동한다는 거네요. 기술의 변화에 놀라지 않도록.
- R: 정확해요. 그리고 더 많은 1-on-1 미팅을 하고요.
- S: 지금 우리 Microsoft도 리뷰시즌인데, 몇일간 1on1 미팅과 평가만 계속 되거든요. 맨날 미팅만 해서 재미 없는데, 당신은 리프레시를 위해서 코드를 들여다 보기도 하나요?
- R: 네 코드를 봅니다. 나는 나같은 일선 관리자도 매일 코드를 작성해야한다고 강력하게 믿음. 그게 개인적으로 기술을 유지하는데 도움이 된다고 생각.
주니어 엔지니어들을 멘토링하는데도 도움이 되고, 시니어 엔지니어들이 제안한 변경의 영향을 평가하는데도 도움이 됨.
코드를 계속 작성하고 소프트웨어가 어디로 가는지 보고 있으면, 큰 재설계가 있을 때에도 그들이 최상의 결과를 낼 수 있도록 도와주는 '올바른 질문'을 할수 있게 됨.
S: 스택오버플로우의 아키텍처는 어떤가요?
- R: Stack Overflow는 좀 특이합니다. 특히 2008년에 시작한 다른 큰 사이트들과 비교했을 때요.
- 우리는 현재 14년된 코드베이스를 가지고 있고,
- 자체 데이터센터에서 on-prem 머신으로 운영합니다.
- 클라우드로 간적이 없어요.
- Monolithic 어플리케이션 이기도합니다. 서비스나 마이크로서비스로 나누지 않았어요.
- 멀티테넌트 웹앱도 가지고 있습니다. .NET 기반이고 9대의 웹서버에서 싱글앱으로 실행됩니다.
- IIS에서 운영되는데, 한대의 서버가 초당 6,000 리퀘스트를 처리합니다. (월간 20억 PV)
- S: IIS들은 아파치와 NGINX, 쿠버네티스 등이 뜨면서 많이 없어졌는데요. 이쪽으로 갈 수도 있었을텐데, 일부러 무시한 것들이 있나요? 또한 이건 SO에 필요한데?라고 생각한 것들은?
- R: 우린 그중 많은 것들을 무시했음. 가장 최근 것은 마이크로서비스와 쿠버네티스 관련 모든 것들.
무시한 가장 큰 이유는 SO의 가장 강력한 개발 철학 때문.
항상 이 질문에서 시작 "어떤 문제를 해결하려고 합니까?"
위와 같은 도구가 해결하려는 문제들은 우리가 직면한 문제를 해결해주지 않음.
예를 들어, Monolithic에서 마이크로서비스나 서비스들로 이관하는 것은 팀을 분할해서 확장하기 위한 것.
여러개의 팀이 같은 프로젝트를 충돌하지 않고 작업할수 있게 하고, 빠르게 배포하는 등.
빠른 배포도 우리에겐 문제가 아니었음. SO는 하루에 여러번씩, 4분만에 배포가 되며 문제가 있어도 빠르게 몇분만에 원복 가능
현재 우리의 리드타임(제품 생산시간) 이나 머지하는데 걸리는 시간은 훌륭하고, 고통스러운 일이 아님.
50명 정도의 엔지니어가 Q&A 플랫폼을 개발 중 - R: 2014년에는 10명이었고, 모두가 전체 코드베이스를 이해하는게 쉬었음.
이제는 새로운 엔지니어 온보딩이 힘들어지고 있긴 함.
언젠가는 특정 모듈을 분리하고, 전담팀이 들여다보면서 전체 코드를 이해하지 않게 될 수도 있음.
하지만 아직 거기까지 간것은 아님. 우린 아직 그 문제를 겪지 않고 있고, 우린 실용주의자임.
그외 아키텍처들
- 2 레이어의 캐쉬 (메모리와 웹서버)
- 또한 SQL Server 여러대 : 1.5테라 램으로 전체 DB의 1/3이 램에서 빠르게 접근 가능
→ 이건 클라우드에서 저렴하게 사용하기 어려운 아주 비싼 구성이라고 생각 - 질문 페이지는 캐쉬하지 않음. 가장 적중률이 높아서 80%의 트래픽이 그리로 가지만..
→ 예전엔 Redis로 캐쉬하려고 했지만, hit/miss 캐쉬 레이트가 별로 좋지 않았음 - 현재 페이지 렌더링 시간은 20ms 정도
- StackExchange 역시 같은 서버에서 멀티테넌트로 운영중. 한개의 어플리케이션이 200개의 사이트를 모두 처리
→ 즉, 한 어플리케이션만 배포하면 전체에 적용 됨 - HAProxy 아래에서 롤링빌드 됨
팟캐스트 스크립트를 읽어봤는데 haproxy 를 이용한 부분은 짧게 언급하고 지나가는 느낌이네요. 헬스체크 이야기와 모니터링을 많이 하고 있다는 대화로 연결되는 걸 보면 직접 잘 만들어서 하고 있다… 정도인 것 같네요 ^^;
저도 이전 회사에서 램 4TB서버 / 램 8TB 서버 운영해봤는데 구축비야 물론 어마어마하긴 했지만 확실히 그 사양을 클라우드로 대체할 수 있을 거란 생각은 안들더라구요.
요약 감사합니다.
인상적인 부분이 많습니다.
- IIS를 사용하고, MSA나 K8s를 쓰지 않는다. 필요없기 때문임.
- 1.5테라의 램 구성은 클라우드보다 온프렘이 가진 장점이다.
꽤 긴 인터뷰라서 중간 중간 요약했습니다. 전체를 들으시면서 스크립트를 참고하세요!
스크립트 : https://app.podscribe.ai/episode/83433649