cleanUrl: /posts/design-to-scale-out
shared: true

팀에서 공유받은 글 중 특별히 눈이 가는 주제를 번역 및 요약하였다. 원문은 microsoft 의 글이며 이 기회에 scale out 을 위해 무엇을 주의해야 하고 어떤것을 고려해야하는지 정리하고 싶다.

Design to scale out - Azure Application Architecture Guide

application 이 수평적으로 scale-out 하도록 설계하라

요즘은 cloud 를 사용하면서 필요에 따라 instance 를 scale-out 하고, 필요가 줄어들면 쉽게 scale-in 하기 좋아졌다. 그래서 instance 에 올라가는 appliation 은 쉽게 추가 혹은 제거가 가능하도록 설계할 필요가 있다.

Recommendations

Avoid instance stickiness

여기서 의미하는 stickiness 는 어떠한 서버와 서버의 관계에 의존성이 있음을 의미하는 것으로 해석된다.

어떤 동일한 client 의 요청이 동일한 server 로 가는 것을 stickiness 로 간주한다.

이러한 stickiness 는 우리의 application 의 scale-out 의 발목을 잡는다.

대표적으로 다음의 예시가 있다.

모든 instance 가 어떠한 request 도 처리할 수 있도록 해야한다.

Identify bottlenecks

scale out 은 모든 성능 이슈에 대해 마스터 키가 아니다.

만약 DB가 bottleneck 이라면 아무리 web server 를 추가한다 하더라도 병목현상을 해결할 수 없다.

새로운 instance 를 추가하기 전에, 병목현상의 원인이 무엇인지 파악하여 문제의 범위를 분명히 하고 그 문제를 해결해야 한다.

상태를 갖고 있는 시스템이 bottleneck 의 원인이 되는 경우가 많다.

Decompose workloads by scalability requirements.