1. Scale from zero to millions of users

✔ 해당 포스트는 System Design Interview An Insider’s Guide by Alex Xu의 서적을 번역하여 작성되었습니다.

1. Single Server

절차

Alt text

  1. 유저가 도메인명으로 웹사이트에 접근한다. (예를 들면 api.mysite.com) DNS 에서 이를 IP 주소로 리턴하여 유저에게 전달한다.
  2. IP 주소를 가지고 웹 서버에 HTTP 요청을 보낸다.
  3. 웹 서버는 HTML page or Json 응답을 전달한다.

Vertical Scaling vs Horizontal Scaling

Single Server 의 한계

Conclusion

2. Load balancer

Alt text

위 한계 점에 대한 해소

Conclusion

3. Database Replication

Alt text

위 한계 점에 대한 해소

Conclusion

4. Cache

절차 (read-through cache strategy)

Alt text

  1. 유저가 웹서버에 요청을 한다.
  2. 유저가 요청한 정보가 캐시에 있는지 확인한다.
    1. 없으면 DB로 부터 데이터를 조회하여 캐시에 저장하고, 그 결과 데이터를 응답한다.
    2. 있는 경우 캐시에서 데이터를 꺼내 응답한다.

위 한계 점에 대한 해소

Conclusion

5. CDN(Content Delivey Network)

Alt text

절차

  1. 유저가 특정 이미지를 이미지 URL을 사용하여 요청하며, 이때 URL 도메인은 CDN 제공자가 제공한 도메인이다. (예를 들면 http://mysite.cloudfront.net/logo.jpg)
  2. CDN 서버 내 캐시를 확인한다.
    1. 캐시에 없으면 CDN 에서 직접 origin에(웹 서버 또는 온라인 스토리지 서비스 - S3) 요청하여 리소스를 가져오는데 이 때 옵셔널로 http header와 ttl을 포함한다. 이러한 정보를 CDN 내 캐싱하며, TTL 만료시까지 이 이미지는 캐시서버에 유지된다.
    2. 캐시에 있으면 정보를 리턴한다.
  3. 유저에게 이미지 리소스를 리턴한다.

Conclusion

6. Stateless web tier

1. statefull architecture

Alt text

2. stateless architecture

Alt text

Conclusion

7. Data centers

Alt text

위 한계 점에 대한 해소

Conclusion

8. Message Queue

Alt text

Conclusion

9. Logging, metrics, automatic

Alt text

Logging

Metrics

Automation

Conclusion

10. Database Scaling

Vertical Scaling vs Horizontal Scaling

Alt text

Conclusion) Million of users and beyond

  1. 웹 계층을 stateless 하게 유지한다.
  2. 각 계층에서 이중화를 유지한다.
  3. 캐시 데이터를 가능하면 사용한다.
  4. 다중 데이터 센터를 구축한다.
  5. 정적 리소스는 CDN 에서 호스팅한다.
  6. 데이터 계층을 샤딩으로 확장장한다.
  7. 계층을 개별 서비스로 분리한다.
  8. 모니터링 시스템을 사용하고 자동화 툴을 사용하여 생산성을 높인다.

흐름에 따라 구조를 고치고 나면 아래와 같이 바꿀 수 있다.

Alt text